From d83d204cce1778cbf9720c9a8785e89a441943cc Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sun, 10 Sep 2023 01:18:04 +0000 Subject: [PATCH] Rebuild pages at 920ca1efe6179b656566f212037d9694906ec691 --- AlagappanRa_ip_master/authorship.json | 2 +- AlagappanRa_ip_master/commits.json | 2 +- AlfredBeNoel_ip_master/authorship.json | 2 +- AlfredBeNoel_ip_master/commits.json | 2 +- Bombbird2001_ip_master/commits.json | 2 +- Chandan8186_ip_master/authorship.json | 2 +- Chandan8186_ip_master/commits.json | 2 +- ChangruHenryQian_ip_master/authorship.json | 2 +- ChangruHenryQian_ip_master/commits.json | 2 +- Chen-Kuei_ip_master/authorship.json | 2 +- Chen-Kuei_ip_master/commits.json | 2 +- D-Limiter_ip_master/authorship.json | 2 +- D-Limiter_ip_master/commits.json | 2 +- DonovanJJ_ip_master/authorship.json | 2 +- DonovanJJ_ip_master/commits.json | 2 +- Jweng88_ip_master/authorship.json | 2 +- Jweng88_ip_master/commits.json | 2 +- Kokseng1_ip_master/authorship.json | 2 +- Kokseng1_ip_master/commits.json | 2 +- LuahJunYang_ip_master/authorship.json | 2 +- LuahJunYang_ip_master/commits.json | 2 +- Mahidharah_ip_master/authorship.json | 2 +- Mahidharah_ip_master/commits.json | 2 +- RiyaMehta2211_ip_master/authorship.json | 2 +- RiyaMehta2211_ip_master/commits.json | 2 +- Sebtey_ip_master/authorship.json | 2 +- Sebtey_ip_master/commits.json | 2 +- StevenLiudw_ip_master/authorship.json | 2 +- StevenLiudw_ip_master/commits.json | 2 +- WinSheng1_ip_master/authorship.json | 2 +- WinSheng1_ip_master/commits.json | 2 +- ZD292_ip_master/authorship.json | 2 +- ZD292_ip_master/commits.json | 2 +- Zjinnnn_ip_master/authorship.json | 2 +- Zjinnnn_ip_master/commits.json | 2 +- archive.zip | Bin 9137076 -> 9259347 bytes beatricecst_ip_master/commits.json | 2 +- ceilingFan456_ip_master/authorship.json | 2 +- ceilingFan456_ip_master/commits.json | 2 +- chew01_ip_master/authorship.json | 2 +- chew01_ip_master/commits.json | 2 +- chewjh1234_ip_master/authorship.json | 2 +- chewjh1234_ip_master/commits.json | 2 +- chiayunrong_ip_master/authorship.json | 2 +- chiayunrong_ip_master/commits.json | 2 +- frrrrry_ip_master/authorship.json | 2 +- frrrrry_ip_master/commits.json | 2 +- geoffong11_ip_master/authorship.json | 2 +- geoffong11_ip_master/commits.json | 2 +- hyc17003_ip_master/authorship.json | 2 +- hyc17003_ip_master/commits.json | 2 +- jean-cq_ip_master/authorship.json | 2 +- jean-cq_ip_master/commits.json | 2 +- jellywaiyan_ip_master/authorship.json | 2 +- jellywaiyan_ip_master/commits.json | 2 +- jiakai-17_ip_master/authorship.json | 2 +- jiakai-17_ip_master/commits.json | 2 +- jonyeokj_ip_master/authorship.json | 2 +- jonyeokj_ip_master/commits.json | 2 +- laurenlim2112_ip_master/authorship.json | 2 +- laurenlim2112_ip_master/commits.json | 2 +- li-rongzhi_ip_master/authorship.json | 2 +- li-rongzhi_ip_master/commits.json | 2 +- lsyurea_ip_master/authorship.json | 2 +- lsyurea_ip_master/commits.json | 2 +- maj0-0_ip_master/authorship.json | 2 +- maj0-0_ip_master/commits.json | 2 +- marcellaantania_ip_master/authorship.json | 2 +- marcellaantania_ip_master/commits.json | 2 +- miljyy_ip_master/authorship.json | 2 +- miljyy_ip_master/commits.json | 2 +- nabonitasen_ip_master/authorship.json | 2 +- nabonitasen_ip_master/commits.json | 2 +- nathanielcalimag_ip_master/authorship.json | 2 +- nathanielcalimag_ip_master/commits.json | 2 +- neyapraveen_ip_master/authorship.json | 2 +- neyapraveen_ip_master/commits.json | 2 +- ngeeyonglim_ip_master/authorship.json | 2 +- ngeeyonglim_ip_master/commits.json | 2 +- proto-aiken-13_ip_master/authorship.json | 2 +- proto-aiken-13_ip_master/commits.json | 2 +- pzl111_ip_master/authorship.json | 2 +- pzl111_ip_master/commits.json | 2 +- raynertjx_ip_master/authorship.json | 2 +- raynertjx_ip_master/commits.json | 2 +- reposense-logs/reposense.log.0 | 14166 +++++++++---------- richiehx_ip_master/authorship.json | 2 +- richiehx_ip_master/commits.json | 2 +- ruiyangzh_ip_master/authorship.json | 2 +- ruiyangzh_ip_master/commits.json | 2 +- ruth-lim_ip_master/authorship.json | 2 +- ruth-lim_ip_master/commits.json | 2 +- seanpzk_ip_master/commits.json | 2 +- summary.json | 2 +- vansh284_ip_master/authorship.json | 2 +- vansh284_ip_master/commits.json | 2 +- waseemingly_ip_master/authorship.json | 2 +- waseemingly_ip_master/commits.json | 2 +- wujy28_ip_master/authorship.json | 2 +- wujy28_ip_master/commits.json | 2 +- zacwong2151_ip_master/authorship.json | 2 +- zacwong2151_ip_master/commits.json | 2 +- 102 files changed, 7183 insertions(+), 7183 deletions(-) diff --git a/AlagappanRa_ip_master/authorship.json b/AlagappanRa_ip_master/authorship.json index 9ba0a9d3..07f81f3c 100644 --- a/AlagappanRa_ip_master/authorship.json +++ b/AlagappanRa_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"# Duke project template","lastModifiedDate":"2020-05-25"},{"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":"-"},"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":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"},{"lineNumber":25,"author":{"gitId":"AlagappanRa"},"content":" ","lastModifiedDate":"2023-09-08"},{"lineNumber":26,"author":{"gitId":"AlagappanRa"},"content":"## Running the JAR file","lastModifiedDate":"2023-09-08"},{"lineNumber":27,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":28,"author":{"gitId":"AlagappanRa"},"content":"1. Download the JAR file from [here]","lastModifiedDate":"2023-09-08"},{"lineNumber":29,"author":{"gitId":"AlagappanRa"},"content":"2. Open the terminal and navigate to the directory where the JAR file is located","lastModifiedDate":"2023-09-08"},{"lineNumber":30,"author":{"gitId":"AlagappanRa"},"content":"3. Run the JAR file using the command `java -jar ip.jar`","lastModifiedDate":"2023-09-08"}],"authorContributionMap":{"AlagappanRa":6,"-":24}},{"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":"AlagappanRa"},"content":" testImplementation \u0027org.mockito:mockito-core:3.12.4\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","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":"","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"AlagappanRa"},"content":" mainClass.set(\"main.Duke\")","lastModifiedDate":"2023-09-08"},{"lineNumber":33,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"AlagappanRa"},"content":"jar {","lastModifiedDate":"2023-09-08"},{"lineNumber":36,"author":{"gitId":"AlagappanRa"},"content":" manifest {","lastModifiedDate":"2023-09-08"},{"lineNumber":37,"author":{"gitId":"AlagappanRa"},"content":" attributes \u0027Main-Class\u0027: \u0027main.Duke\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":38,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":39,"author":{"gitId":"AlagappanRa"},"content":" from {","lastModifiedDate":"2023-09-08"},{"lineNumber":40,"author":{"gitId":"AlagappanRa"},"content":" configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) }","lastModifiedDate":"2023-09-08"},{"lineNumber":41,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":42,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2023-09-08"},{"lineNumber":43,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":44,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":47,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":48,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":49,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":50,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":51,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":52,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"AlagappanRa":9,"-":43}},{"path":"src/main/java/commands/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AlagappanRa"},"content":"package commands;","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"AlagappanRa"},"content":"import components.DukeException;","lastModifiedDate":"2023-09-08"},{"lineNumber":3,"author":{"gitId":"AlagappanRa"},"content":"import components.Storage;","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"AlagappanRa"},"content":"import components.Ui;","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"AlagappanRa"},"content":"import tasks.TaskList;","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"AlagappanRa"},"content":"public abstract class Command {","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"AlagappanRa"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"AlagappanRa"},"content":" * Constructor for Command.","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"AlagappanRa"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"AlagappanRa"},"content":" public Command() {","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"AlagappanRa"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"AlagappanRa"},"content":" * Executes the command.","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"AlagappanRa"},"content":" * @param list","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"AlagappanRa"},"content":" * @param ui","lastModifiedDate":"2023-09-08"},{"lineNumber":19,"author":{"gitId":"AlagappanRa"},"content":" * @param storage","lastModifiedDate":"2023-09-08"},{"lineNumber":20,"author":{"gitId":"AlagappanRa"},"content":" * @throws DukeException","lastModifiedDate":"2023-09-08"},{"lineNumber":21,"author":{"gitId":"AlagappanRa"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":22,"author":{"gitId":"AlagappanRa"},"content":" public abstract void execute(TaskList list, Ui ui, Storage storage) throws DukeException;","lastModifiedDate":"2023-09-08"},{"lineNumber":23,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":24,"author":{"gitId":"AlagappanRa"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":25,"author":{"gitId":"AlagappanRa"},"content":" * Returns true if the command is an exit command.","lastModifiedDate":"2023-09-08"},{"lineNumber":26,"author":{"gitId":"AlagappanRa"},"content":" * @return boolean isExit","lastModifiedDate":"2023-09-08"},{"lineNumber":27,"author":{"gitId":"AlagappanRa"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":28,"author":{"gitId":"AlagappanRa"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-08"},{"lineNumber":29,"author":{"gitId":"AlagappanRa"},"content":" return false;","lastModifiedDate":"2023-09-08"},{"lineNumber":30,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":31,"author":{"gitId":"AlagappanRa"},"content":"}","lastModifiedDate":"2023-09-08"}],"authorContributionMap":{"AlagappanRa":31}},{"path":"src/main/java/commands/DeadlineCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AlagappanRa"},"content":"package commands;","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"AlagappanRa"},"content":"import components.DukeException;","lastModifiedDate":"2023-09-08"},{"lineNumber":3,"author":{"gitId":"AlagappanRa"},"content":"import components.Storage;","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"AlagappanRa"},"content":"import components.Ui;","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"AlagappanRa"},"content":"import tasks.Deadline;","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"AlagappanRa"},"content":"import tasks.TaskList;","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"AlagappanRa"},"content":"public class DeadlineCommand extends Command {","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"AlagappanRa"},"content":" private String command;","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"AlagappanRa"},"content":" public DeadlineCommand(String command) {","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"AlagappanRa"},"content":" this.command \u003d command;","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"AlagappanRa"},"content":" @Override","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"AlagappanRa"},"content":" public void execute(TaskList list, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"AlagappanRa"},"content":" list.addTask(new Deadline(command.substring(9)), storage);","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":19,"author":{"gitId":"AlagappanRa"},"content":"}","lastModifiedDate":"2023-09-08"}],"authorContributionMap":{"AlagappanRa":19}},{"path":"src/main/java/commands/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AlagappanRa"},"content":"package commands;","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":3,"author":{"gitId":"AlagappanRa"},"content":"import components.DukeException;","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"AlagappanRa"},"content":"import components.Storage;","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"AlagappanRa"},"content":"import components.Ui;","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"AlagappanRa"},"content":"import tasks.TaskList;","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"AlagappanRa"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"AlagappanRa"},"content":" private int index;","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"AlagappanRa"},"content":" public DeleteCommand(int index) {","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"AlagappanRa"},"content":" this.index \u003d index;","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"AlagappanRa"},"content":" @Override","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"AlagappanRa"},"content":" public void execute(TaskList list, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"AlagappanRa"},"content":" list.deleteTask(index, storage);","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"AlagappanRa"},"content":" return;","lastModifiedDate":"2023-09-08"},{"lineNumber":19,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":20,"author":{"gitId":"AlagappanRa"},"content":"}","lastModifiedDate":"2023-09-08"}],"authorContributionMap":{"AlagappanRa":20}},{"path":"src/main/java/commands/EventCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AlagappanRa"},"content":"package commands;","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":3,"author":{"gitId":"AlagappanRa"},"content":"import components.DukeException;","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"AlagappanRa"},"content":"import components.Storage;","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"AlagappanRa"},"content":"import components.Ui;","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"AlagappanRa"},"content":"import tasks.Event;","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"AlagappanRa"},"content":"import tasks.TaskList;","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"AlagappanRa"},"content":"public class EventCommand extends Command {","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"AlagappanRa"},"content":" private String command;","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"AlagappanRa"},"content":" public EventCommand(String command) {","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"AlagappanRa"},"content":" this.command \u003d command;","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"AlagappanRa"},"content":" @Override","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"AlagappanRa"},"content":" public void execute(TaskList list, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"AlagappanRa"},"content":" list.addTask(new Event(command.substring(6)), storage);","lastModifiedDate":"2023-09-08"},{"lineNumber":19,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":20,"author":{"gitId":"AlagappanRa"},"content":"}","lastModifiedDate":"2023-09-08"}],"authorContributionMap":{"AlagappanRa":20}},{"path":"src/main/java/commands/ExitCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AlagappanRa"},"content":"package commands;","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"AlagappanRa"},"content":"import components.Storage;","lastModifiedDate":"2023-09-08"},{"lineNumber":3,"author":{"gitId":"AlagappanRa"},"content":"import components.Ui;","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"AlagappanRa"},"content":"import tasks.TaskList;","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"AlagappanRa"},"content":"public class ExitCommand extends Command {","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"AlagappanRa"},"content":" public ExitCommand() {","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"AlagappanRa"},"content":" super();","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"AlagappanRa"},"content":" @Override","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"AlagappanRa"},"content":" public void execute(TaskList list, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"AlagappanRa"},"content":" ui.showBye();","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"AlagappanRa"},"content":" @Override","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"AlagappanRa"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"AlagappanRa"},"content":" return true;","lastModifiedDate":"2023-09-08"},{"lineNumber":19,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":20,"author":{"gitId":"AlagappanRa"},"content":"}","lastModifiedDate":"2023-09-08"}],"authorContributionMap":{"AlagappanRa":20}},{"path":"src/main/java/commands/MarkAsDoneCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AlagappanRa"},"content":"package commands;","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":3,"author":{"gitId":"AlagappanRa"},"content":"import components.DukeException;","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"AlagappanRa"},"content":"import components.Storage;","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"AlagappanRa"},"content":"import components.Ui;","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"AlagappanRa"},"content":"import tasks.TaskList;","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"AlagappanRa"},"content":"public class MarkAsDoneCommand extends Command {","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"AlagappanRa"},"content":" private Integer index;","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"AlagappanRa"},"content":" public MarkAsDoneCommand(Integer index) {","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"AlagappanRa"},"content":" super();","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"AlagappanRa"},"content":" this.index \u003d index;","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"AlagappanRa"},"content":" @Override","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"AlagappanRa"},"content":" public void execute(TaskList list, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"AlagappanRa"},"content":" try {","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"AlagappanRa"},"content":" list.markAsDone(index, storage);","lastModifiedDate":"2023-09-08"},{"lineNumber":19,"author":{"gitId":"AlagappanRa"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-08"},{"lineNumber":20,"author":{"gitId":"AlagappanRa"},"content":" System.out.println(Ui.LINE);","lastModifiedDate":"2023-09-08"},{"lineNumber":21,"author":{"gitId":"AlagappanRa"},"content":" System.out.println(e);","lastModifiedDate":"2023-09-08"},{"lineNumber":22,"author":{"gitId":"AlagappanRa"},"content":" System.out.println(Ui.LINE);","lastModifiedDate":"2023-09-08"},{"lineNumber":23,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":24,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":25,"author":{"gitId":"AlagappanRa"},"content":"}","lastModifiedDate":"2023-09-08"}],"authorContributionMap":{"AlagappanRa":25}},{"path":"src/main/java/commands/MarkAsUndoneCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AlagappanRa"},"content":"package commands;","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":3,"author":{"gitId":"AlagappanRa"},"content":"import components.DukeException;","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"AlagappanRa"},"content":"import components.Storage;","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"AlagappanRa"},"content":"import components.Ui;","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"AlagappanRa"},"content":"import tasks.TaskList;","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"AlagappanRa"},"content":"public class MarkAsUndoneCommand extends Command {","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"AlagappanRa"},"content":" private Integer index;","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"AlagappanRa"},"content":" public MarkAsUndoneCommand(Integer index) {","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"AlagappanRa"},"content":" super();","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"AlagappanRa"},"content":" this.index \u003d index;","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"AlagappanRa"},"content":" @Override","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"AlagappanRa"},"content":" public void execute(TaskList list, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"AlagappanRa"},"content":" try {","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"AlagappanRa"},"content":" list.markAsDone(index, storage);","lastModifiedDate":"2023-09-08"},{"lineNumber":19,"author":{"gitId":"AlagappanRa"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-08"},{"lineNumber":20,"author":{"gitId":"AlagappanRa"},"content":" System.out.println(Ui.LINE);","lastModifiedDate":"2023-09-08"},{"lineNumber":21,"author":{"gitId":"AlagappanRa"},"content":" System.out.println(e);","lastModifiedDate":"2023-09-08"},{"lineNumber":22,"author":{"gitId":"AlagappanRa"},"content":" System.out.println(Ui.LINE);","lastModifiedDate":"2023-09-08"},{"lineNumber":23,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":24,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":25,"author":{"gitId":"AlagappanRa"},"content":"}","lastModifiedDate":"2023-09-08"}],"authorContributionMap":{"AlagappanRa":25}},{"path":"src/main/java/commands/ShowCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AlagappanRa"},"content":"package commands;","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"AlagappanRa"},"content":"import components.Storage;","lastModifiedDate":"2023-09-08"},{"lineNumber":3,"author":{"gitId":"AlagappanRa"},"content":"import components.Ui;","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"AlagappanRa"},"content":"import tasks.TaskList;","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"AlagappanRa"},"content":"public class ShowCommand extends Command {","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"AlagappanRa"},"content":" public ShowCommand() {","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"AlagappanRa"},"content":" super();","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"AlagappanRa"},"content":" @Override","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"AlagappanRa"},"content":" public void execute(TaskList list, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"AlagappanRa"},"content":" list.printList();","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"AlagappanRa"},"content":"}","lastModifiedDate":"2023-09-08"}],"authorContributionMap":{"AlagappanRa":15}},{"path":"src/main/java/commands/ToDoCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AlagappanRa"},"content":"package commands;","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"AlagappanRa"},"content":"import components.DukeException;","lastModifiedDate":"2023-09-08"},{"lineNumber":3,"author":{"gitId":"AlagappanRa"},"content":"import components.Parser;","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"AlagappanRa"},"content":"import components.Storage;","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"AlagappanRa"},"content":"import components.Ui;","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"AlagappanRa"},"content":"import tasks.TaskList;","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"AlagappanRa"},"content":"public class ToDoCommand extends Command {","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"AlagappanRa"},"content":" private String command;","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"AlagappanRa"},"content":" public ToDoCommand(String command) {","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"AlagappanRa"},"content":" this.command \u003d command;","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"AlagappanRa"},"content":" @Override","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"AlagappanRa"},"content":" public void execute(TaskList list, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"AlagappanRa"},"content":" list.addTask(Parser.createToDoTask(command), storage);","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":19,"author":{"gitId":"AlagappanRa"},"content":"}","lastModifiedDate":"2023-09-08"}],"authorContributionMap":{"AlagappanRa":19}},{"path":"src/main/java/commands/UnknownCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AlagappanRa"},"content":"package commands;","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":3,"author":{"gitId":"AlagappanRa"},"content":"import components.Storage;","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"AlagappanRa"},"content":"import components.Ui;","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"AlagappanRa"},"content":"import tasks.TaskList;","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"AlagappanRa"},"content":"public class UnknownCommand extends Command {","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"AlagappanRa"},"content":" @Override","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"AlagappanRa"},"content":" public void execute(TaskList list, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"AlagappanRa"},"content":" System.out.println(Ui.LINE);","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"AlagappanRa"},"content":" System.out.println(\"I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"AlagappanRa"},"content":" System.out.println(Ui.LINE);","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"AlagappanRa"},"content":" ","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"AlagappanRa"},"content":"}","lastModifiedDate":"2023-09-08"}],"authorContributionMap":{"AlagappanRa":16}},{"path":"src/main/java/components/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AlagappanRa"},"content":"package components;","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":3,"author":{"gitId":"AlagappanRa"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"AlagappanRa"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"AlagappanRa"},"content":" * Constructor for DukeException.","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"AlagappanRa"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"AlagappanRa"},"content":" * @param message Error message.","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"AlagappanRa"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"AlagappanRa"},"content":" public DukeException(String message) {","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"AlagappanRa"},"content":" super(message);","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"AlagappanRa"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"AlagappanRa"},"content":" * Return error message.","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"AlagappanRa"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"AlagappanRa"},"content":" * @return Error message.","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"AlagappanRa"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":19,"author":{"gitId":"AlagappanRa"},"content":" @Override","lastModifiedDate":"2023-09-08"},{"lineNumber":20,"author":{"gitId":"AlagappanRa"},"content":" public String toString() {","lastModifiedDate":"2023-09-08"},{"lineNumber":21,"author":{"gitId":"AlagappanRa"},"content":" return String.format(\"😭 OOPS!!! %s\", super.getMessage());","lastModifiedDate":"2023-09-08"},{"lineNumber":22,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":23,"author":{"gitId":"AlagappanRa"},"content":"}","lastModifiedDate":"2023-09-08"}],"authorContributionMap":{"AlagappanRa":23}},{"path":"src/main/java/components/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AlagappanRa"},"content":"package components;","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"AlagappanRa"},"content":"import commands.Command;","lastModifiedDate":"2023-09-08"},{"lineNumber":3,"author":{"gitId":"AlagappanRa"},"content":"import commands.DeadlineCommand;","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"AlagappanRa"},"content":"import commands.DeleteCommand;","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"AlagappanRa"},"content":"import commands.EventCommand;","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"AlagappanRa"},"content":"import commands.ExitCommand;","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"AlagappanRa"},"content":"import commands.MarkAsDoneCommand;","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"AlagappanRa"},"content":"import commands.MarkAsUndoneCommand;","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"AlagappanRa"},"content":"import commands.ShowCommand;","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"AlagappanRa"},"content":"import commands.ToDoCommand;","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"AlagappanRa"},"content":"import commands.UnknownCommand;","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"AlagappanRa"},"content":"import tasks.ToDo;","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"AlagappanRa"},"content":"public class Parser {","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"AlagappanRa"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"AlagappanRa"},"content":" * Create a ToDo task.","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"AlagappanRa"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"AlagappanRa"},"content":" * @param command Command to be parsed.","lastModifiedDate":"2023-09-08"},{"lineNumber":19,"author":{"gitId":"AlagappanRa"},"content":" * @return ToDo task.","lastModifiedDate":"2023-09-08"},{"lineNumber":20,"author":{"gitId":"AlagappanRa"},"content":" * @throws DukeException If command is invalid.","lastModifiedDate":"2023-09-08"},{"lineNumber":21,"author":{"gitId":"AlagappanRa"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":22,"author":{"gitId":"AlagappanRa"},"content":" public static ToDo createToDoTask(String command) throws DukeException {","lastModifiedDate":"2023-09-08"},{"lineNumber":23,"author":{"gitId":"AlagappanRa"},"content":" try {","lastModifiedDate":"2023-09-08"},{"lineNumber":24,"author":{"gitId":"AlagappanRa"},"content":" command.substring(5);","lastModifiedDate":"2023-09-08"},{"lineNumber":25,"author":{"gitId":"AlagappanRa"},"content":" } catch (StringIndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-08"},{"lineNumber":26,"author":{"gitId":"AlagappanRa"},"content":" throw new DukeException(\"todo command must be followed by a space and a string. ERR: STRING INDEX OUT OF BOUNDS.\");","lastModifiedDate":"2023-09-08"},{"lineNumber":27,"author":{"gitId":"AlagappanRa"},"content":" } ","lastModifiedDate":"2023-09-08"},{"lineNumber":28,"author":{"gitId":"AlagappanRa"},"content":" ","lastModifiedDate":"2023-09-08"},{"lineNumber":29,"author":{"gitId":"AlagappanRa"},"content":" String description \u003d command.substring(5);","lastModifiedDate":"2023-09-08"},{"lineNumber":30,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":31,"author":{"gitId":"AlagappanRa"},"content":" if (description.isEmpty()) {","lastModifiedDate":"2023-09-08"},{"lineNumber":32,"author":{"gitId":"AlagappanRa"},"content":" throw new DukeException(\"todo command must be followed by a space and a string. ERR: NO STRING.\");","lastModifiedDate":"2023-09-08"},{"lineNumber":33,"author":{"gitId":"AlagappanRa"},"content":" } ","lastModifiedDate":"2023-09-08"},{"lineNumber":34,"author":{"gitId":"AlagappanRa"},"content":" return new ToDo(description);","lastModifiedDate":"2023-09-08"},{"lineNumber":35,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":36,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":37,"author":{"gitId":"AlagappanRa"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":38,"author":{"gitId":"AlagappanRa"},"content":" * Create a Deadline task.","lastModifiedDate":"2023-09-08"},{"lineNumber":39,"author":{"gitId":"AlagappanRa"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":40,"author":{"gitId":"AlagappanRa"},"content":" * @param fullCommand Command to be parsed.","lastModifiedDate":"2023-09-08"},{"lineNumber":41,"author":{"gitId":"AlagappanRa"},"content":" * @return Deadline task.","lastModifiedDate":"2023-09-08"},{"lineNumber":42,"author":{"gitId":"AlagappanRa"},"content":" * @throws DukeException If command is invalid.","lastModifiedDate":"2023-09-08"},{"lineNumber":43,"author":{"gitId":"AlagappanRa"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":44,"author":{"gitId":"AlagappanRa"},"content":" public static Command parse(String fullCommand) throws DukeException {","lastModifiedDate":"2023-09-08"},{"lineNumber":45,"author":{"gitId":"AlagappanRa"},"content":" String[] command \u003d fullCommand.split(\" \");","lastModifiedDate":"2023-09-08"},{"lineNumber":46,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":47,"author":{"gitId":"AlagappanRa"},"content":" switch (command[0]) {","lastModifiedDate":"2023-09-08"},{"lineNumber":48,"author":{"gitId":"AlagappanRa"},"content":" case \"bye\":","lastModifiedDate":"2023-09-08"},{"lineNumber":49,"author":{"gitId":"AlagappanRa"},"content":" return new ExitCommand();","lastModifiedDate":"2023-09-08"},{"lineNumber":50,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":51,"author":{"gitId":"AlagappanRa"},"content":" case \"list\":","lastModifiedDate":"2023-09-08"},{"lineNumber":52,"author":{"gitId":"AlagappanRa"},"content":" return new ShowCommand();","lastModifiedDate":"2023-09-08"},{"lineNumber":53,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":54,"author":{"gitId":"AlagappanRa"},"content":" case \"mark\":","lastModifiedDate":"2023-09-08"},{"lineNumber":55,"author":{"gitId":"AlagappanRa"},"content":" try {","lastModifiedDate":"2023-09-08"},{"lineNumber":56,"author":{"gitId":"AlagappanRa"},"content":" Integer.valueOf(fullCommand.substring(5));","lastModifiedDate":"2023-09-08"},{"lineNumber":57,"author":{"gitId":"AlagappanRa"},"content":" } catch (StringIndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-08"},{"lineNumber":58,"author":{"gitId":"AlagappanRa"},"content":" throw new DukeException(\"Mark command must be followed by a space and an integer. ERR: STRING INDEX OUT OF BOUNDS.\");","lastModifiedDate":"2023-09-08"},{"lineNumber":59,"author":{"gitId":"AlagappanRa"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-08"},{"lineNumber":60,"author":{"gitId":"AlagappanRa"},"content":" throw new DukeException(\"Mark command must be followed by a space and an integer. ERR: NOT AN INTEGER.\");","lastModifiedDate":"2023-09-08"},{"lineNumber":61,"author":{"gitId":"AlagappanRa"},"content":" } ","lastModifiedDate":"2023-09-08"},{"lineNumber":62,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":63,"author":{"gitId":"AlagappanRa"},"content":" return new MarkAsDoneCommand(Integer.valueOf(fullCommand.substring(5)));","lastModifiedDate":"2023-09-08"},{"lineNumber":64,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":65,"author":{"gitId":"AlagappanRa"},"content":" case \"unmark\":","lastModifiedDate":"2023-09-08"},{"lineNumber":66,"author":{"gitId":"AlagappanRa"},"content":" return new MarkAsUndoneCommand(Integer.valueOf(fullCommand.substring(7)));","lastModifiedDate":"2023-09-08"},{"lineNumber":67,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":68,"author":{"gitId":"AlagappanRa"},"content":" case \"todo\":","lastModifiedDate":"2023-09-08"},{"lineNumber":69,"author":{"gitId":"AlagappanRa"},"content":" return new ToDoCommand(fullCommand);","lastModifiedDate":"2023-09-08"},{"lineNumber":70,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":71,"author":{"gitId":"AlagappanRa"},"content":" case \"deadline\":","lastModifiedDate":"2023-09-08"},{"lineNumber":72,"author":{"gitId":"AlagappanRa"},"content":" return new DeadlineCommand(fullCommand);","lastModifiedDate":"2023-09-08"},{"lineNumber":73,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":74,"author":{"gitId":"AlagappanRa"},"content":" case \"event\":","lastModifiedDate":"2023-09-08"},{"lineNumber":75,"author":{"gitId":"AlagappanRa"},"content":" return new EventCommand(fullCommand);","lastModifiedDate":"2023-09-08"},{"lineNumber":76,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":77,"author":{"gitId":"AlagappanRa"},"content":" case \"delete\":","lastModifiedDate":"2023-09-08"},{"lineNumber":78,"author":{"gitId":"AlagappanRa"},"content":" return new DeleteCommand(Integer.parseInt(fullCommand.substring(7)));","lastModifiedDate":"2023-09-08"},{"lineNumber":79,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":80,"author":{"gitId":"AlagappanRa"},"content":" default:","lastModifiedDate":"2023-09-08"},{"lineNumber":81,"author":{"gitId":"AlagappanRa"},"content":" return new UnknownCommand();","lastModifiedDate":"2023-09-08"},{"lineNumber":82,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":83,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":84,"author":{"gitId":"AlagappanRa"},"content":"}","lastModifiedDate":"2023-09-08"}],"authorContributionMap":{"AlagappanRa":84}},{"path":"src/main/java/components/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AlagappanRa"},"content":"package components;","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"AlagappanRa"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"AlagappanRa"},"content":"import java.io.BufferedReader;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"AlagappanRa"},"content":"import java.io.BufferedWriter;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"AlagappanRa"},"content":"import java.io.File;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"AlagappanRa"},"content":"import java.io.FileReader;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"AlagappanRa"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"AlagappanRa"},"content":"import java.util.List;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"AlagappanRa"},"content":"import tasks.Deadline;","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"AlagappanRa"},"content":"import tasks.Event;","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"AlagappanRa"},"content":"import tasks.TaskList;","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"AlagappanRa"},"content":"import tasks.ToDo;","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"AlagappanRa"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"AlagappanRa"},"content":"public class Storage {","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"AlagappanRa"},"content":" private final String PARENT_DIR;","lastModifiedDate":"2023-09-08"},{"lineNumber":20,"author":{"gitId":"AlagappanRa"},"content":" private final String FILEPATH;","lastModifiedDate":"2023-09-08"},{"lineNumber":21,"author":{"gitId":"AlagappanRa"},"content":" File store;","lastModifiedDate":"2023-09-08"},{"lineNumber":22,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"AlagappanRa"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":24,"author":{"gitId":"AlagappanRa"},"content":" * Constructor for Storage class","lastModifiedDate":"2023-09-08"},{"lineNumber":25,"author":{"gitId":"AlagappanRa"},"content":" * @param PARENT_DIR The parent directory of the file to be created","lastModifiedDate":"2023-09-08"},{"lineNumber":26,"author":{"gitId":"AlagappanRa"},"content":" * @param FILEPATH The path of the file to be created","lastModifiedDate":"2023-09-08"},{"lineNumber":27,"author":{"gitId":"AlagappanRa"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":28,"author":{"gitId":"AlagappanRa"},"content":" public Storage(String PARENT_DIR, String FILEPATH) {","lastModifiedDate":"2023-09-08"},{"lineNumber":29,"author":{"gitId":"AlagappanRa"},"content":" this.PARENT_DIR \u003d PARENT_DIR;","lastModifiedDate":"2023-09-08"},{"lineNumber":30,"author":{"gitId":"AlagappanRa"},"content":" this.FILEPATH \u003d FILEPATH;","lastModifiedDate":"2023-09-08"},{"lineNumber":31,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"AlagappanRa"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":34,"author":{"gitId":"AlagappanRa"},"content":" * Creates a file if it does not exist","lastModifiedDate":"2023-09-08"},{"lineNumber":35,"author":{"gitId":"AlagappanRa"},"content":" * @throws DukeException","lastModifiedDate":"2023-09-08"},{"lineNumber":36,"author":{"gitId":"AlagappanRa"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":37,"author":{"gitId":"AlagappanRa"},"content":" public void loadOrCreateFile() throws DukeException {","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"AlagappanRa"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"AlagappanRa"},"content":" // Create a File object for the parent directory","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"AlagappanRa"},"content":" File parentDir \u003d new File(this.PARENT_DIR);","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"AlagappanRa"},"content":" //System.out.println(\"Parent dir \" + parentDir.getAbsolutePath());","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"AlagappanRa"},"content":" // Create the directory if it doesn\u0027t exist","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"AlagappanRa"},"content":" if (!parentDir.exists()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"AlagappanRa"},"content":" boolean dirCreated \u003d parentDir.mkdirs();","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"AlagappanRa"},"content":" if (!dirCreated) {","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"AlagappanRa"},"content":" throw new DukeException(\"Failed to create directory at \" + parentDir.getAbsolutePath());","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"AlagappanRa"},"content":" // Create a File object for the file to be created","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"AlagappanRa"},"content":" File file \u003d new File(this.FILEPATH);","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"AlagappanRa"},"content":" // Create the file if it doesn\u0027t exist","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"AlagappanRa"},"content":" if (!file.exists()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"AlagappanRa"},"content":" boolean fileCreated \u003d file.createNewFile();","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"AlagappanRa"},"content":" if (!fileCreated) {","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"AlagappanRa"},"content":" throw new DukeException(\"Failed to create store file at \" + file.getAbsolutePath());","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"AlagappanRa"},"content":" ","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"AlagappanRa"},"content":" //it is guaranteed that the file exists","lastModifiedDate":"2023-09-08"},{"lineNumber":63,"author":{"gitId":"AlagappanRa"},"content":" store \u003d file;","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"AlagappanRa"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"AlagappanRa"},"content":" throw new DukeException(FILEPATH + \" cannot be created.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"AlagappanRa"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":70,"author":{"gitId":"AlagappanRa"},"content":" * Reads data from the file and returns a TaskList object","lastModifiedDate":"2023-09-08"},{"lineNumber":71,"author":{"gitId":"AlagappanRa"},"content":" * @param storage","lastModifiedDate":"2023-09-08"},{"lineNumber":72,"author":{"gitId":"AlagappanRa"},"content":" * @return","lastModifiedDate":"2023-09-08"},{"lineNumber":73,"author":{"gitId":"AlagappanRa"},"content":" * @throws DukeException","lastModifiedDate":"2023-09-08"},{"lineNumber":74,"author":{"gitId":"AlagappanRa"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":75,"author":{"gitId":"AlagappanRa"},"content":" public TaskList readData(Storage storage) throws DukeException {","lastModifiedDate":"2023-09-08"},{"lineNumber":76,"author":{"gitId":"AlagappanRa"},"content":" BufferedReader br;","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"AlagappanRa"},"content":" TaskList result \u003d new TaskList();","lastModifiedDate":"2023-09-08"},{"lineNumber":78,"author":{"gitId":"AlagappanRa"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"AlagappanRa"},"content":" br \u003d new BufferedReader(new FileReader(this.store));","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"AlagappanRa"},"content":" String line;","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"AlagappanRa"},"content":" while ((line \u003d br.readLine()) !\u003d null) {","lastModifiedDate":"2023-09-01"},{"lineNumber":82,"author":{"gitId":"AlagappanRa"},"content":" //[T][X] read book ","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"AlagappanRa"},"content":" if (line.startsWith(\"[T]\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"AlagappanRa"},"content":" result.addTask(new ToDo(","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"AlagappanRa"},"content":" line.substring(7)),","lastModifiedDate":"2023-09-08"},{"lineNumber":86,"author":{"gitId":"AlagappanRa"},"content":" storage,","lastModifiedDate":"2023-09-08"},{"lineNumber":87,"author":{"gitId":"AlagappanRa"},"content":" true","lastModifiedDate":"2023-09-01"},{"lineNumber":88,"author":{"gitId":"AlagappanRa"},"content":" );","lastModifiedDate":"2023-09-01"},{"lineNumber":89,"author":{"gitId":"AlagappanRa"},"content":" if (line.charAt(4) \u003d\u003d \u0027X\u0027) {","lastModifiedDate":"2023-09-08"},{"lineNumber":90,"author":{"gitId":"AlagappanRa"},"content":" result.get(result.size() - 1).markAsDone();","lastModifiedDate":"2023-09-01"},{"lineNumber":91,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":92,"author":{"gitId":"AlagappanRa"},"content":" //[D][ ] return book (by: Sunday)","lastModifiedDate":"2023-09-01"},{"lineNumber":93,"author":{"gitId":"AlagappanRa"},"content":" } else if (line.startsWith(\"[D]\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":94,"author":{"gitId":"AlagappanRa"},"content":" int byIndex \u003d line.indexOf(\"(by: \");","lastModifiedDate":"2023-09-01"},{"lineNumber":95,"author":{"gitId":"AlagappanRa"},"content":" result.addTask(new Deadline(","lastModifiedDate":"2023-09-01"},{"lineNumber":96,"author":{"gitId":"AlagappanRa"},"content":" line.substring(7, byIndex - 1), ","lastModifiedDate":"2023-09-01"},{"lineNumber":97,"author":{"gitId":"AlagappanRa"},"content":" line.substring(byIndex + 5, line.length() - 1)),","lastModifiedDate":"2023-09-01"},{"lineNumber":98,"author":{"gitId":"AlagappanRa"},"content":" storage,","lastModifiedDate":"2023-09-08"},{"lineNumber":99,"author":{"gitId":"AlagappanRa"},"content":" true","lastModifiedDate":"2023-09-01"},{"lineNumber":100,"author":{"gitId":"AlagappanRa"},"content":" );","lastModifiedDate":"2023-09-01"},{"lineNumber":101,"author":{"gitId":"AlagappanRa"},"content":" if (line.charAt(4) \u003d\u003d \u0027X\u0027) {","lastModifiedDate":"2023-09-08"},{"lineNumber":102,"author":{"gitId":"AlagappanRa"},"content":" result.get(result.size() - 1).markAsDone();","lastModifiedDate":"2023-09-01"},{"lineNumber":103,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":104,"author":{"gitId":"AlagappanRa"},"content":" //[E][ ] project meeting (from: Mon 2pm to: Fri 4pm)","lastModifiedDate":"2023-09-01"},{"lineNumber":105,"author":{"gitId":"AlagappanRa"},"content":" } else if (line.startsWith(\"[E]\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":106,"author":{"gitId":"AlagappanRa"},"content":" int fromIndex \u003d line.indexOf(\" (from: \");","lastModifiedDate":"2023-09-01"},{"lineNumber":107,"author":{"gitId":"AlagappanRa"},"content":" int toIndex \u003d line.indexOf(\" to: \");","lastModifiedDate":"2023-09-01"},{"lineNumber":108,"author":{"gitId":"AlagappanRa"},"content":" result.addTask(new Event(","lastModifiedDate":"2023-09-01"},{"lineNumber":109,"author":{"gitId":"AlagappanRa"},"content":" line.substring(7, fromIndex), ","lastModifiedDate":"2023-09-01"},{"lineNumber":110,"author":{"gitId":"AlagappanRa"},"content":" line.substring(fromIndex + 8, toIndex),","lastModifiedDate":"2023-09-01"},{"lineNumber":111,"author":{"gitId":"AlagappanRa"},"content":" line.substring(toIndex + 5, line.length() - 1)),","lastModifiedDate":"2023-09-01"},{"lineNumber":112,"author":{"gitId":"AlagappanRa"},"content":" storage,","lastModifiedDate":"2023-09-08"},{"lineNumber":113,"author":{"gitId":"AlagappanRa"},"content":" true","lastModifiedDate":"2023-09-01"},{"lineNumber":114,"author":{"gitId":"AlagappanRa"},"content":" );","lastModifiedDate":"2023-09-01"},{"lineNumber":115,"author":{"gitId":"AlagappanRa"},"content":" if (line.charAt(4) \u003d\u003d \u0027X\u0027) {","lastModifiedDate":"2023-09-08"},{"lineNumber":116,"author":{"gitId":"AlagappanRa"},"content":" result.get(result.size() - 1).markAsDone();","lastModifiedDate":"2023-09-01"},{"lineNumber":117,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":118,"author":{"gitId":"AlagappanRa"},"content":" } ","lastModifiedDate":"2023-09-01"},{"lineNumber":119,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":120,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":121,"author":{"gitId":"AlagappanRa"},"content":" br.close();","lastModifiedDate":"2023-09-01"},{"lineNumber":122,"author":{"gitId":"AlagappanRa"},"content":" return result;","lastModifiedDate":"2023-09-01"},{"lineNumber":123,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":124,"author":{"gitId":"AlagappanRa"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":125,"author":{"gitId":"AlagappanRa"},"content":" throw new DukeException(\"Something went wrong: \" + e.getMessage());","lastModifiedDate":"2023-09-01"},{"lineNumber":126,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":127,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":128,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":129,"author":{"gitId":"AlagappanRa"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":130,"author":{"gitId":"AlagappanRa"},"content":" * Writes data to the file","lastModifiedDate":"2023-09-08"},{"lineNumber":131,"author":{"gitId":"AlagappanRa"},"content":" * @param newData","lastModifiedDate":"2023-09-08"},{"lineNumber":132,"author":{"gitId":"AlagappanRa"},"content":" * @throws DukeException","lastModifiedDate":"2023-09-08"},{"lineNumber":133,"author":{"gitId":"AlagappanRa"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":134,"author":{"gitId":"AlagappanRa"},"content":" public void writeData(String newData) throws DukeException {","lastModifiedDate":"2023-09-01"},{"lineNumber":135,"author":{"gitId":"AlagappanRa"},"content":" BufferedWriter bw;","lastModifiedDate":"2023-09-01"},{"lineNumber":136,"author":{"gitId":"AlagappanRa"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":137,"author":{"gitId":"AlagappanRa"},"content":" bw \u003d new BufferedWriter(new FileWriter(this.store, true)); ","lastModifiedDate":"2023-09-01"},{"lineNumber":138,"author":{"gitId":"AlagappanRa"},"content":" bw.newLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":139,"author":{"gitId":"AlagappanRa"},"content":" bw.write(newData);","lastModifiedDate":"2023-09-01"},{"lineNumber":140,"author":{"gitId":"AlagappanRa"},"content":" bw.close();","lastModifiedDate":"2023-09-01"},{"lineNumber":141,"author":{"gitId":"AlagappanRa"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":142,"author":{"gitId":"AlagappanRa"},"content":" throw new DukeException(\"Something went wrong: \" + e.getMessage());","lastModifiedDate":"2023-09-01"},{"lineNumber":143,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":144,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":145,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":146,"author":{"gitId":"AlagappanRa"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":147,"author":{"gitId":"AlagappanRa"},"content":" * Deletes a line from the file","lastModifiedDate":"2023-09-08"},{"lineNumber":148,"author":{"gitId":"AlagappanRa"},"content":" * @param lineNumber","lastModifiedDate":"2023-09-08"},{"lineNumber":149,"author":{"gitId":"AlagappanRa"},"content":" * @throws DukeException","lastModifiedDate":"2023-09-08"},{"lineNumber":150,"author":{"gitId":"AlagappanRa"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":151,"author":{"gitId":"AlagappanRa"},"content":" public void deleteLine(int lineNumber) throws DukeException {","lastModifiedDate":"2023-09-01"},{"lineNumber":152,"author":{"gitId":"AlagappanRa"},"content":" List\u003cString\u003e lines \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-01"},{"lineNumber":153,"author":{"gitId":"AlagappanRa"},"content":" BufferedReader br \u003d null;","lastModifiedDate":"2023-09-01"},{"lineNumber":154,"author":{"gitId":"AlagappanRa"},"content":" BufferedWriter bw \u003d null;","lastModifiedDate":"2023-09-01"},{"lineNumber":155,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":156,"author":{"gitId":"AlagappanRa"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":157,"author":{"gitId":"AlagappanRa"},"content":" // Read file into list","lastModifiedDate":"2023-09-01"},{"lineNumber":158,"author":{"gitId":"AlagappanRa"},"content":" br \u003d new BufferedReader(new FileReader(this.store));","lastModifiedDate":"2023-09-01"},{"lineNumber":159,"author":{"gitId":"AlagappanRa"},"content":" String line;","lastModifiedDate":"2023-09-01"},{"lineNumber":160,"author":{"gitId":"AlagappanRa"},"content":" while ((line \u003d br.readLine()) !\u003d null) {","lastModifiedDate":"2023-09-01"},{"lineNumber":161,"author":{"gitId":"AlagappanRa"},"content":" lines.add(line);","lastModifiedDate":"2023-09-01"},{"lineNumber":162,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":163,"author":{"gitId":"AlagappanRa"},"content":" br.close();","lastModifiedDate":"2023-09-01"},{"lineNumber":164,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":165,"author":{"gitId":"AlagappanRa"},"content":" // Remove the line","lastModifiedDate":"2023-09-01"},{"lineNumber":166,"author":{"gitId":"AlagappanRa"},"content":" if (lineNumber \u003c 1 || lineNumber \u003e lines.size()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":167,"author":{"gitId":"AlagappanRa"},"content":" throw new DukeException(\"Invalid line number\");","lastModifiedDate":"2023-09-01"},{"lineNumber":168,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":169,"author":{"gitId":"AlagappanRa"},"content":" lines.remove(lineNumber);","lastModifiedDate":"2023-09-01"},{"lineNumber":170,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":171,"author":{"gitId":"AlagappanRa"},"content":" // Write list back to file","lastModifiedDate":"2023-09-01"},{"lineNumber":172,"author":{"gitId":"AlagappanRa"},"content":" bw \u003d new BufferedWriter(new FileWriter(store));","lastModifiedDate":"2023-09-01"},{"lineNumber":173,"author":{"gitId":"AlagappanRa"},"content":" for (int i \u003d 0; i \u003c lines.size(); i++) {","lastModifiedDate":"2023-09-01"},{"lineNumber":174,"author":{"gitId":"AlagappanRa"},"content":" bw.write(lines.get(i));","lastModifiedDate":"2023-09-01"},{"lineNumber":175,"author":{"gitId":"AlagappanRa"},"content":" if (i \u003c lines.size() - 1) {","lastModifiedDate":"2023-09-01"},{"lineNumber":176,"author":{"gitId":"AlagappanRa"},"content":" bw.newLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":177,"author":{"gitId":"AlagappanRa"},"content":" } ","lastModifiedDate":"2023-09-01"},{"lineNumber":178,"author":{"gitId":"AlagappanRa"},"content":" } ","lastModifiedDate":"2023-09-01"},{"lineNumber":179,"author":{"gitId":"AlagappanRa"},"content":" bw.close();","lastModifiedDate":"2023-09-01"},{"lineNumber":180,"author":{"gitId":"AlagappanRa"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":181,"author":{"gitId":"AlagappanRa"},"content":" throw new DukeException(\"Something went wrong: \" + e.getMessage());","lastModifiedDate":"2023-09-01"},{"lineNumber":182,"author":{"gitId":"AlagappanRa"},"content":" } finally {","lastModifiedDate":"2023-09-01"},{"lineNumber":183,"author":{"gitId":"AlagappanRa"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":184,"author":{"gitId":"AlagappanRa"},"content":" if (br !\u003d null) {","lastModifiedDate":"2023-09-01"},{"lineNumber":185,"author":{"gitId":"AlagappanRa"},"content":" br.close();","lastModifiedDate":"2023-09-01"},{"lineNumber":186,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":187,"author":{"gitId":"AlagappanRa"},"content":" if (bw !\u003d null) {","lastModifiedDate":"2023-09-01"},{"lineNumber":188,"author":{"gitId":"AlagappanRa"},"content":" bw.close();","lastModifiedDate":"2023-09-01"},{"lineNumber":189,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":190,"author":{"gitId":"AlagappanRa"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":191,"author":{"gitId":"AlagappanRa"},"content":" throw new DukeException(\"Something went wrong while closing the file: \" + e.getMessage());","lastModifiedDate":"2023-09-01"},{"lineNumber":192,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":193,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":194,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":195,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":196,"author":{"gitId":"AlagappanRa"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":197,"author":{"gitId":"AlagappanRa"},"content":" * Replaces a line in the file","lastModifiedDate":"2023-09-08"},{"lineNumber":198,"author":{"gitId":"AlagappanRa"},"content":" * @param lineNumber","lastModifiedDate":"2023-09-08"},{"lineNumber":199,"author":{"gitId":"AlagappanRa"},"content":" * @param newData","lastModifiedDate":"2023-09-08"},{"lineNumber":200,"author":{"gitId":"AlagappanRa"},"content":" * @throws DukeException","lastModifiedDate":"2023-09-08"},{"lineNumber":201,"author":{"gitId":"AlagappanRa"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":202,"author":{"gitId":"AlagappanRa"},"content":" public void replaceLine(int lineNumber, String newData) throws DukeException {","lastModifiedDate":"2023-09-01"},{"lineNumber":203,"author":{"gitId":"AlagappanRa"},"content":" List\u003cString\u003e lines \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-01"},{"lineNumber":204,"author":{"gitId":"AlagappanRa"},"content":" BufferedReader br \u003d null;","lastModifiedDate":"2023-09-01"},{"lineNumber":205,"author":{"gitId":"AlagappanRa"},"content":" BufferedWriter bw \u003d null;","lastModifiedDate":"2023-09-01"},{"lineNumber":206,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":207,"author":{"gitId":"AlagappanRa"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":208,"author":{"gitId":"AlagappanRa"},"content":" // Read file into list","lastModifiedDate":"2023-09-01"},{"lineNumber":209,"author":{"gitId":"AlagappanRa"},"content":" br \u003d new BufferedReader(new FileReader(this.store));","lastModifiedDate":"2023-09-01"},{"lineNumber":210,"author":{"gitId":"AlagappanRa"},"content":" String line;","lastModifiedDate":"2023-09-01"},{"lineNumber":211,"author":{"gitId":"AlagappanRa"},"content":" while ((line \u003d br.readLine()) !\u003d null) {","lastModifiedDate":"2023-09-01"},{"lineNumber":212,"author":{"gitId":"AlagappanRa"},"content":" lines.add(line);","lastModifiedDate":"2023-09-01"},{"lineNumber":213,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":214,"author":{"gitId":"AlagappanRa"},"content":" br.close();","lastModifiedDate":"2023-09-01"},{"lineNumber":215,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":216,"author":{"gitId":"AlagappanRa"},"content":" // Replace the line","lastModifiedDate":"2023-09-01"},{"lineNumber":217,"author":{"gitId":"AlagappanRa"},"content":" if (lineNumber \u003c 1 || lineNumber \u003e lines.size()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":218,"author":{"gitId":"AlagappanRa"},"content":" throw new DukeException(\"Invalid line number\");","lastModifiedDate":"2023-09-01"},{"lineNumber":219,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":220,"author":{"gitId":"AlagappanRa"},"content":" lines.set(lineNumber, newData);","lastModifiedDate":"2023-09-01"},{"lineNumber":221,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":222,"author":{"gitId":"AlagappanRa"},"content":" // Write list back to file","lastModifiedDate":"2023-09-01"},{"lineNumber":223,"author":{"gitId":"AlagappanRa"},"content":" bw \u003d new BufferedWriter(new FileWriter(store));","lastModifiedDate":"2023-09-01"},{"lineNumber":224,"author":{"gitId":"AlagappanRa"},"content":" for (int i \u003d 0; i \u003c lines.size(); i++) {","lastModifiedDate":"2023-09-01"},{"lineNumber":225,"author":{"gitId":"AlagappanRa"},"content":" bw.write(lines.get(i));","lastModifiedDate":"2023-09-01"},{"lineNumber":226,"author":{"gitId":"AlagappanRa"},"content":" if (i \u003c lines.size() - 1) {","lastModifiedDate":"2023-09-01"},{"lineNumber":227,"author":{"gitId":"AlagappanRa"},"content":" bw.newLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":228,"author":{"gitId":"AlagappanRa"},"content":" } ","lastModifiedDate":"2023-09-01"},{"lineNumber":229,"author":{"gitId":"AlagappanRa"},"content":" } ","lastModifiedDate":"2023-09-01"},{"lineNumber":230,"author":{"gitId":"AlagappanRa"},"content":" bw.close();","lastModifiedDate":"2023-09-01"},{"lineNumber":231,"author":{"gitId":"AlagappanRa"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":232,"author":{"gitId":"AlagappanRa"},"content":" throw new DukeException(\"Something went wrong: \" + e.getMessage());","lastModifiedDate":"2023-09-01"},{"lineNumber":233,"author":{"gitId":"AlagappanRa"},"content":" } finally {","lastModifiedDate":"2023-09-01"},{"lineNumber":234,"author":{"gitId":"AlagappanRa"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":235,"author":{"gitId":"AlagappanRa"},"content":" if (br !\u003d null) {","lastModifiedDate":"2023-09-01"},{"lineNumber":236,"author":{"gitId":"AlagappanRa"},"content":" br.close();","lastModifiedDate":"2023-09-01"},{"lineNumber":237,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":238,"author":{"gitId":"AlagappanRa"},"content":" if (bw !\u003d null) {","lastModifiedDate":"2023-09-01"},{"lineNumber":239,"author":{"gitId":"AlagappanRa"},"content":" bw.close();","lastModifiedDate":"2023-09-01"},{"lineNumber":240,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":241,"author":{"gitId":"AlagappanRa"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":242,"author":{"gitId":"AlagappanRa"},"content":" throw new DukeException(\"Something went wrong while closing the file: \" + e.getMessage());","lastModifiedDate":"2023-09-01"},{"lineNumber":243,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":244,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":245,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":246,"author":{"gitId":"AlagappanRa"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"AlagappanRa":246}},{"path":"src/main/java/components/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AlagappanRa"},"content":"package components;","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":3,"author":{"gitId":"AlagappanRa"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"AlagappanRa"},"content":"public class Ui {","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"AlagappanRa"},"content":" private Scanner scanner;","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"AlagappanRa"},"content":" public static final String LINE \u003d \"__________________________________________________________________\";","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"AlagappanRa"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"AlagappanRa"},"content":" * Constructor for Ui class.","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"AlagappanRa"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"AlagappanRa"},"content":" public Ui () {","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"AlagappanRa"},"content":" scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"AlagappanRa"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"AlagappanRa"},"content":" * Prints the error message.","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"AlagappanRa"},"content":" * @param e","lastModifiedDate":"2023-09-08"},{"lineNumber":19,"author":{"gitId":"AlagappanRa"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":20,"author":{"gitId":"AlagappanRa"},"content":" public void showError(DukeException e) {","lastModifiedDate":"2023-09-08"},{"lineNumber":21,"author":{"gitId":"AlagappanRa"},"content":" System.out.println(Ui.LINE);","lastModifiedDate":"2023-09-08"},{"lineNumber":22,"author":{"gitId":"AlagappanRa"},"content":" System.out.println(e);","lastModifiedDate":"2023-09-08"},{"lineNumber":23,"author":{"gitId":"AlagappanRa"},"content":" System.out.println(Ui.LINE);","lastModifiedDate":"2023-09-08"},{"lineNumber":24,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":25,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":26,"author":{"gitId":"AlagappanRa"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":27,"author":{"gitId":"AlagappanRa"},"content":" * Prints the message.","lastModifiedDate":"2023-09-08"},{"lineNumber":28,"author":{"gitId":"AlagappanRa"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":29,"author":{"gitId":"AlagappanRa"},"content":" public void showLine() {","lastModifiedDate":"2023-09-08"},{"lineNumber":30,"author":{"gitId":"AlagappanRa"},"content":" System.out.println(Ui.LINE);","lastModifiedDate":"2023-09-08"},{"lineNumber":31,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":32,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":33,"author":{"gitId":"AlagappanRa"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":34,"author":{"gitId":"AlagappanRa"},"content":" * Reads the command using Scanner class.","lastModifiedDate":"2023-09-08"},{"lineNumber":35,"author":{"gitId":"AlagappanRa"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":36,"author":{"gitId":"AlagappanRa"},"content":" public String readCommand() {","lastModifiedDate":"2023-09-08"},{"lineNumber":37,"author":{"gitId":"AlagappanRa"},"content":" return scanner.nextLine();","lastModifiedDate":"2023-09-08"},{"lineNumber":38,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":39,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":40,"author":{"gitId":"AlagappanRa"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":41,"author":{"gitId":"AlagappanRa"},"content":" * Shows the welcome message.","lastModifiedDate":"2023-09-08"},{"lineNumber":42,"author":{"gitId":"AlagappanRa"},"content":" * @param chatBotName","lastModifiedDate":"2023-09-08"},{"lineNumber":43,"author":{"gitId":"AlagappanRa"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":44,"author":{"gitId":"AlagappanRa"},"content":" public void showWelcome(String chatBotName) {","lastModifiedDate":"2023-09-08"},{"lineNumber":45,"author":{"gitId":"AlagappanRa"},"content":" System.out.println(Ui.LINE);","lastModifiedDate":"2023-09-08"},{"lineNumber":46,"author":{"gitId":"AlagappanRa"},"content":" String logo \u003d \" ____ _ \\n\"","lastModifiedDate":"2023-09-08"},{"lineNumber":47,"author":{"gitId":"AlagappanRa"},"content":" + \"| _ \\\\ _ _| | _____ \\n\"","lastModifiedDate":"2023-09-08"},{"lineNumber":48,"author":{"gitId":"AlagappanRa"},"content":" + \"| | | | | | | |/ / _ \\\\\\n\"","lastModifiedDate":"2023-09-08"},{"lineNumber":49,"author":{"gitId":"AlagappanRa"},"content":" + \"| |_| | |_| | \u003c __/\\n\"","lastModifiedDate":"2023-09-08"},{"lineNumber":50,"author":{"gitId":"AlagappanRa"},"content":" + \"|____/ \\\\__,_|_|\\\\_\\\\___|\\n\";","lastModifiedDate":"2023-09-08"},{"lineNumber":51,"author":{"gitId":"AlagappanRa"},"content":" System.out.println(logo);","lastModifiedDate":"2023-09-08"},{"lineNumber":52,"author":{"gitId":"AlagappanRa"},"content":" System.out.println(\"Hello! I\u0027m \" + chatBotName);","lastModifiedDate":"2023-09-08"},{"lineNumber":53,"author":{"gitId":"AlagappanRa"},"content":" System.out.println(\"What can I do for you?\");","lastModifiedDate":"2023-09-08"},{"lineNumber":54,"author":{"gitId":"AlagappanRa"},"content":" System.out.println(Ui.LINE);","lastModifiedDate":"2023-09-08"},{"lineNumber":55,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":56,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":57,"author":{"gitId":"AlagappanRa"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":58,"author":{"gitId":"AlagappanRa"},"content":" * Shows the goodbye message.","lastModifiedDate":"2023-09-08"},{"lineNumber":59,"author":{"gitId":"AlagappanRa"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":60,"author":{"gitId":"AlagappanRa"},"content":" public void showBye() {","lastModifiedDate":"2023-09-08"},{"lineNumber":61,"author":{"gitId":"AlagappanRa"},"content":" System.out.println(\"Bye. Hope to see you again soon!\");","lastModifiedDate":"2023-09-08"},{"lineNumber":62,"author":{"gitId":"AlagappanRa"},"content":" System.out.println(Ui.LINE);","lastModifiedDate":"2023-09-08"},{"lineNumber":63,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":64,"author":{"gitId":"AlagappanRa"},"content":"}","lastModifiedDate":"2023-09-08"}],"authorContributionMap":{"AlagappanRa":64}},{"path":"src/main/java/main/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AlagappanRa"},"content":"package main;","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"AlagappanRa"},"content":"import commands.Command;","lastModifiedDate":"2023-09-08"},{"lineNumber":3,"author":{"gitId":"AlagappanRa"},"content":"import components.DukeException;","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"AlagappanRa"},"content":"import components.Parser;","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"AlagappanRa"},"content":"import components.Storage;","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"AlagappanRa"},"content":"import components.Ui;","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"AlagappanRa"},"content":"import tasks.TaskList;","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":10,"author":{"gitId":"AlagappanRa"},"content":" private final Storage storage;","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"AlagappanRa"},"content":" private TaskList list;","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"AlagappanRa"},"content":" private final Ui ui;","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"AlagappanRa"},"content":" private static final String chatBotName \u003d \"CHAD CCP\";","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"AlagappanRa"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"AlagappanRa"},"content":" * Constructor for Duke.","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"AlagappanRa"},"content":" * @param PARENT_DIR Parent directory of the file.","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"AlagappanRa"},"content":" * @param FILEPATH Filepath of the file.","lastModifiedDate":"2023-09-08"},{"lineNumber":19,"author":{"gitId":"AlagappanRa"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":20,"author":{"gitId":"AlagappanRa"},"content":" public Duke(String PARENT_DIR, String FILEPATH) {","lastModifiedDate":"2023-09-08"},{"lineNumber":21,"author":{"gitId":"AlagappanRa"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-09-08"},{"lineNumber":22,"author":{"gitId":"AlagappanRa"},"content":" storage \u003d new Storage(PARENT_DIR, FILEPATH);","lastModifiedDate":"2023-09-08"},{"lineNumber":23,"author":{"gitId":"AlagappanRa"},"content":" try {","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"AlagappanRa"},"content":" storage.loadOrCreateFile();","lastModifiedDate":"2023-09-08"},{"lineNumber":25,"author":{"gitId":"AlagappanRa"},"content":" list \u003d storage.readData(storage);","lastModifiedDate":"2023-09-08"},{"lineNumber":26,"author":{"gitId":"AlagappanRa"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"AlagappanRa"},"content":" ui.showError(e);","lastModifiedDate":"2023-09-08"},{"lineNumber":28,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":29,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":30,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":31,"author":{"gitId":"AlagappanRa"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":32,"author":{"gitId":"AlagappanRa"},"content":" * Drives the program by reading user input and executing the command.","lastModifiedDate":"2023-09-08"},{"lineNumber":33,"author":{"gitId":"AlagappanRa"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":34,"author":{"gitId":"AlagappanRa"},"content":" public void run() {","lastModifiedDate":"2023-09-08"},{"lineNumber":35,"author":{"gitId":"AlagappanRa"},"content":" ui.showWelcome(chatBotName);","lastModifiedDate":"2023-09-08"},{"lineNumber":36,"author":{"gitId":"AlagappanRa"},"content":" boolean isExit \u003d false;","lastModifiedDate":"2023-09-08"},{"lineNumber":37,"author":{"gitId":"AlagappanRa"},"content":" while (!isExit) {","lastModifiedDate":"2023-09-08"},{"lineNumber":38,"author":{"gitId":"AlagappanRa"},"content":" try {","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"AlagappanRa"},"content":" String fullCommand \u003d ui.readCommand();","lastModifiedDate":"2023-09-08"},{"lineNumber":40,"author":{"gitId":"AlagappanRa"},"content":" //ui.showLine(); ","lastModifiedDate":"2023-09-08"},{"lineNumber":41,"author":{"gitId":"AlagappanRa"},"content":" Command c \u003d Parser.parse(fullCommand);","lastModifiedDate":"2023-09-08"},{"lineNumber":42,"author":{"gitId":"AlagappanRa"},"content":" c.execute(list, ui, storage);","lastModifiedDate":"2023-09-08"},{"lineNumber":43,"author":{"gitId":"AlagappanRa"},"content":" isExit \u003d c.isExit();","lastModifiedDate":"2023-09-08"},{"lineNumber":44,"author":{"gitId":"AlagappanRa"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-08"},{"lineNumber":45,"author":{"gitId":"AlagappanRa"},"content":" ui.showError(e);","lastModifiedDate":"2023-09-08"},{"lineNumber":46,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":47,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":48,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":49,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":50,"author":{"gitId":"AlagappanRa"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":51,"author":{"gitId":"AlagappanRa"},"content":" * Main method to run the program.","lastModifiedDate":"2023-09-08"},{"lineNumber":52,"author":{"gitId":"AlagappanRa"},"content":" * @param args Command line arguments.","lastModifiedDate":"2023-09-08"},{"lineNumber":53,"author":{"gitId":"AlagappanRa"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":54,"author":{"gitId":"AlagappanRa"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-08"},{"lineNumber":55,"author":{"gitId":"AlagappanRa"},"content":" new Duke(\"./data\", \"./data/store.txt\").run();","lastModifiedDate":"2023-09-08"},{"lineNumber":56,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":57,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"AlagappanRa":54,"-":3}},{"path":"src/main/java/tasks/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AlagappanRa"},"content":"package tasks;","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"AlagappanRa"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"AlagappanRa"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"AlagappanRa"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"AlagappanRa"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"AlagappanRa"},"content":" private final String by;","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"AlagappanRa"},"content":" private LocalDate date;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"AlagappanRa"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"AlagappanRa"},"content":" * Constructor for Deadline class for stdin inputs","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"AlagappanRa"},"content":" * @param description","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"AlagappanRa"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"AlagappanRa"},"content":" public Deadline(String description) {","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"AlagappanRa"},"content":" super(description.substring(0, description.indexOf(\" /by\")));","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"AlagappanRa"},"content":" this.by \u003d description.substring(description.indexOf(\" /by \") + 5);","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"AlagappanRa"},"content":" setDate(this.by); ","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"AlagappanRa"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":21,"author":{"gitId":"AlagappanRa"},"content":" * Constructor for Deadline class for inputs from file","lastModifiedDate":"2023-09-08"},{"lineNumber":22,"author":{"gitId":"AlagappanRa"},"content":" * @param description","lastModifiedDate":"2023-09-08"},{"lineNumber":23,"author":{"gitId":"AlagappanRa"},"content":" * @param by","lastModifiedDate":"2023-09-08"},{"lineNumber":24,"author":{"gitId":"AlagappanRa"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":25,"author":{"gitId":"AlagappanRa"},"content":" public Deadline(String description, String by) {","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"AlagappanRa"},"content":" super(description);","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"AlagappanRa"},"content":" this.by \u003d by;","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"AlagappanRa"},"content":" setDate(this.by); ","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"AlagappanRa"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":32,"author":{"gitId":"AlagappanRa"},"content":" * Setter for date, checks if date is in yyyy-MM-dd format","lastModifiedDate":"2023-09-08"},{"lineNumber":33,"author":{"gitId":"AlagappanRa"},"content":" * @param by","lastModifiedDate":"2023-09-08"},{"lineNumber":34,"author":{"gitId":"AlagappanRa"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":35,"author":{"gitId":"AlagappanRa"},"content":" private void setDate(String by) {","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"AlagappanRa"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"AlagappanRa"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd\");","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"AlagappanRa"},"content":" this.date \u003d LocalDate.parse(by, formatter);","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"AlagappanRa"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"AlagappanRa"},"content":" this.date \u003d null;","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"AlagappanRa"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":45,"author":{"gitId":"AlagappanRa"},"content":" * Getter for date","lastModifiedDate":"2023-09-08"},{"lineNumber":46,"author":{"gitId":"AlagappanRa"},"content":" * @return date","lastModifiedDate":"2023-09-08"},{"lineNumber":47,"author":{"gitId":"AlagappanRa"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":48,"author":{"gitId":"AlagappanRa"},"content":" private String getDate(LocalDate date) {","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"AlagappanRa"},"content":" return date.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\"));","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"AlagappanRa"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":53,"author":{"gitId":"AlagappanRa"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":54,"author":{"gitId":"AlagappanRa"},"content":" return String.format(\"[D]%s (by: %s)\", super.toString(), date !\u003d null ?","lastModifiedDate":"2023-09-08"},{"lineNumber":55,"author":{"gitId":"AlagappanRa"},"content":" getDate(date)","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"AlagappanRa"},"content":" : by","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"AlagappanRa"},"content":" );","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":59,"author":{"gitId":"AlagappanRa"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"AlagappanRa":59}},{"path":"src/main/java/tasks/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AlagappanRa"},"content":"package tasks;","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"AlagappanRa"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"AlagappanRa"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"AlagappanRa"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"AlagappanRa"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"AlagappanRa"},"content":" private final String to;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"AlagappanRa"},"content":" private final String from;","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"AlagappanRa"},"content":" private LocalDate toDate;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"AlagappanRa"},"content":" private LocalDate fromDate;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"AlagappanRa"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"AlagappanRa"},"content":" * Constructor for Event class.","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"AlagappanRa"},"content":" * @param m String containing the description of the events","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"AlagappanRa"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"AlagappanRa"},"content":" public Event(String m) {","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"AlagappanRa"},"content":" super(m.substring(0, m.indexOf(\" /from\")));","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"AlagappanRa"},"content":" int indexOfFirstSlash \u003d m.indexOf(\"/from \");","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"AlagappanRa"},"content":" int indexOfSecondSlash \u003d m.indexOf(\"/to \", m.indexOf(\"/to \"));","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"AlagappanRa"},"content":" this.from \u003d m.substring(indexOfFirstSlash + 6, indexOfSecondSlash - 1);","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"AlagappanRa"},"content":" this.to \u003d m.substring(indexOfSecondSlash + 4);","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"AlagappanRa"},"content":" setDate(to, true);","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"AlagappanRa"},"content":" setDate(from, false);","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"AlagappanRa"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":27,"author":{"gitId":"AlagappanRa"},"content":" * Constructor for Event class.","lastModifiedDate":"2023-09-08"},{"lineNumber":28,"author":{"gitId":"AlagappanRa"},"content":" * @param m String containing the description of the event.","lastModifiedDate":"2023-09-08"},{"lineNumber":29,"author":{"gitId":"AlagappanRa"},"content":" * @param from String containing the starting date of the event.","lastModifiedDate":"2023-09-08"},{"lineNumber":30,"author":{"gitId":"AlagappanRa"},"content":" * @param to String containing the ending date of the event.","lastModifiedDate":"2023-09-08"},{"lineNumber":31,"author":{"gitId":"AlagappanRa"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":32,"author":{"gitId":"AlagappanRa"},"content":" public Event (String m, String from, String to) {","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"AlagappanRa"},"content":" super(m);","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"AlagappanRa"},"content":" this.from \u003d from;","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"AlagappanRa"},"content":" this.to \u003d to;","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"AlagappanRa"},"content":" setDate(to, true);","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"AlagappanRa"},"content":" setDate(from, false);","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"AlagappanRa"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":41,"author":{"gitId":"AlagappanRa"},"content":" * Sets the date of the event.","lastModifiedDate":"2023-09-08"},{"lineNumber":42,"author":{"gitId":"AlagappanRa"},"content":" * @param by String containing the date of the event.","lastModifiedDate":"2023-09-08"},{"lineNumber":43,"author":{"gitId":"AlagappanRa"},"content":" * @param isToDate Boolean value to check if the date is a proper date yyyy-MM-dd string.","lastModifiedDate":"2023-09-08"},{"lineNumber":44,"author":{"gitId":"AlagappanRa"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":45,"author":{"gitId":"AlagappanRa"},"content":" private void setDate(String by, boolean isToDate) {","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"AlagappanRa"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"AlagappanRa"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd\");","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"AlagappanRa"},"content":" if (isToDate) {","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"AlagappanRa"},"content":" toDate \u003d LocalDate.parse(by, formatter);","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"AlagappanRa"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"AlagappanRa"},"content":" fromDate \u003d LocalDate.parse(by, formatter);","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"AlagappanRa"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"AlagappanRa"},"content":" if (isToDate) {","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"AlagappanRa"},"content":" this.toDate \u003d null;","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"AlagappanRa"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"AlagappanRa"},"content":" this.fromDate \u003d null;","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"AlagappanRa"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":63,"author":{"gitId":"AlagappanRa"},"content":" * Returns the date of the event.","lastModifiedDate":"2023-09-08"},{"lineNumber":64,"author":{"gitId":"AlagappanRa"},"content":" * @param date LocalDate object containing the date of the event.","lastModifiedDate":"2023-09-08"},{"lineNumber":65,"author":{"gitId":"AlagappanRa"},"content":" * @return String containing the date of the event.","lastModifiedDate":"2023-09-08"},{"lineNumber":66,"author":{"gitId":"AlagappanRa"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":67,"author":{"gitId":"AlagappanRa"},"content":" private String getDate(LocalDate date) {","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"AlagappanRa"},"content":" return date.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\"));","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"AlagappanRa"},"content":" ","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"AlagappanRa"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":73,"author":{"gitId":"AlagappanRa"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":74,"author":{"gitId":"AlagappanRa"},"content":" return String.format(\"[E]%s (from: %s to: %s)\", super.toString(),","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"AlagappanRa"},"content":" fromDate !\u003d null ? getDate(fromDate) : from,","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"AlagappanRa"},"content":" toDate !\u003d null ? getDate(toDate) : to","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"AlagappanRa"},"content":" );","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":79,"author":{"gitId":"AlagappanRa"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"AlagappanRa":79}},{"path":"src/main/java/tasks/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AlagappanRa"},"content":"package tasks;","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"AlagappanRa"},"content":"public class Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"AlagappanRa"},"content":" private Boolean isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"AlagappanRa"},"content":" private final String description;","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"AlagappanRa"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"AlagappanRa"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"AlagappanRa"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"AlagappanRa"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"AlagappanRa"},"content":" return \"[\" + (isDone ? \"X\" : \" \") + \"] \" + description;","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"AlagappanRa"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"AlagappanRa"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"AlagappanRa"},"content":" public void markAsUndone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"AlagappanRa"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"AlagappanRa"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"AlagappanRa":23}},{"path":"src/main/java/tasks/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AlagappanRa"},"content":"package tasks;","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"AlagappanRa"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"AlagappanRa"},"content":"import components.DukeException;","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"AlagappanRa"},"content":"import components.Storage;","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"AlagappanRa"},"content":"import components.Ui;","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"AlagappanRa"},"content":"public class TaskList extends ArrayList\u003cTask\u003e {","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"AlagappanRa"},"content":" public TaskList() {","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"AlagappanRa"},"content":" super();","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"AlagappanRa"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"AlagappanRa"},"content":" * Prints the list of tasks in the TaskList.","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"AlagappanRa"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"AlagappanRa"},"content":" public void printList() {","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"AlagappanRa"},"content":" System.out.println(Ui.LINE);","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"AlagappanRa"},"content":" System.out.println(\"Here are the tasks in your list:\");","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"AlagappanRa"},"content":" for (int i \u003d 0; i \u003c this.size(); i++) {","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"AlagappanRa"},"content":" System.out.println((i + 1) + \". \" + this.get(i));","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"AlagappanRa"},"content":" System.out.println(Ui.LINE);","lastModifiedDate":"2023-09-08"},{"lineNumber":23,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"AlagappanRa"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":26,"author":{"gitId":"AlagappanRa"},"content":" * Marks a task as done.","lastModifiedDate":"2023-09-08"},{"lineNumber":27,"author":{"gitId":"AlagappanRa"},"content":" * @param index The index of the task to be marked as done.","lastModifiedDate":"2023-09-08"},{"lineNumber":28,"author":{"gitId":"AlagappanRa"},"content":" * @param storage The Storage object to write to.","lastModifiedDate":"2023-09-08"},{"lineNumber":29,"author":{"gitId":"AlagappanRa"},"content":" * @param isFromDatabase A boolean to indicate if the task is from the database.","lastModifiedDate":"2023-09-08"},{"lineNumber":30,"author":{"gitId":"AlagappanRa"},"content":" * @throws DukeException If the index is out of bounds.","lastModifiedDate":"2023-09-08"},{"lineNumber":31,"author":{"gitId":"AlagappanRa"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":32,"author":{"gitId":"AlagappanRa"},"content":" public void markAsDone(Integer index, Storage storage, boolean... isFromDatabase) throws DukeException{ ","lastModifiedDate":"2023-09-08"},{"lineNumber":33,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"AlagappanRa"},"content":" if (isFromDatabase.length \u003e 0 \u0026\u0026 isFromDatabase[0]) {","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"AlagappanRa"},"content":" this.get(Integer.valueOf(index - 1)).markAsDone();","lastModifiedDate":"2023-09-08"},{"lineNumber":36,"author":{"gitId":"AlagappanRa"},"content":" return;","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"AlagappanRa"},"content":" if (index \u003d\u003d 0) {","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"AlagappanRa"},"content":" throw new DukeException(\"Mark command must be followed by a space and an integer. ERR: NO INTEGER.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"AlagappanRa"},"content":" } ","lastModifiedDate":"2023-08-24"},{"lineNumber":42,"author":{"gitId":"AlagappanRa"},"content":" ","lastModifiedDate":"2023-08-24"},{"lineNumber":43,"author":{"gitId":"AlagappanRa"},"content":" try {","lastModifiedDate":"2023-08-24"},{"lineNumber":44,"author":{"gitId":"AlagappanRa"},"content":" this.get(index - 1).markAsDone();","lastModifiedDate":"2023-08-24"},{"lineNumber":45,"author":{"gitId":"AlagappanRa"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-24"},{"lineNumber":46,"author":{"gitId":"AlagappanRa"},"content":" throw new DukeException(\"There is no task at that index.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":47,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":48,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":49,"author":{"gitId":"AlagappanRa"},"content":" System.out.println(Ui.LINE);","lastModifiedDate":"2023-09-08"},{"lineNumber":50,"author":{"gitId":"AlagappanRa"},"content":" System.out.println(\"Nice! I\u0027ve marked this task as done:\");","lastModifiedDate":"2023-08-24"},{"lineNumber":51,"author":{"gitId":"AlagappanRa"},"content":" System.out.println(\" \" + this.get(index - 1));","lastModifiedDate":"2023-08-24"},{"lineNumber":52,"author":{"gitId":"AlagappanRa"},"content":" System.out.println(Ui.LINE);","lastModifiedDate":"2023-09-08"},{"lineNumber":53,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"AlagappanRa"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"AlagappanRa"},"content":" storage.replaceLine(index, this.get(index - 1).toString());","lastModifiedDate":"2023-09-08"},{"lineNumber":56,"author":{"gitId":"AlagappanRa"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"AlagappanRa"},"content":" System.out.println(Ui.LINE);","lastModifiedDate":"2023-09-08"},{"lineNumber":58,"author":{"gitId":"AlagappanRa"},"content":" System.out.println(e);","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"AlagappanRa"},"content":" System.out.println(Ui.LINE);","lastModifiedDate":"2023-09-08"},{"lineNumber":60,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"AlagappanRa"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":64,"author":{"gitId":"AlagappanRa"},"content":" * Marks a task as undone.","lastModifiedDate":"2023-09-08"},{"lineNumber":65,"author":{"gitId":"AlagappanRa"},"content":" * @param index The index of the task to be marked as undone.","lastModifiedDate":"2023-09-08"},{"lineNumber":66,"author":{"gitId":"AlagappanRa"},"content":" * @param storage The Storage object to write to.","lastModifiedDate":"2023-09-08"},{"lineNumber":67,"author":{"gitId":"AlagappanRa"},"content":" * @param isFromDatabase A boolean to indicate if the task is from the database.","lastModifiedDate":"2023-09-08"},{"lineNumber":68,"author":{"gitId":"AlagappanRa"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":69,"author":{"gitId":"AlagappanRa"},"content":" public void markAsUndone(int index, Storage storage, boolean... isFromDatabase) {","lastModifiedDate":"2023-09-08"},{"lineNumber":70,"author":{"gitId":"AlagappanRa"},"content":" ","lastModifiedDate":"2023-09-08"},{"lineNumber":71,"author":{"gitId":"AlagappanRa"},"content":" if (isFromDatabase.length \u003e 0 \u0026\u0026 isFromDatabase[0]) {","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"AlagappanRa"},"content":" this.get(index - 1).markAsUndone();","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"AlagappanRa"},"content":" return;","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":75,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":76,"author":{"gitId":"AlagappanRa"},"content":" System.out.println(Ui.LINE);","lastModifiedDate":"2023-09-08"},{"lineNumber":77,"author":{"gitId":"AlagappanRa"},"content":" System.out.println(\"OK, I\u0027ve marked this task as not done yet:\");","lastModifiedDate":"2023-08-24"},{"lineNumber":78,"author":{"gitId":"AlagappanRa"},"content":" this.get(index - 1).markAsUndone();","lastModifiedDate":"2023-08-24"},{"lineNumber":79,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":80,"author":{"gitId":"AlagappanRa"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"AlagappanRa"},"content":" storage.replaceLine(index, this.get(index - 1).toString());","lastModifiedDate":"2023-09-08"},{"lineNumber":82,"author":{"gitId":"AlagappanRa"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"AlagappanRa"},"content":" System.out.println(Ui.LINE);","lastModifiedDate":"2023-09-08"},{"lineNumber":84,"author":{"gitId":"AlagappanRa"},"content":" System.out.println(e);","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"AlagappanRa"},"content":" System.out.println(Ui.LINE);","lastModifiedDate":"2023-09-08"},{"lineNumber":86,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":87,"author":{"gitId":"AlagappanRa"},"content":" System.out.println(Ui.LINE);","lastModifiedDate":"2023-09-08"},{"lineNumber":88,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":89,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"AlagappanRa"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":91,"author":{"gitId":"AlagappanRa"},"content":" * Deletes a task from the TaskList.","lastModifiedDate":"2023-09-08"},{"lineNumber":92,"author":{"gitId":"AlagappanRa"},"content":" * @param index The index of the task to be deleted.","lastModifiedDate":"2023-09-08"},{"lineNumber":93,"author":{"gitId":"AlagappanRa"},"content":" * @param storage The Storage object to write to.","lastModifiedDate":"2023-09-08"},{"lineNumber":94,"author":{"gitId":"AlagappanRa"},"content":" * @param isFromDatabase A boolean to indicate if the task is from the database.","lastModifiedDate":"2023-09-08"},{"lineNumber":95,"author":{"gitId":"AlagappanRa"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":96,"author":{"gitId":"AlagappanRa"},"content":" public void deleteTask(int index, Storage storage, boolean... isFromDatabase) {","lastModifiedDate":"2023-09-08"},{"lineNumber":97,"author":{"gitId":"AlagappanRa"},"content":" if (isFromDatabase.length \u003e 0 \u0026\u0026 isFromDatabase[0]) {","lastModifiedDate":"2023-09-01"},{"lineNumber":98,"author":{"gitId":"AlagappanRa"},"content":" this.remove(index - 1);","lastModifiedDate":"2023-09-01"},{"lineNumber":99,"author":{"gitId":"AlagappanRa"},"content":" return;","lastModifiedDate":"2023-09-01"},{"lineNumber":100,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":101,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":102,"author":{"gitId":"AlagappanRa"},"content":" System.out.println(Ui.LINE);","lastModifiedDate":"2023-09-08"},{"lineNumber":103,"author":{"gitId":"AlagappanRa"},"content":" System.out.println(\"Noted. I\u0027ve removed this task:\");","lastModifiedDate":"2023-08-24"},{"lineNumber":104,"author":{"gitId":"AlagappanRa"},"content":" Task t \u003d this.remove(index - 1);","lastModifiedDate":"2023-08-24"},{"lineNumber":105,"author":{"gitId":"AlagappanRa"},"content":" System.out.println(\" \" + t);","lastModifiedDate":"2023-08-24"},{"lineNumber":106,"author":{"gitId":"AlagappanRa"},"content":" System.out.println(\"Now you have \" + Integer.toString(this.size()) + \" \" + (this.size() \u003d\u003d 1 ? \"task\" : \"tasks\") + \" in the list.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":107,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":108,"author":{"gitId":"AlagappanRa"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":109,"author":{"gitId":"AlagappanRa"},"content":" storage.deleteLine(index);","lastModifiedDate":"2023-09-08"},{"lineNumber":110,"author":{"gitId":"AlagappanRa"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":111,"author":{"gitId":"AlagappanRa"},"content":" System.out.println(Ui.LINE);","lastModifiedDate":"2023-09-08"},{"lineNumber":112,"author":{"gitId":"AlagappanRa"},"content":" System.out.println(e);","lastModifiedDate":"2023-09-01"},{"lineNumber":113,"author":{"gitId":"AlagappanRa"},"content":" System.out.println(Ui.LINE);","lastModifiedDate":"2023-09-08"},{"lineNumber":114,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":115,"author":{"gitId":"AlagappanRa"},"content":" System.out.println(Ui.LINE);","lastModifiedDate":"2023-09-08"},{"lineNumber":116,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":117,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":118,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":119,"author":{"gitId":"AlagappanRa"},"content":" public void addTask(Task task, Storage storage, boolean... isFromDatabase) {","lastModifiedDate":"2023-09-08"},{"lineNumber":120,"author":{"gitId":"AlagappanRa"},"content":" if (isFromDatabase.length \u003e 0 \u0026\u0026 isFromDatabase[0]) {","lastModifiedDate":"2023-09-01"},{"lineNumber":121,"author":{"gitId":"AlagappanRa"},"content":" this.add(task);","lastModifiedDate":"2023-09-01"},{"lineNumber":122,"author":{"gitId":"AlagappanRa"},"content":" return;","lastModifiedDate":"2023-09-01"},{"lineNumber":123,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":124,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":125,"author":{"gitId":"AlagappanRa"},"content":" System.out.println(Ui.LINE);","lastModifiedDate":"2023-09-08"},{"lineNumber":126,"author":{"gitId":"AlagappanRa"},"content":" System.out.println(\"Got it. I\u0027ve added this task:\");","lastModifiedDate":"2023-08-24"},{"lineNumber":127,"author":{"gitId":"AlagappanRa"},"content":" this.add(task);","lastModifiedDate":"2023-08-24"},{"lineNumber":128,"author":{"gitId":"AlagappanRa"},"content":" System.out.println(\" \" + task);","lastModifiedDate":"2023-08-24"},{"lineNumber":129,"author":{"gitId":"AlagappanRa"},"content":" System.out.println(\"Now you have \" + Integer.toString(this.size()) + \" \" + (this.size() \u003d\u003d 1 ? \"task\" : \"tasks\") + \" in the list.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":130,"author":{"gitId":"AlagappanRa"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":131,"author":{"gitId":"AlagappanRa"},"content":" storage.writeData(task.toString());","lastModifiedDate":"2023-09-08"},{"lineNumber":132,"author":{"gitId":"AlagappanRa"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":133,"author":{"gitId":"AlagappanRa"},"content":" System.out.println(Ui.LINE);","lastModifiedDate":"2023-09-08"},{"lineNumber":134,"author":{"gitId":"AlagappanRa"},"content":" System.out.println(e);","lastModifiedDate":"2023-09-01"},{"lineNumber":135,"author":{"gitId":"AlagappanRa"},"content":" System.out.println(Ui.LINE);","lastModifiedDate":"2023-09-08"},{"lineNumber":136,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":137,"author":{"gitId":"AlagappanRa"},"content":" System.out.println(Ui.LINE);","lastModifiedDate":"2023-09-08"},{"lineNumber":138,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":139,"author":{"gitId":"AlagappanRa"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"AlagappanRa":139}},{"path":"src/main/java/tasks/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AlagappanRa"},"content":"package tasks;","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"AlagappanRa"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"AlagappanRa"},"content":" public ToDo(String description) {","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"AlagappanRa"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"AlagappanRa"},"content":" ","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"AlagappanRa"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"AlagappanRa"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"AlagappanRa"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"AlagappanRa"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"AlagappanRa":12}},{"path":"src/test/java/components/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AlagappanRa"},"content":"package components;","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":3,"author":{"gitId":"AlagappanRa"},"content":"import static org.junit.jupiter.api.Assertions.*;","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"AlagappanRa"},"content":"import commands.*;","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"AlagappanRa"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"AlagappanRa"},"content":"public class ParserTest {","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"AlagappanRa"},"content":" @Test","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"AlagappanRa"},"content":" public void testParseExitCommand() throws DukeException {","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"AlagappanRa"},"content":" Command command \u003d Parser.parse(\"bye\");","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"AlagappanRa"},"content":" assertTrue(command instanceof ExitCommand);","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"AlagappanRa"},"content":" @Test","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"AlagappanRa"},"content":" public void testParseShowCommand() throws DukeException {","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"AlagappanRa"},"content":" Command command \u003d Parser.parse(\"list\");","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"AlagappanRa"},"content":" assertTrue(command instanceof ShowCommand);","lastModifiedDate":"2023-09-08"},{"lineNumber":19,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":20,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":21,"author":{"gitId":"AlagappanRa"},"content":" @Test","lastModifiedDate":"2023-09-08"},{"lineNumber":22,"author":{"gitId":"AlagappanRa"},"content":" public void testParseMarkAsDoneCommand() throws DukeException {","lastModifiedDate":"2023-09-08"},{"lineNumber":23,"author":{"gitId":"AlagappanRa"},"content":" Command command \u003d Parser.parse(\"mark 1\");","lastModifiedDate":"2023-09-08"},{"lineNumber":24,"author":{"gitId":"AlagappanRa"},"content":" assertTrue(command instanceof MarkAsDoneCommand);","lastModifiedDate":"2023-09-08"},{"lineNumber":25,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":26,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":27,"author":{"gitId":"AlagappanRa"},"content":" @Test","lastModifiedDate":"2023-09-08"},{"lineNumber":28,"author":{"gitId":"AlagappanRa"},"content":" public void testParseMarkAsDoneCommandInvalidIndex() {","lastModifiedDate":"2023-09-08"},{"lineNumber":29,"author":{"gitId":"AlagappanRa"},"content":" assertThrows(DukeException.class, () -\u003e Parser.parse(\"mark abc\"));","lastModifiedDate":"2023-09-08"},{"lineNumber":30,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":31,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":32,"author":{"gitId":"AlagappanRa"},"content":" @Test","lastModifiedDate":"2023-09-08"},{"lineNumber":33,"author":{"gitId":"AlagappanRa"},"content":" public void testParseMarkAsDoneCommandNoIndex() {","lastModifiedDate":"2023-09-08"},{"lineNumber":34,"author":{"gitId":"AlagappanRa"},"content":" assertThrows(DukeException.class, () -\u003e Parser.parse(\"mark\"));","lastModifiedDate":"2023-09-08"},{"lineNumber":35,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":36,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":37,"author":{"gitId":"AlagappanRa"},"content":" @Test","lastModifiedDate":"2023-09-08"},{"lineNumber":38,"author":{"gitId":"AlagappanRa"},"content":" public void testParseMarkAsUndoneCommand() throws DukeException {","lastModifiedDate":"2023-09-08"},{"lineNumber":39,"author":{"gitId":"AlagappanRa"},"content":" Command command \u003d Parser.parse(\"unmark 1\");","lastModifiedDate":"2023-09-08"},{"lineNumber":40,"author":{"gitId":"AlagappanRa"},"content":" assertTrue(command instanceof MarkAsUndoneCommand);","lastModifiedDate":"2023-09-08"},{"lineNumber":41,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":42,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":43,"author":{"gitId":"AlagappanRa"},"content":" @Test","lastModifiedDate":"2023-09-08"},{"lineNumber":44,"author":{"gitId":"AlagappanRa"},"content":" public void testParseToDoCommand() throws DukeException {","lastModifiedDate":"2023-09-08"},{"lineNumber":45,"author":{"gitId":"AlagappanRa"},"content":" Command command \u003d Parser.parse(\"todo some task\");","lastModifiedDate":"2023-09-08"},{"lineNumber":46,"author":{"gitId":"AlagappanRa"},"content":" assertTrue(command instanceof ToDoCommand);","lastModifiedDate":"2023-09-08"},{"lineNumber":47,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":48,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":49,"author":{"gitId":"AlagappanRa"},"content":" @Test","lastModifiedDate":"2023-09-08"},{"lineNumber":50,"author":{"gitId":"AlagappanRa"},"content":" public void testParseDeadlineCommand() throws DukeException {","lastModifiedDate":"2023-09-08"},{"lineNumber":51,"author":{"gitId":"AlagappanRa"},"content":" Command command \u003d Parser.parse(\"deadline some task\");","lastModifiedDate":"2023-09-08"},{"lineNumber":52,"author":{"gitId":"AlagappanRa"},"content":" assertTrue(command instanceof DeadlineCommand);","lastModifiedDate":"2023-09-08"},{"lineNumber":53,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":54,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":55,"author":{"gitId":"AlagappanRa"},"content":" @Test","lastModifiedDate":"2023-09-08"},{"lineNumber":56,"author":{"gitId":"AlagappanRa"},"content":" public void testParseEventCommand() throws DukeException {","lastModifiedDate":"2023-09-08"},{"lineNumber":57,"author":{"gitId":"AlagappanRa"},"content":" Command command \u003d Parser.parse(\"event some task\");","lastModifiedDate":"2023-09-08"},{"lineNumber":58,"author":{"gitId":"AlagappanRa"},"content":" assertTrue(command instanceof EventCommand);","lastModifiedDate":"2023-09-08"},{"lineNumber":59,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":60,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":61,"author":{"gitId":"AlagappanRa"},"content":" @Test","lastModifiedDate":"2023-09-08"},{"lineNumber":62,"author":{"gitId":"AlagappanRa"},"content":" public void testParseDeleteCommand() throws DukeException {","lastModifiedDate":"2023-09-08"},{"lineNumber":63,"author":{"gitId":"AlagappanRa"},"content":" Command command \u003d Parser.parse(\"delete 1\");","lastModifiedDate":"2023-09-08"},{"lineNumber":64,"author":{"gitId":"AlagappanRa"},"content":" assertTrue(command instanceof DeleteCommand);","lastModifiedDate":"2023-09-08"},{"lineNumber":65,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":66,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":67,"author":{"gitId":"AlagappanRa"},"content":" @Test","lastModifiedDate":"2023-09-08"},{"lineNumber":68,"author":{"gitId":"AlagappanRa"},"content":" public void testParseUnknownCommand() throws DukeException {","lastModifiedDate":"2023-09-08"},{"lineNumber":69,"author":{"gitId":"AlagappanRa"},"content":" Command command \u003d Parser.parse(\"unknown_command\");","lastModifiedDate":"2023-09-08"},{"lineNumber":70,"author":{"gitId":"AlagappanRa"},"content":" assertTrue(command instanceof UnknownCommand);","lastModifiedDate":"2023-09-08"},{"lineNumber":71,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":72,"author":{"gitId":"AlagappanRa"},"content":"}","lastModifiedDate":"2023-09-08"}],"authorContributionMap":{"AlagappanRa":72}},{"path":"src/test/java/components/StorageTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AlagappanRa"},"content":"package components;","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":3,"author":{"gitId":"AlagappanRa"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"AlagappanRa"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"AlagappanRa"},"content":"import org.junit.jupiter.api.io.TempDir;","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"AlagappanRa"},"content":"import java.io.BufferedWriter;","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"AlagappanRa"},"content":"import java.io.File;","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"AlagappanRa"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"AlagappanRa"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"AlagappanRa"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"AlagappanRa"},"content":"import static org.junit.jupiter.api.Assertions.*;","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"AlagappanRa"},"content":"public class StorageTest {","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"AlagappanRa"},"content":" private Storage storage;","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"AlagappanRa"},"content":" private File tempFile;","lastModifiedDate":"2023-09-08"},{"lineNumber":19,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":20,"author":{"gitId":"AlagappanRa"},"content":" @BeforeEach","lastModifiedDate":"2023-09-08"},{"lineNumber":21,"author":{"gitId":"AlagappanRa"},"content":" public void setUp(@TempDir Path tempDir) throws IOException, DukeException {","lastModifiedDate":"2023-09-08"},{"lineNumber":22,"author":{"gitId":"AlagappanRa"},"content":" tempFile \u003d File.createTempFile(\"temp\", \".txt\", tempDir.toFile());","lastModifiedDate":"2023-09-08"},{"lineNumber":23,"author":{"gitId":"AlagappanRa"},"content":" storage \u003d new Storage(tempDir.toString(), tempFile.getAbsolutePath());","lastModifiedDate":"2023-09-08"},{"lineNumber":24,"author":{"gitId":"AlagappanRa"},"content":" storage.loadOrCreateFile();","lastModifiedDate":"2023-09-08"},{"lineNumber":25,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":26,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":27,"author":{"gitId":"AlagappanRa"},"content":" @Test","lastModifiedDate":"2023-09-08"},{"lineNumber":28,"author":{"gitId":"AlagappanRa"},"content":" public void testDeleteLine_FileEmpty() {","lastModifiedDate":"2023-09-08"},{"lineNumber":29,"author":{"gitId":"AlagappanRa"},"content":" assertThrows(DukeException.class, () -\u003e storage.deleteLine(1));","lastModifiedDate":"2023-09-08"},{"lineNumber":30,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":31,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":32,"author":{"gitId":"AlagappanRa"},"content":" @Test","lastModifiedDate":"2023-09-08"},{"lineNumber":33,"author":{"gitId":"AlagappanRa"},"content":" public void testDeleteLine_InvalidLineNumber() {","lastModifiedDate":"2023-09-08"},{"lineNumber":34,"author":{"gitId":"AlagappanRa"},"content":" assertThrows(DukeException.class, () -\u003e storage.deleteLine(0));","lastModifiedDate":"2023-09-08"},{"lineNumber":35,"author":{"gitId":"AlagappanRa"},"content":" assertThrows(DukeException.class, () -\u003e storage.deleteLine(-1));","lastModifiedDate":"2023-09-08"},{"lineNumber":36,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":37,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":38,"author":{"gitId":"AlagappanRa"},"content":" @Test","lastModifiedDate":"2023-09-08"},{"lineNumber":39,"author":{"gitId":"AlagappanRa"},"content":" public void testDeleteLine_LineNumberGreaterThanFileLines() throws IOException {","lastModifiedDate":"2023-09-08"},{"lineNumber":40,"author":{"gitId":"AlagappanRa"},"content":" try (BufferedWriter bw \u003d new BufferedWriter(new FileWriter(tempFile))) {","lastModifiedDate":"2023-09-08"},{"lineNumber":41,"author":{"gitId":"AlagappanRa"},"content":" bw.write(\"Line 1\");","lastModifiedDate":"2023-09-08"},{"lineNumber":42,"author":{"gitId":"AlagappanRa"},"content":" bw.newLine();","lastModifiedDate":"2023-09-08"},{"lineNumber":43,"author":{"gitId":"AlagappanRa"},"content":" bw.write(\"Line 2\");","lastModifiedDate":"2023-09-08"},{"lineNumber":44,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":45,"author":{"gitId":"AlagappanRa"},"content":" assertThrows(DukeException.class, () -\u003e storage.deleteLine(3));","lastModifiedDate":"2023-09-08"},{"lineNumber":46,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":47,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":48,"author":{"gitId":"AlagappanRa"},"content":" @Test","lastModifiedDate":"2023-09-08"},{"lineNumber":49,"author":{"gitId":"AlagappanRa"},"content":" public void testDeleteLine_ValidLineNumber() throws IOException, DukeException {","lastModifiedDate":"2023-09-08"},{"lineNumber":50,"author":{"gitId":"AlagappanRa"},"content":" try (BufferedWriter bw \u003d new BufferedWriter(new FileWriter(tempFile))) {","lastModifiedDate":"2023-09-08"},{"lineNumber":51,"author":{"gitId":"AlagappanRa"},"content":" bw.write(\"Line 1\");","lastModifiedDate":"2023-09-08"},{"lineNumber":52,"author":{"gitId":"AlagappanRa"},"content":" bw.newLine();","lastModifiedDate":"2023-09-08"},{"lineNumber":53,"author":{"gitId":"AlagappanRa"},"content":" bw.write(\"Line 2\");","lastModifiedDate":"2023-09-08"},{"lineNumber":54,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":55,"author":{"gitId":"AlagappanRa"},"content":" assertDoesNotThrow(() -\u003e storage.deleteLine(1));","lastModifiedDate":"2023-09-08"},{"lineNumber":56,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":57,"author":{"gitId":"AlagappanRa"},"content":"}","lastModifiedDate":"2023-09-08"}],"authorContributionMap":{"AlagappanRa":57}},{"path":"text-ui-test/data/store.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"AlagappanRa"},"content":"[T][X] read book","lastModifiedDate":"2023-09-08"},{"lineNumber":3,"author":{"gitId":"AlagappanRa"},"content":"[T][X] return book","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"AlagappanRa"},"content":"[T][ ] buy bread","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"AlagappanRa"},"content":"[T][ ] borrow book","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"AlagappanRa"},"content":"[D][ ] return book (by: Sunday)","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"AlagappanRa"},"content":"[E][ ] project meeting (from: Mon 2pm to: Fri 4pm)","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"AlagappanRa"},"content":"[T][ ] read book","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"AlagappanRa"},"content":"[T][ ] return book","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"AlagappanRa"},"content":"[T][ ] buy bread","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"AlagappanRa"},"content":"[T][ ] borrow book","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"AlagappanRa"},"content":"[D][ ] return book (by: Sunday)","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"AlagappanRa"},"content":"[E][ ] project meeting (from: Mon 2pm to: Fri 4pm)","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"AlagappanRa"},"content":"[T][ ] read book","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"AlagappanRa"},"content":"[T][ ] return book","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"AlagappanRa"},"content":"[T][ ] buy bread","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"AlagappanRa"},"content":"[T][ ] read book","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"AlagappanRa"},"content":"[T][ ] return book","lastModifiedDate":"2023-09-08"},{"lineNumber":19,"author":{"gitId":"AlagappanRa"},"content":"[T][ ] buy bread","lastModifiedDate":"2023-09-08"},{"lineNumber":20,"author":{"gitId":"AlagappanRa"},"content":"[T][ ] borrow book","lastModifiedDate":"2023-09-08"},{"lineNumber":21,"author":{"gitId":"AlagappanRa"},"content":"[D][ ] return book (by: Sunday)","lastModifiedDate":"2023-09-08"},{"lineNumber":22,"author":{"gitId":"AlagappanRa"},"content":"[E][ ] project meeting (from: Mon 2pm to: Fri 4pm)","lastModifiedDate":"2023-09-08"},{"lineNumber":23,"author":{"gitId":"AlagappanRa"},"content":"[T][ ] read book","lastModifiedDate":"2023-09-08"},{"lineNumber":24,"author":{"gitId":"AlagappanRa"},"content":"[T][ ] return book","lastModifiedDate":"2023-09-08"},{"lineNumber":25,"author":{"gitId":"AlagappanRa"},"content":"[T][ ] buy bread","lastModifiedDate":"2023-09-08"},{"lineNumber":26,"author":{"gitId":"AlagappanRa"},"content":"[T][ ] borrow book","lastModifiedDate":"2023-09-08"},{"lineNumber":27,"author":{"gitId":"AlagappanRa"},"content":"[D][ ] return book (by: Sunday)","lastModifiedDate":"2023-09-08"},{"lineNumber":28,"author":{"gitId":"AlagappanRa"},"content":"[E][ ] project meeting (from: Mon 2pm to: Fri 4pm)","lastModifiedDate":"2023-09-08"},{"lineNumber":29,"author":{"gitId":"AlagappanRa"},"content":"[T][ ] read book","lastModifiedDate":"2023-09-08"},{"lineNumber":30,"author":{"gitId":"AlagappanRa"},"content":"[T][ ] return book","lastModifiedDate":"2023-09-08"},{"lineNumber":31,"author":{"gitId":"AlagappanRa"},"content":"[T][ ] buy bread","lastModifiedDate":"2023-09-08"},{"lineNumber":32,"author":{"gitId":"AlagappanRa"},"content":"[T][ ] borrow book","lastModifiedDate":"2023-09-08"},{"lineNumber":33,"author":{"gitId":"AlagappanRa"},"content":"[D][ ] return book (by: Sunday)","lastModifiedDate":"2023-09-08"},{"lineNumber":34,"author":{"gitId":"AlagappanRa"},"content":"[E][ ] project meeting (from: Mon 2pm to: Fri 4pm)","lastModifiedDate":"2023-09-08"}],"authorContributionMap":{"AlagappanRa":34}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"AlagappanRa"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"AlagappanRa"},"content":"blah","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"AlagappanRa"},"content":"todo read book","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"AlagappanRa"},"content":"todo return book","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"AlagappanRa"},"content":"todo buy bread","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"AlagappanRa"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"AlagappanRa"},"content":"mark 1","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"AlagappanRa"},"content":"mark 2","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"AlagappanRa"},"content":"unmark 2","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"AlagappanRa"},"content":"todo borrow book","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"AlagappanRa"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"AlagappanRa"},"content":"deadline return book /by Sunday","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"AlagappanRa"},"content":"event project meeting /from Mon 2pm /to Fri 4pm","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"AlagappanRa"},"content":"list","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"AlagappanRa"},"content":"bye","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"AlagappanRa":15}},{"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":"AlagappanRa"},"content":"for /r \"..\\src\\main\\java\" %%a in (*.java) do (","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"AlagappanRa"},"content":" javac -cp ..\\src\\main\\java -Xlint:none -d ..\\bin %%a","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"AlagappanRa"},"content":")","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"-"},"content":"IF ERRORLEVEL 1 (","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":" echo ********** BUILD FAILURE **********","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":" exit /b 1","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":")","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"REM no error here, errorlevel \u003d\u003d 0","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"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":20,"author":{"gitId":"AlagappanRa"},"content":"java -classpath ..\\bin main.Duke \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":"REM compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":"FC ACTUAL.TXT EXPECTED.TXT","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"AlagappanRa":4,"-":19}}] +[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"# Duke project template","lastModifiedDate":"2020-05-25"},{"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":"-"},"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":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"},{"lineNumber":25,"author":{"gitId":"AlagappanRa"},"content":" ","lastModifiedDate":"2023-09-08"},{"lineNumber":26,"author":{"gitId":"AlagappanRa"},"content":"## Running the JAR file","lastModifiedDate":"2023-09-08"},{"lineNumber":27,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":28,"author":{"gitId":"AlagappanRa"},"content":"1. Download the JAR file from [here]","lastModifiedDate":"2023-09-08"},{"lineNumber":29,"author":{"gitId":"AlagappanRa"},"content":"2. Open the terminal and navigate to the directory where the JAR file is located","lastModifiedDate":"2023-09-08"},{"lineNumber":30,"author":{"gitId":"AlagappanRa"},"content":"3. Run the JAR file using the command `java -jar ip.jar`","lastModifiedDate":"2023-09-08"}],"authorContributionMap":{"AlagappanRa":6,"-":24}},{"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":"AlagappanRa"},"content":" testImplementation \u0027org.mockito:mockito-core:3.12.4\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","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":"","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"AlagappanRa"},"content":" mainClass.set(\"main.Duke\")","lastModifiedDate":"2023-09-08"},{"lineNumber":33,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"AlagappanRa"},"content":"jar {","lastModifiedDate":"2023-09-08"},{"lineNumber":36,"author":{"gitId":"AlagappanRa"},"content":" manifest {","lastModifiedDate":"2023-09-08"},{"lineNumber":37,"author":{"gitId":"AlagappanRa"},"content":" attributes \u0027Main-Class\u0027: \u0027main.Duke\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":38,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":39,"author":{"gitId":"AlagappanRa"},"content":" from {","lastModifiedDate":"2023-09-08"},{"lineNumber":40,"author":{"gitId":"AlagappanRa"},"content":" configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) }","lastModifiedDate":"2023-09-08"},{"lineNumber":41,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":42,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2023-09-08"},{"lineNumber":43,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":44,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":47,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":48,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":49,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":50,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":51,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":52,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"AlagappanRa":9,"-":43}},{"path":"data/store.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":2,"author":{"gitId":"AlagappanRa"},"content":"[T][ ] read books","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"AlagappanRa"},"content":"[T][ ] f books","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"AlagappanRa"},"content":"[D][ ] fbooks (by: 12-06-07)","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"AlagappanRa"},"content":"[T][ ] something else","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"AlagappanRa":5}},{"path":"src/main/java/commands/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AlagappanRa"},"content":"package commands;","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"AlagappanRa"},"content":"import components.DukeException;","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"AlagappanRa"},"content":"import components.Storage;","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"AlagappanRa"},"content":"import components.Ui;","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"AlagappanRa"},"content":"import tasks.TaskList;","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"AlagappanRa"},"content":"public abstract class Command {","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"AlagappanRa"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"AlagappanRa"},"content":" * Constructor for Command.","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"AlagappanRa"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"AlagappanRa"},"content":" public Command() {","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"AlagappanRa"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"AlagappanRa"},"content":" * Executes the command.","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"AlagappanRa"},"content":" * @param list","lastModifiedDate":"2023-09-08"},{"lineNumber":19,"author":{"gitId":"AlagappanRa"},"content":" * @param ui","lastModifiedDate":"2023-09-08"},{"lineNumber":20,"author":{"gitId":"AlagappanRa"},"content":" * @param storage","lastModifiedDate":"2023-09-08"},{"lineNumber":21,"author":{"gitId":"AlagappanRa"},"content":" * @throws DukeException","lastModifiedDate":"2023-09-08"},{"lineNumber":22,"author":{"gitId":"AlagappanRa"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":23,"author":{"gitId":"AlagappanRa"},"content":" public abstract void execute(TaskList list, Ui ui, Storage storage) throws DukeException;","lastModifiedDate":"2023-09-08"},{"lineNumber":24,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":25,"author":{"gitId":"AlagappanRa"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":26,"author":{"gitId":"AlagappanRa"},"content":" * Returns true if the command is an exit command.","lastModifiedDate":"2023-09-08"},{"lineNumber":27,"author":{"gitId":"AlagappanRa"},"content":" * @return boolean isExit","lastModifiedDate":"2023-09-08"},{"lineNumber":28,"author":{"gitId":"AlagappanRa"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":29,"author":{"gitId":"AlagappanRa"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-08"},{"lineNumber":30,"author":{"gitId":"AlagappanRa"},"content":" return false;","lastModifiedDate":"2023-09-08"},{"lineNumber":31,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":32,"author":{"gitId":"AlagappanRa"},"content":"}","lastModifiedDate":"2023-09-08"}],"authorContributionMap":{"AlagappanRa":32}},{"path":"src/main/java/commands/DeadlineCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AlagappanRa"},"content":"package commands;","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"AlagappanRa"},"content":"import components.DukeException;","lastModifiedDate":"2023-09-08"},{"lineNumber":3,"author":{"gitId":"AlagappanRa"},"content":"import components.Storage;","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"AlagappanRa"},"content":"import components.Ui;","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"AlagappanRa"},"content":"import tasks.Deadline;","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"AlagappanRa"},"content":"import tasks.TaskList;","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"AlagappanRa"},"content":"public class DeadlineCommand extends Command {","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"AlagappanRa"},"content":" private String command;","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"AlagappanRa"},"content":" public DeadlineCommand(String command) {","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"AlagappanRa"},"content":" this.command \u003d command;","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"AlagappanRa"},"content":" @Override","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"AlagappanRa"},"content":" public void execute(TaskList list, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"AlagappanRa"},"content":" list.addTask(new Deadline(command.substring(9)), storage);","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":19,"author":{"gitId":"AlagappanRa"},"content":"}","lastModifiedDate":"2023-09-08"}],"authorContributionMap":{"AlagappanRa":19}},{"path":"src/main/java/commands/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AlagappanRa"},"content":"package commands;","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":3,"author":{"gitId":"AlagappanRa"},"content":"import components.DukeException;","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"AlagappanRa"},"content":"import components.Storage;","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"AlagappanRa"},"content":"import components.Ui;","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"AlagappanRa"},"content":"import tasks.TaskList;","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"AlagappanRa"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"AlagappanRa"},"content":" private int index;","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"AlagappanRa"},"content":" public DeleteCommand(int index) {","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"AlagappanRa"},"content":" this.index \u003d index;","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"AlagappanRa"},"content":" @Override","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"AlagappanRa"},"content":" public void execute(TaskList list, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"AlagappanRa"},"content":" list.deleteTask(index, storage);","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"AlagappanRa"},"content":" return;","lastModifiedDate":"2023-09-08"},{"lineNumber":19,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":20,"author":{"gitId":"AlagappanRa"},"content":"}","lastModifiedDate":"2023-09-08"}],"authorContributionMap":{"AlagappanRa":20}},{"path":"src/main/java/commands/EventCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AlagappanRa"},"content":"package commands;","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":3,"author":{"gitId":"AlagappanRa"},"content":"import components.DukeException;","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"AlagappanRa"},"content":"import components.Storage;","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"AlagappanRa"},"content":"import components.Ui;","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"AlagappanRa"},"content":"import tasks.Event;","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"AlagappanRa"},"content":"import tasks.TaskList;","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"AlagappanRa"},"content":"public class EventCommand extends Command {","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"AlagappanRa"},"content":" private String command;","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"AlagappanRa"},"content":" public EventCommand(String command) {","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"AlagappanRa"},"content":" this.command \u003d command;","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"AlagappanRa"},"content":" @Override","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"AlagappanRa"},"content":" public void execute(TaskList list, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"AlagappanRa"},"content":" list.addTask(new Event(command.substring(6)), storage);","lastModifiedDate":"2023-09-08"},{"lineNumber":19,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":20,"author":{"gitId":"AlagappanRa"},"content":"}","lastModifiedDate":"2023-09-08"}],"authorContributionMap":{"AlagappanRa":20}},{"path":"src/main/java/commands/ExitCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AlagappanRa"},"content":"package commands;","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"AlagappanRa"},"content":"import components.Storage;","lastModifiedDate":"2023-09-08"},{"lineNumber":3,"author":{"gitId":"AlagappanRa"},"content":"import components.Ui;","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"AlagappanRa"},"content":"import tasks.TaskList;","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"AlagappanRa"},"content":"public class ExitCommand extends Command {","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"AlagappanRa"},"content":" public ExitCommand() {","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"AlagappanRa"},"content":" super();","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"AlagappanRa"},"content":" @Override","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"AlagappanRa"},"content":" public void execute(TaskList list, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"AlagappanRa"},"content":" ui.showBye();","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"AlagappanRa"},"content":" @Override","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"AlagappanRa"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"AlagappanRa"},"content":" return true;","lastModifiedDate":"2023-09-08"},{"lineNumber":19,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":20,"author":{"gitId":"AlagappanRa"},"content":"}","lastModifiedDate":"2023-09-08"}],"authorContributionMap":{"AlagappanRa":20}},{"path":"src/main/java/commands/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AlagappanRa"},"content":"package commands;","lastModifiedDate":"2023-09-10"},{"lineNumber":2,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"AlagappanRa"},"content":"import components.Storage;","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"AlagappanRa"},"content":"import components.Ui;","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"AlagappanRa"},"content":"import tasks.TaskList;","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"AlagappanRa"},"content":"public class FindCommand extends Command {","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"AlagappanRa"},"content":" private String command;","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"AlagappanRa"},"content":" public FindCommand(String command) {","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"AlagappanRa"},"content":" this.command \u003d command;","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"AlagappanRa"},"content":" @Override","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"AlagappanRa"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"AlagappanRa"},"content":" System.out.println(Ui.LINE);","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"AlagappanRa"},"content":" System.out.println(\"Here are the matching tasks in your list:\");","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"AlagappanRa"},"content":" int count \u003d 1;","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"AlagappanRa"},"content":" for (int i \u003d 0; i \u003c taskList.size(); i++) {","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"AlagappanRa"},"content":" if (taskList.get(i).getDescription().contains(command)) {","lastModifiedDate":"2023-09-10"},{"lineNumber":21,"author":{"gitId":"AlagappanRa"},"content":" System.out.println(count + \".\" + taskList.get(i));","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"AlagappanRa"},"content":" count++;","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"AlagappanRa"},"content":" System.out.println(Ui.LINE);","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":27,"author":{"gitId":"AlagappanRa"},"content":"}","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"AlagappanRa":27}},{"path":"src/main/java/commands/MarkAsDoneCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AlagappanRa"},"content":"package commands;","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":3,"author":{"gitId":"AlagappanRa"},"content":"import components.DukeException;","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"AlagappanRa"},"content":"import components.Storage;","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"AlagappanRa"},"content":"import components.Ui;","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"AlagappanRa"},"content":"import tasks.TaskList;","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"AlagappanRa"},"content":"public class MarkAsDoneCommand extends Command {","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"AlagappanRa"},"content":" private Integer index;","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"AlagappanRa"},"content":" public MarkAsDoneCommand(Integer index) {","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"AlagappanRa"},"content":" super();","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"AlagappanRa"},"content":" this.index \u003d index;","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"AlagappanRa"},"content":" @Override","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"AlagappanRa"},"content":" public void execute(TaskList list, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"AlagappanRa"},"content":" try {","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"AlagappanRa"},"content":" list.markAsDone(index, storage);","lastModifiedDate":"2023-09-08"},{"lineNumber":19,"author":{"gitId":"AlagappanRa"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-08"},{"lineNumber":20,"author":{"gitId":"AlagappanRa"},"content":" System.out.println(Ui.LINE);","lastModifiedDate":"2023-09-08"},{"lineNumber":21,"author":{"gitId":"AlagappanRa"},"content":" System.out.println(e);","lastModifiedDate":"2023-09-08"},{"lineNumber":22,"author":{"gitId":"AlagappanRa"},"content":" System.out.println(Ui.LINE);","lastModifiedDate":"2023-09-08"},{"lineNumber":23,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":24,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":25,"author":{"gitId":"AlagappanRa"},"content":"}","lastModifiedDate":"2023-09-08"}],"authorContributionMap":{"AlagappanRa":25}},{"path":"src/main/java/commands/MarkAsUndoneCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AlagappanRa"},"content":"package commands;","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":3,"author":{"gitId":"AlagappanRa"},"content":"import components.DukeException;","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"AlagappanRa"},"content":"import components.Storage;","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"AlagappanRa"},"content":"import components.Ui;","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"AlagappanRa"},"content":"import tasks.TaskList;","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"AlagappanRa"},"content":"public class MarkAsUndoneCommand extends Command {","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"AlagappanRa"},"content":" private Integer index;","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"AlagappanRa"},"content":" public MarkAsUndoneCommand(Integer index) {","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"AlagappanRa"},"content":" super();","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"AlagappanRa"},"content":" this.index \u003d index;","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"AlagappanRa"},"content":" @Override","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"AlagappanRa"},"content":" public void execute(TaskList list, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"AlagappanRa"},"content":" try {","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"AlagappanRa"},"content":" list.markAsDone(index, storage);","lastModifiedDate":"2023-09-08"},{"lineNumber":19,"author":{"gitId":"AlagappanRa"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-08"},{"lineNumber":20,"author":{"gitId":"AlagappanRa"},"content":" System.out.println(Ui.LINE);","lastModifiedDate":"2023-09-08"},{"lineNumber":21,"author":{"gitId":"AlagappanRa"},"content":" System.out.println(e);","lastModifiedDate":"2023-09-08"},{"lineNumber":22,"author":{"gitId":"AlagappanRa"},"content":" System.out.println(Ui.LINE);","lastModifiedDate":"2023-09-08"},{"lineNumber":23,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":24,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":25,"author":{"gitId":"AlagappanRa"},"content":"}","lastModifiedDate":"2023-09-08"}],"authorContributionMap":{"AlagappanRa":25}},{"path":"src/main/java/commands/ShowCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AlagappanRa"},"content":"package commands;","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"AlagappanRa"},"content":"import components.Storage;","lastModifiedDate":"2023-09-08"},{"lineNumber":3,"author":{"gitId":"AlagappanRa"},"content":"import components.Ui;","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"AlagappanRa"},"content":"import tasks.TaskList;","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"AlagappanRa"},"content":"public class ShowCommand extends Command {","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"AlagappanRa"},"content":" public ShowCommand() {","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"AlagappanRa"},"content":" super();","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"AlagappanRa"},"content":" @Override","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"AlagappanRa"},"content":" public void execute(TaskList list, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"AlagappanRa"},"content":" list.printList();","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"AlagappanRa"},"content":"}","lastModifiedDate":"2023-09-08"}],"authorContributionMap":{"AlagappanRa":15}},{"path":"src/main/java/commands/ToDoCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AlagappanRa"},"content":"package commands;","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"AlagappanRa"},"content":"import components.DukeException;","lastModifiedDate":"2023-09-08"},{"lineNumber":3,"author":{"gitId":"AlagappanRa"},"content":"import components.Parser;","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"AlagappanRa"},"content":"import components.Storage;","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"AlagappanRa"},"content":"import components.Ui;","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"AlagappanRa"},"content":"import tasks.TaskList;","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"AlagappanRa"},"content":"public class ToDoCommand extends Command {","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"AlagappanRa"},"content":" private String command;","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"AlagappanRa"},"content":" public ToDoCommand(String command) {","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"AlagappanRa"},"content":" this.command \u003d command;","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"AlagappanRa"},"content":" @Override","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"AlagappanRa"},"content":" public void execute(TaskList list, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"AlagappanRa"},"content":" list.addTask(Parser.createToDoTask(command), storage);","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":19,"author":{"gitId":"AlagappanRa"},"content":"}","lastModifiedDate":"2023-09-08"}],"authorContributionMap":{"AlagappanRa":19}},{"path":"src/main/java/commands/UnknownCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AlagappanRa"},"content":"package commands;","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":3,"author":{"gitId":"AlagappanRa"},"content":"import components.Storage;","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"AlagappanRa"},"content":"import components.Ui;","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"AlagappanRa"},"content":"import tasks.TaskList;","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"AlagappanRa"},"content":"public class UnknownCommand extends Command {","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"AlagappanRa"},"content":" @Override","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"AlagappanRa"},"content":" public void execute(TaskList list, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"AlagappanRa"},"content":" System.out.println(Ui.LINE);","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"AlagappanRa"},"content":" System.out.println(\"I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"AlagappanRa"},"content":" System.out.println(Ui.LINE);","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"AlagappanRa"},"content":" ","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"AlagappanRa"},"content":"}","lastModifiedDate":"2023-09-08"}],"authorContributionMap":{"AlagappanRa":16}},{"path":"src/main/java/components/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AlagappanRa"},"content":"package components;","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":3,"author":{"gitId":"AlagappanRa"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"AlagappanRa"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"AlagappanRa"},"content":" * Constructor for DukeException.","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"AlagappanRa"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"AlagappanRa"},"content":" * @param message Error message.","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"AlagappanRa"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"AlagappanRa"},"content":" public DukeException(String message) {","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"AlagappanRa"},"content":" super(message);","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"AlagappanRa"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"AlagappanRa"},"content":" * Return error message.","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"AlagappanRa"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"AlagappanRa"},"content":" * @return Error message.","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"AlagappanRa"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":19,"author":{"gitId":"AlagappanRa"},"content":" @Override","lastModifiedDate":"2023-09-08"},{"lineNumber":20,"author":{"gitId":"AlagappanRa"},"content":" public String toString() {","lastModifiedDate":"2023-09-08"},{"lineNumber":21,"author":{"gitId":"AlagappanRa"},"content":" return String.format(\"😭 OOPS!!! %s\", super.getMessage());","lastModifiedDate":"2023-09-08"},{"lineNumber":22,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":23,"author":{"gitId":"AlagappanRa"},"content":"}","lastModifiedDate":"2023-09-08"}],"authorContributionMap":{"AlagappanRa":23}},{"path":"src/main/java/components/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AlagappanRa"},"content":"package components;","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"AlagappanRa"},"content":"import commands.Command;","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"AlagappanRa"},"content":"import commands.DeadlineCommand;","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"AlagappanRa"},"content":"import commands.DeleteCommand;","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"AlagappanRa"},"content":"import commands.EventCommand;","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"AlagappanRa"},"content":"import commands.ExitCommand;","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"AlagappanRa"},"content":"import commands.FindCommand;","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"AlagappanRa"},"content":"import commands.MarkAsDoneCommand;","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"AlagappanRa"},"content":"import commands.MarkAsUndoneCommand;","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"AlagappanRa"},"content":"import commands.ShowCommand;","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"AlagappanRa"},"content":"import commands.ToDoCommand;","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"AlagappanRa"},"content":"import commands.UnknownCommand;","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"AlagappanRa"},"content":"import tasks.ToDo;","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"AlagappanRa"},"content":"public class Parser {","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"AlagappanRa"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"AlagappanRa"},"content":" * Create a ToDo task.","lastModifiedDate":"2023-09-08"},{"lineNumber":19,"author":{"gitId":"AlagappanRa"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":20,"author":{"gitId":"AlagappanRa"},"content":" * @param command Command to be parsed.","lastModifiedDate":"2023-09-08"},{"lineNumber":21,"author":{"gitId":"AlagappanRa"},"content":" * @return ToDo task.","lastModifiedDate":"2023-09-08"},{"lineNumber":22,"author":{"gitId":"AlagappanRa"},"content":" * @throws DukeException If command is invalid.","lastModifiedDate":"2023-09-08"},{"lineNumber":23,"author":{"gitId":"AlagappanRa"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":24,"author":{"gitId":"AlagappanRa"},"content":" public static ToDo createToDoTask(String command) throws DukeException {","lastModifiedDate":"2023-09-08"},{"lineNumber":25,"author":{"gitId":"AlagappanRa"},"content":" try {","lastModifiedDate":"2023-09-08"},{"lineNumber":26,"author":{"gitId":"AlagappanRa"},"content":" command.substring(5);","lastModifiedDate":"2023-09-08"},{"lineNumber":27,"author":{"gitId":"AlagappanRa"},"content":" } catch (StringIndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-08"},{"lineNumber":28,"author":{"gitId":"AlagappanRa"},"content":" throw new DukeException(\"todo command must be followed by a space and a string. ERR: STRING INDEX OUT OF BOUNDS.\");","lastModifiedDate":"2023-09-08"},{"lineNumber":29,"author":{"gitId":"AlagappanRa"},"content":" } ","lastModifiedDate":"2023-09-08"},{"lineNumber":30,"author":{"gitId":"AlagappanRa"},"content":" ","lastModifiedDate":"2023-09-08"},{"lineNumber":31,"author":{"gitId":"AlagappanRa"},"content":" String description \u003d command.substring(5);","lastModifiedDate":"2023-09-08"},{"lineNumber":32,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":33,"author":{"gitId":"AlagappanRa"},"content":" if (description.isEmpty()) {","lastModifiedDate":"2023-09-08"},{"lineNumber":34,"author":{"gitId":"AlagappanRa"},"content":" throw new DukeException(\"todo command must be followed by a space and a string. ERR: NO STRING.\");","lastModifiedDate":"2023-09-08"},{"lineNumber":35,"author":{"gitId":"AlagappanRa"},"content":" } ","lastModifiedDate":"2023-09-08"},{"lineNumber":36,"author":{"gitId":"AlagappanRa"},"content":" return new ToDo(description);","lastModifiedDate":"2023-09-08"},{"lineNumber":37,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":38,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":39,"author":{"gitId":"AlagappanRa"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":40,"author":{"gitId":"AlagappanRa"},"content":" * Create a Deadline task.","lastModifiedDate":"2023-09-08"},{"lineNumber":41,"author":{"gitId":"AlagappanRa"},"content":" *","lastModifiedDate":"2023-09-08"},{"lineNumber":42,"author":{"gitId":"AlagappanRa"},"content":" * @param fullCommand Command to be parsed.","lastModifiedDate":"2023-09-08"},{"lineNumber":43,"author":{"gitId":"AlagappanRa"},"content":" * @return Deadline task.","lastModifiedDate":"2023-09-08"},{"lineNumber":44,"author":{"gitId":"AlagappanRa"},"content":" * @throws DukeException If command is invalid.","lastModifiedDate":"2023-09-08"},{"lineNumber":45,"author":{"gitId":"AlagappanRa"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":46,"author":{"gitId":"AlagappanRa"},"content":" public static Command parse(String fullCommand) throws DukeException {","lastModifiedDate":"2023-09-08"},{"lineNumber":47,"author":{"gitId":"AlagappanRa"},"content":" String[] command \u003d fullCommand.split(\" \");","lastModifiedDate":"2023-09-08"},{"lineNumber":48,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":49,"author":{"gitId":"AlagappanRa"},"content":" switch (command[0]) {","lastModifiedDate":"2023-09-08"},{"lineNumber":50,"author":{"gitId":"AlagappanRa"},"content":" case \"bye\":","lastModifiedDate":"2023-09-08"},{"lineNumber":51,"author":{"gitId":"AlagappanRa"},"content":" return new ExitCommand();","lastModifiedDate":"2023-09-08"},{"lineNumber":52,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":53,"author":{"gitId":"AlagappanRa"},"content":" case \"list\":","lastModifiedDate":"2023-09-08"},{"lineNumber":54,"author":{"gitId":"AlagappanRa"},"content":" return new ShowCommand();","lastModifiedDate":"2023-09-08"},{"lineNumber":55,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":56,"author":{"gitId":"AlagappanRa"},"content":" case \"mark\":","lastModifiedDate":"2023-09-08"},{"lineNumber":57,"author":{"gitId":"AlagappanRa"},"content":" try {","lastModifiedDate":"2023-09-08"},{"lineNumber":58,"author":{"gitId":"AlagappanRa"},"content":" Integer.valueOf(fullCommand.substring(5));","lastModifiedDate":"2023-09-08"},{"lineNumber":59,"author":{"gitId":"AlagappanRa"},"content":" } catch (StringIndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-08"},{"lineNumber":60,"author":{"gitId":"AlagappanRa"},"content":" throw new DukeException(\"Mark command must be followed by a space and an integer. ERR: STRING INDEX OUT OF BOUNDS.\");","lastModifiedDate":"2023-09-08"},{"lineNumber":61,"author":{"gitId":"AlagappanRa"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-08"},{"lineNumber":62,"author":{"gitId":"AlagappanRa"},"content":" throw new DukeException(\"Mark command must be followed by a space and an integer. ERR: NOT AN INTEGER.\");","lastModifiedDate":"2023-09-08"},{"lineNumber":63,"author":{"gitId":"AlagappanRa"},"content":" } ","lastModifiedDate":"2023-09-08"},{"lineNumber":64,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":65,"author":{"gitId":"AlagappanRa"},"content":" return new MarkAsDoneCommand(Integer.valueOf(fullCommand.substring(5)));","lastModifiedDate":"2023-09-08"},{"lineNumber":66,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":67,"author":{"gitId":"AlagappanRa"},"content":" case \"unmark\":","lastModifiedDate":"2023-09-08"},{"lineNumber":68,"author":{"gitId":"AlagappanRa"},"content":" return new MarkAsUndoneCommand(Integer.valueOf(fullCommand.substring(7)));","lastModifiedDate":"2023-09-08"},{"lineNumber":69,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":70,"author":{"gitId":"AlagappanRa"},"content":" case \"todo\":","lastModifiedDate":"2023-09-08"},{"lineNumber":71,"author":{"gitId":"AlagappanRa"},"content":" return new ToDoCommand(fullCommand);","lastModifiedDate":"2023-09-08"},{"lineNumber":72,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":73,"author":{"gitId":"AlagappanRa"},"content":" case \"deadline\":","lastModifiedDate":"2023-09-08"},{"lineNumber":74,"author":{"gitId":"AlagappanRa"},"content":" return new DeadlineCommand(fullCommand);","lastModifiedDate":"2023-09-08"},{"lineNumber":75,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":76,"author":{"gitId":"AlagappanRa"},"content":" case \"event\":","lastModifiedDate":"2023-09-08"},{"lineNumber":77,"author":{"gitId":"AlagappanRa"},"content":" return new EventCommand(fullCommand);","lastModifiedDate":"2023-09-08"},{"lineNumber":78,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":79,"author":{"gitId":"AlagappanRa"},"content":" case \"delete\":","lastModifiedDate":"2023-09-08"},{"lineNumber":80,"author":{"gitId":"AlagappanRa"},"content":" return new DeleteCommand(Integer.parseInt(fullCommand.substring(7)));","lastModifiedDate":"2023-09-08"},{"lineNumber":81,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":82,"author":{"gitId":"AlagappanRa"},"content":" case \"find\":","lastModifiedDate":"2023-09-10"},{"lineNumber":83,"author":{"gitId":"AlagappanRa"},"content":" return new FindCommand(fullCommand.substring(5));","lastModifiedDate":"2023-09-10"},{"lineNumber":84,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":85,"author":{"gitId":"AlagappanRa"},"content":" default:","lastModifiedDate":"2023-09-08"},{"lineNumber":86,"author":{"gitId":"AlagappanRa"},"content":" return new UnknownCommand();","lastModifiedDate":"2023-09-08"},{"lineNumber":87,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":88,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":89,"author":{"gitId":"AlagappanRa"},"content":"}","lastModifiedDate":"2023-09-08"}],"authorContributionMap":{"AlagappanRa":89}},{"path":"src/main/java/components/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AlagappanRa"},"content":"package components;","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"AlagappanRa"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"AlagappanRa"},"content":"import java.io.BufferedReader;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"AlagappanRa"},"content":"import java.io.BufferedWriter;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"AlagappanRa"},"content":"import java.io.File;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"AlagappanRa"},"content":"import java.io.FileReader;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"AlagappanRa"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"AlagappanRa"},"content":"import java.util.List;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"AlagappanRa"},"content":"import tasks.Deadline;","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"AlagappanRa"},"content":"import tasks.Event;","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"AlagappanRa"},"content":"import tasks.TaskList;","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"AlagappanRa"},"content":"import tasks.ToDo;","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"AlagappanRa"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"AlagappanRa"},"content":"public class Storage {","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"AlagappanRa"},"content":" private final String PARENT_DIR;","lastModifiedDate":"2023-09-08"},{"lineNumber":20,"author":{"gitId":"AlagappanRa"},"content":" private final String FILEPATH;","lastModifiedDate":"2023-09-08"},{"lineNumber":21,"author":{"gitId":"AlagappanRa"},"content":" File store;","lastModifiedDate":"2023-09-08"},{"lineNumber":22,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"AlagappanRa"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":24,"author":{"gitId":"AlagappanRa"},"content":" * Constructor for Storage class","lastModifiedDate":"2023-09-08"},{"lineNumber":25,"author":{"gitId":"AlagappanRa"},"content":" * @param PARENT_DIR The parent directory of the file to be created","lastModifiedDate":"2023-09-08"},{"lineNumber":26,"author":{"gitId":"AlagappanRa"},"content":" * @param FILEPATH The path of the file to be created","lastModifiedDate":"2023-09-08"},{"lineNumber":27,"author":{"gitId":"AlagappanRa"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":28,"author":{"gitId":"AlagappanRa"},"content":" public Storage(String PARENT_DIR, String FILEPATH) {","lastModifiedDate":"2023-09-08"},{"lineNumber":29,"author":{"gitId":"AlagappanRa"},"content":" this.PARENT_DIR \u003d PARENT_DIR;","lastModifiedDate":"2023-09-08"},{"lineNumber":30,"author":{"gitId":"AlagappanRa"},"content":" this.FILEPATH \u003d FILEPATH;","lastModifiedDate":"2023-09-08"},{"lineNumber":31,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"AlagappanRa"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":34,"author":{"gitId":"AlagappanRa"},"content":" * Creates a file if it does not exist","lastModifiedDate":"2023-09-08"},{"lineNumber":35,"author":{"gitId":"AlagappanRa"},"content":" * @throws DukeException","lastModifiedDate":"2023-09-08"},{"lineNumber":36,"author":{"gitId":"AlagappanRa"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":37,"author":{"gitId":"AlagappanRa"},"content":" public void loadOrCreateFile() throws DukeException {","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"AlagappanRa"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"AlagappanRa"},"content":" // Create a File object for the parent directory","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"AlagappanRa"},"content":" File parentDir \u003d new File(this.PARENT_DIR);","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"AlagappanRa"},"content":" //System.out.println(\"Parent dir \" + parentDir.getAbsolutePath());","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"AlagappanRa"},"content":" // Create the directory if it doesn\u0027t exist","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"AlagappanRa"},"content":" if (!parentDir.exists()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"AlagappanRa"},"content":" boolean dirCreated \u003d parentDir.mkdirs();","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"AlagappanRa"},"content":" if (!dirCreated) {","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"AlagappanRa"},"content":" throw new DukeException(\"Failed to create directory at \" + parentDir.getAbsolutePath());","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"AlagappanRa"},"content":" // Create a File object for the file to be created","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"AlagappanRa"},"content":" File file \u003d new File(this.FILEPATH);","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"AlagappanRa"},"content":" // Create the file if it doesn\u0027t exist","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"AlagappanRa"},"content":" if (!file.exists()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"AlagappanRa"},"content":" boolean fileCreated \u003d file.createNewFile();","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"AlagappanRa"},"content":" if (!fileCreated) {","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"AlagappanRa"},"content":" throw new DukeException(\"Failed to create store file at \" + file.getAbsolutePath());","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"AlagappanRa"},"content":" ","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"AlagappanRa"},"content":" //it is guaranteed that the file exists","lastModifiedDate":"2023-09-08"},{"lineNumber":63,"author":{"gitId":"AlagappanRa"},"content":" store \u003d file;","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"AlagappanRa"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"AlagappanRa"},"content":" throw new DukeException(FILEPATH + \" cannot be created.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"AlagappanRa"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":70,"author":{"gitId":"AlagappanRa"},"content":" * Reads data from the file and returns a TaskList object","lastModifiedDate":"2023-09-08"},{"lineNumber":71,"author":{"gitId":"AlagappanRa"},"content":" * @param storage","lastModifiedDate":"2023-09-08"},{"lineNumber":72,"author":{"gitId":"AlagappanRa"},"content":" * @return","lastModifiedDate":"2023-09-08"},{"lineNumber":73,"author":{"gitId":"AlagappanRa"},"content":" * @throws DukeException","lastModifiedDate":"2023-09-08"},{"lineNumber":74,"author":{"gitId":"AlagappanRa"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":75,"author":{"gitId":"AlagappanRa"},"content":" public TaskList readData(Storage storage) throws DukeException {","lastModifiedDate":"2023-09-08"},{"lineNumber":76,"author":{"gitId":"AlagappanRa"},"content":" BufferedReader br;","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"AlagappanRa"},"content":" TaskList result \u003d new TaskList();","lastModifiedDate":"2023-09-08"},{"lineNumber":78,"author":{"gitId":"AlagappanRa"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"AlagappanRa"},"content":" br \u003d new BufferedReader(new FileReader(this.store));","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"AlagappanRa"},"content":" String line;","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"AlagappanRa"},"content":" while ((line \u003d br.readLine()) !\u003d null) {","lastModifiedDate":"2023-09-01"},{"lineNumber":82,"author":{"gitId":"AlagappanRa"},"content":" //[T][X] read book ","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"AlagappanRa"},"content":" if (line.startsWith(\"[T]\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"AlagappanRa"},"content":" result.addTask(new ToDo(","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"AlagappanRa"},"content":" line.substring(7)),","lastModifiedDate":"2023-09-08"},{"lineNumber":86,"author":{"gitId":"AlagappanRa"},"content":" storage,","lastModifiedDate":"2023-09-08"},{"lineNumber":87,"author":{"gitId":"AlagappanRa"},"content":" true","lastModifiedDate":"2023-09-01"},{"lineNumber":88,"author":{"gitId":"AlagappanRa"},"content":" );","lastModifiedDate":"2023-09-01"},{"lineNumber":89,"author":{"gitId":"AlagappanRa"},"content":" if (line.charAt(4) \u003d\u003d \u0027X\u0027) {","lastModifiedDate":"2023-09-08"},{"lineNumber":90,"author":{"gitId":"AlagappanRa"},"content":" result.get(result.size() - 1).markAsDone();","lastModifiedDate":"2023-09-01"},{"lineNumber":91,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":92,"author":{"gitId":"AlagappanRa"},"content":" //[D][ ] return book (by: Sunday)","lastModifiedDate":"2023-09-01"},{"lineNumber":93,"author":{"gitId":"AlagappanRa"},"content":" } else if (line.startsWith(\"[D]\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":94,"author":{"gitId":"AlagappanRa"},"content":" int byIndex \u003d line.indexOf(\"(by: \");","lastModifiedDate":"2023-09-01"},{"lineNumber":95,"author":{"gitId":"AlagappanRa"},"content":" result.addTask(new Deadline(","lastModifiedDate":"2023-09-01"},{"lineNumber":96,"author":{"gitId":"AlagappanRa"},"content":" line.substring(7, byIndex - 1), ","lastModifiedDate":"2023-09-01"},{"lineNumber":97,"author":{"gitId":"AlagappanRa"},"content":" line.substring(byIndex + 5, line.length() - 1)),","lastModifiedDate":"2023-09-01"},{"lineNumber":98,"author":{"gitId":"AlagappanRa"},"content":" storage,","lastModifiedDate":"2023-09-08"},{"lineNumber":99,"author":{"gitId":"AlagappanRa"},"content":" true","lastModifiedDate":"2023-09-01"},{"lineNumber":100,"author":{"gitId":"AlagappanRa"},"content":" );","lastModifiedDate":"2023-09-01"},{"lineNumber":101,"author":{"gitId":"AlagappanRa"},"content":" if (line.charAt(4) \u003d\u003d \u0027X\u0027) {","lastModifiedDate":"2023-09-08"},{"lineNumber":102,"author":{"gitId":"AlagappanRa"},"content":" result.get(result.size() - 1).markAsDone();","lastModifiedDate":"2023-09-01"},{"lineNumber":103,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":104,"author":{"gitId":"AlagappanRa"},"content":" //[E][ ] project meeting (from: Mon 2pm to: Fri 4pm)","lastModifiedDate":"2023-09-01"},{"lineNumber":105,"author":{"gitId":"AlagappanRa"},"content":" } else if (line.startsWith(\"[E]\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":106,"author":{"gitId":"AlagappanRa"},"content":" int fromIndex \u003d line.indexOf(\" (from: \");","lastModifiedDate":"2023-09-01"},{"lineNumber":107,"author":{"gitId":"AlagappanRa"},"content":" int toIndex \u003d line.indexOf(\" to: \");","lastModifiedDate":"2023-09-01"},{"lineNumber":108,"author":{"gitId":"AlagappanRa"},"content":" result.addTask(new Event(","lastModifiedDate":"2023-09-01"},{"lineNumber":109,"author":{"gitId":"AlagappanRa"},"content":" line.substring(7, fromIndex), ","lastModifiedDate":"2023-09-01"},{"lineNumber":110,"author":{"gitId":"AlagappanRa"},"content":" line.substring(fromIndex + 8, toIndex),","lastModifiedDate":"2023-09-01"},{"lineNumber":111,"author":{"gitId":"AlagappanRa"},"content":" line.substring(toIndex + 5, line.length() - 1)),","lastModifiedDate":"2023-09-01"},{"lineNumber":112,"author":{"gitId":"AlagappanRa"},"content":" storage,","lastModifiedDate":"2023-09-08"},{"lineNumber":113,"author":{"gitId":"AlagappanRa"},"content":" true","lastModifiedDate":"2023-09-01"},{"lineNumber":114,"author":{"gitId":"AlagappanRa"},"content":" );","lastModifiedDate":"2023-09-01"},{"lineNumber":115,"author":{"gitId":"AlagappanRa"},"content":" if (line.charAt(4) \u003d\u003d \u0027X\u0027) {","lastModifiedDate":"2023-09-08"},{"lineNumber":116,"author":{"gitId":"AlagappanRa"},"content":" result.get(result.size() - 1).markAsDone();","lastModifiedDate":"2023-09-01"},{"lineNumber":117,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":118,"author":{"gitId":"AlagappanRa"},"content":" } ","lastModifiedDate":"2023-09-01"},{"lineNumber":119,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":120,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":121,"author":{"gitId":"AlagappanRa"},"content":" br.close();","lastModifiedDate":"2023-09-01"},{"lineNumber":122,"author":{"gitId":"AlagappanRa"},"content":" return result;","lastModifiedDate":"2023-09-01"},{"lineNumber":123,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":124,"author":{"gitId":"AlagappanRa"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":125,"author":{"gitId":"AlagappanRa"},"content":" throw new DukeException(\"Something went wrong: \" + e.getMessage());","lastModifiedDate":"2023-09-01"},{"lineNumber":126,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":127,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":128,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":129,"author":{"gitId":"AlagappanRa"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":130,"author":{"gitId":"AlagappanRa"},"content":" * Writes data to the file","lastModifiedDate":"2023-09-08"},{"lineNumber":131,"author":{"gitId":"AlagappanRa"},"content":" * @param newData","lastModifiedDate":"2023-09-08"},{"lineNumber":132,"author":{"gitId":"AlagappanRa"},"content":" * @throws DukeException","lastModifiedDate":"2023-09-08"},{"lineNumber":133,"author":{"gitId":"AlagappanRa"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":134,"author":{"gitId":"AlagappanRa"},"content":" public void writeData(String newData) throws DukeException {","lastModifiedDate":"2023-09-01"},{"lineNumber":135,"author":{"gitId":"AlagappanRa"},"content":" BufferedWriter bw;","lastModifiedDate":"2023-09-01"},{"lineNumber":136,"author":{"gitId":"AlagappanRa"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":137,"author":{"gitId":"AlagappanRa"},"content":" bw \u003d new BufferedWriter(new FileWriter(this.store, true)); ","lastModifiedDate":"2023-09-01"},{"lineNumber":138,"author":{"gitId":"AlagappanRa"},"content":" bw.newLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":139,"author":{"gitId":"AlagappanRa"},"content":" bw.write(newData);","lastModifiedDate":"2023-09-01"},{"lineNumber":140,"author":{"gitId":"AlagappanRa"},"content":" bw.close();","lastModifiedDate":"2023-09-01"},{"lineNumber":141,"author":{"gitId":"AlagappanRa"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":142,"author":{"gitId":"AlagappanRa"},"content":" throw new DukeException(\"Something went wrong: \" + e.getMessage());","lastModifiedDate":"2023-09-01"},{"lineNumber":143,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":144,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":145,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":146,"author":{"gitId":"AlagappanRa"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":147,"author":{"gitId":"AlagappanRa"},"content":" * Deletes a line from the file","lastModifiedDate":"2023-09-08"},{"lineNumber":148,"author":{"gitId":"AlagappanRa"},"content":" * @param lineNumber","lastModifiedDate":"2023-09-08"},{"lineNumber":149,"author":{"gitId":"AlagappanRa"},"content":" * @throws DukeException","lastModifiedDate":"2023-09-08"},{"lineNumber":150,"author":{"gitId":"AlagappanRa"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":151,"author":{"gitId":"AlagappanRa"},"content":" public void deleteLine(int lineNumber) throws DukeException {","lastModifiedDate":"2023-09-01"},{"lineNumber":152,"author":{"gitId":"AlagappanRa"},"content":" List\u003cString\u003e lines \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-01"},{"lineNumber":153,"author":{"gitId":"AlagappanRa"},"content":" BufferedReader br \u003d null;","lastModifiedDate":"2023-09-01"},{"lineNumber":154,"author":{"gitId":"AlagappanRa"},"content":" BufferedWriter bw \u003d null;","lastModifiedDate":"2023-09-01"},{"lineNumber":155,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":156,"author":{"gitId":"AlagappanRa"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":157,"author":{"gitId":"AlagappanRa"},"content":" // Read file into list","lastModifiedDate":"2023-09-01"},{"lineNumber":158,"author":{"gitId":"AlagappanRa"},"content":" br \u003d new BufferedReader(new FileReader(this.store));","lastModifiedDate":"2023-09-01"},{"lineNumber":159,"author":{"gitId":"AlagappanRa"},"content":" String line;","lastModifiedDate":"2023-09-01"},{"lineNumber":160,"author":{"gitId":"AlagappanRa"},"content":" while ((line \u003d br.readLine()) !\u003d null) {","lastModifiedDate":"2023-09-01"},{"lineNumber":161,"author":{"gitId":"AlagappanRa"},"content":" lines.add(line);","lastModifiedDate":"2023-09-01"},{"lineNumber":162,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":163,"author":{"gitId":"AlagappanRa"},"content":" br.close();","lastModifiedDate":"2023-09-01"},{"lineNumber":164,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":165,"author":{"gitId":"AlagappanRa"},"content":" // Remove the line","lastModifiedDate":"2023-09-01"},{"lineNumber":166,"author":{"gitId":"AlagappanRa"},"content":" if (lineNumber \u003c 1 || lineNumber \u003e lines.size()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":167,"author":{"gitId":"AlagappanRa"},"content":" throw new DukeException(\"Invalid line number\");","lastModifiedDate":"2023-09-01"},{"lineNumber":168,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":169,"author":{"gitId":"AlagappanRa"},"content":" lines.remove(lineNumber);","lastModifiedDate":"2023-09-01"},{"lineNumber":170,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":171,"author":{"gitId":"AlagappanRa"},"content":" // Write list back to file","lastModifiedDate":"2023-09-01"},{"lineNumber":172,"author":{"gitId":"AlagappanRa"},"content":" bw \u003d new BufferedWriter(new FileWriter(store));","lastModifiedDate":"2023-09-01"},{"lineNumber":173,"author":{"gitId":"AlagappanRa"},"content":" for (int i \u003d 0; i \u003c lines.size(); i++) {","lastModifiedDate":"2023-09-01"},{"lineNumber":174,"author":{"gitId":"AlagappanRa"},"content":" bw.write(lines.get(i));","lastModifiedDate":"2023-09-01"},{"lineNumber":175,"author":{"gitId":"AlagappanRa"},"content":" if (i \u003c lines.size() - 1) {","lastModifiedDate":"2023-09-01"},{"lineNumber":176,"author":{"gitId":"AlagappanRa"},"content":" bw.newLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":177,"author":{"gitId":"AlagappanRa"},"content":" } ","lastModifiedDate":"2023-09-01"},{"lineNumber":178,"author":{"gitId":"AlagappanRa"},"content":" } ","lastModifiedDate":"2023-09-01"},{"lineNumber":179,"author":{"gitId":"AlagappanRa"},"content":" bw.close();","lastModifiedDate":"2023-09-01"},{"lineNumber":180,"author":{"gitId":"AlagappanRa"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":181,"author":{"gitId":"AlagappanRa"},"content":" throw new DukeException(\"Something went wrong: \" + e.getMessage());","lastModifiedDate":"2023-09-01"},{"lineNumber":182,"author":{"gitId":"AlagappanRa"},"content":" } finally {","lastModifiedDate":"2023-09-01"},{"lineNumber":183,"author":{"gitId":"AlagappanRa"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":184,"author":{"gitId":"AlagappanRa"},"content":" if (br !\u003d null) {","lastModifiedDate":"2023-09-01"},{"lineNumber":185,"author":{"gitId":"AlagappanRa"},"content":" br.close();","lastModifiedDate":"2023-09-01"},{"lineNumber":186,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":187,"author":{"gitId":"AlagappanRa"},"content":" if (bw !\u003d null) {","lastModifiedDate":"2023-09-01"},{"lineNumber":188,"author":{"gitId":"AlagappanRa"},"content":" bw.close();","lastModifiedDate":"2023-09-01"},{"lineNumber":189,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":190,"author":{"gitId":"AlagappanRa"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":191,"author":{"gitId":"AlagappanRa"},"content":" throw new DukeException(\"Something went wrong while closing the file: \" + e.getMessage());","lastModifiedDate":"2023-09-01"},{"lineNumber":192,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":193,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":194,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":195,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":196,"author":{"gitId":"AlagappanRa"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":197,"author":{"gitId":"AlagappanRa"},"content":" * Replaces a line in the file","lastModifiedDate":"2023-09-08"},{"lineNumber":198,"author":{"gitId":"AlagappanRa"},"content":" * @param lineNumber","lastModifiedDate":"2023-09-08"},{"lineNumber":199,"author":{"gitId":"AlagappanRa"},"content":" * @param newData","lastModifiedDate":"2023-09-08"},{"lineNumber":200,"author":{"gitId":"AlagappanRa"},"content":" * @throws DukeException","lastModifiedDate":"2023-09-08"},{"lineNumber":201,"author":{"gitId":"AlagappanRa"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":202,"author":{"gitId":"AlagappanRa"},"content":" public void replaceLine(int lineNumber, String newData) throws DukeException {","lastModifiedDate":"2023-09-01"},{"lineNumber":203,"author":{"gitId":"AlagappanRa"},"content":" List\u003cString\u003e lines \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-01"},{"lineNumber":204,"author":{"gitId":"AlagappanRa"},"content":" BufferedReader br \u003d null;","lastModifiedDate":"2023-09-01"},{"lineNumber":205,"author":{"gitId":"AlagappanRa"},"content":" BufferedWriter bw \u003d null;","lastModifiedDate":"2023-09-01"},{"lineNumber":206,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":207,"author":{"gitId":"AlagappanRa"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":208,"author":{"gitId":"AlagappanRa"},"content":" // Read file into list","lastModifiedDate":"2023-09-01"},{"lineNumber":209,"author":{"gitId":"AlagappanRa"},"content":" br \u003d new BufferedReader(new FileReader(this.store));","lastModifiedDate":"2023-09-01"},{"lineNumber":210,"author":{"gitId":"AlagappanRa"},"content":" String line;","lastModifiedDate":"2023-09-01"},{"lineNumber":211,"author":{"gitId":"AlagappanRa"},"content":" while ((line \u003d br.readLine()) !\u003d null) {","lastModifiedDate":"2023-09-01"},{"lineNumber":212,"author":{"gitId":"AlagappanRa"},"content":" lines.add(line);","lastModifiedDate":"2023-09-01"},{"lineNumber":213,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":214,"author":{"gitId":"AlagappanRa"},"content":" br.close();","lastModifiedDate":"2023-09-01"},{"lineNumber":215,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":216,"author":{"gitId":"AlagappanRa"},"content":" // Replace the line","lastModifiedDate":"2023-09-01"},{"lineNumber":217,"author":{"gitId":"AlagappanRa"},"content":" if (lineNumber \u003c 1 || lineNumber \u003e lines.size()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":218,"author":{"gitId":"AlagappanRa"},"content":" throw new DukeException(\"Invalid line number\");","lastModifiedDate":"2023-09-01"},{"lineNumber":219,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":220,"author":{"gitId":"AlagappanRa"},"content":" lines.set(lineNumber, newData);","lastModifiedDate":"2023-09-01"},{"lineNumber":221,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":222,"author":{"gitId":"AlagappanRa"},"content":" // Write list back to file","lastModifiedDate":"2023-09-01"},{"lineNumber":223,"author":{"gitId":"AlagappanRa"},"content":" bw \u003d new BufferedWriter(new FileWriter(store));","lastModifiedDate":"2023-09-01"},{"lineNumber":224,"author":{"gitId":"AlagappanRa"},"content":" for (int i \u003d 0; i \u003c lines.size(); i++) {","lastModifiedDate":"2023-09-01"},{"lineNumber":225,"author":{"gitId":"AlagappanRa"},"content":" bw.write(lines.get(i));","lastModifiedDate":"2023-09-01"},{"lineNumber":226,"author":{"gitId":"AlagappanRa"},"content":" if (i \u003c lines.size() - 1) {","lastModifiedDate":"2023-09-01"},{"lineNumber":227,"author":{"gitId":"AlagappanRa"},"content":" bw.newLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":228,"author":{"gitId":"AlagappanRa"},"content":" } ","lastModifiedDate":"2023-09-01"},{"lineNumber":229,"author":{"gitId":"AlagappanRa"},"content":" } ","lastModifiedDate":"2023-09-01"},{"lineNumber":230,"author":{"gitId":"AlagappanRa"},"content":" bw.close();","lastModifiedDate":"2023-09-01"},{"lineNumber":231,"author":{"gitId":"AlagappanRa"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":232,"author":{"gitId":"AlagappanRa"},"content":" throw new DukeException(\"Something went wrong: \" + e.getMessage());","lastModifiedDate":"2023-09-01"},{"lineNumber":233,"author":{"gitId":"AlagappanRa"},"content":" } finally {","lastModifiedDate":"2023-09-01"},{"lineNumber":234,"author":{"gitId":"AlagappanRa"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":235,"author":{"gitId":"AlagappanRa"},"content":" if (br !\u003d null) {","lastModifiedDate":"2023-09-01"},{"lineNumber":236,"author":{"gitId":"AlagappanRa"},"content":" br.close();","lastModifiedDate":"2023-09-01"},{"lineNumber":237,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":238,"author":{"gitId":"AlagappanRa"},"content":" if (bw !\u003d null) {","lastModifiedDate":"2023-09-01"},{"lineNumber":239,"author":{"gitId":"AlagappanRa"},"content":" bw.close();","lastModifiedDate":"2023-09-01"},{"lineNumber":240,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":241,"author":{"gitId":"AlagappanRa"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":242,"author":{"gitId":"AlagappanRa"},"content":" throw new DukeException(\"Something went wrong while closing the file: \" + e.getMessage());","lastModifiedDate":"2023-09-01"},{"lineNumber":243,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":244,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":245,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":246,"author":{"gitId":"AlagappanRa"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"AlagappanRa":246}},{"path":"src/main/java/components/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AlagappanRa"},"content":"package components;","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":3,"author":{"gitId":"AlagappanRa"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"AlagappanRa"},"content":"public class Ui {","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"AlagappanRa"},"content":" private Scanner scanner;","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"AlagappanRa"},"content":" public static final String LINE \u003d \"__________________________________________________________________\";","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"AlagappanRa"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"AlagappanRa"},"content":" * Constructor for Ui class.","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"AlagappanRa"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"AlagappanRa"},"content":" public Ui () {","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"AlagappanRa"},"content":" scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"AlagappanRa"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"AlagappanRa"},"content":" * Prints the error message.","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"AlagappanRa"},"content":" * @param e","lastModifiedDate":"2023-09-08"},{"lineNumber":19,"author":{"gitId":"AlagappanRa"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":20,"author":{"gitId":"AlagappanRa"},"content":" public void showError(DukeException e) {","lastModifiedDate":"2023-09-08"},{"lineNumber":21,"author":{"gitId":"AlagappanRa"},"content":" System.out.println(Ui.LINE);","lastModifiedDate":"2023-09-08"},{"lineNumber":22,"author":{"gitId":"AlagappanRa"},"content":" System.out.println(e);","lastModifiedDate":"2023-09-08"},{"lineNumber":23,"author":{"gitId":"AlagappanRa"},"content":" System.out.println(Ui.LINE);","lastModifiedDate":"2023-09-08"},{"lineNumber":24,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":25,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":26,"author":{"gitId":"AlagappanRa"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":27,"author":{"gitId":"AlagappanRa"},"content":" * Prints the message.","lastModifiedDate":"2023-09-08"},{"lineNumber":28,"author":{"gitId":"AlagappanRa"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":29,"author":{"gitId":"AlagappanRa"},"content":" public void showLine() {","lastModifiedDate":"2023-09-08"},{"lineNumber":30,"author":{"gitId":"AlagappanRa"},"content":" System.out.println(Ui.LINE);","lastModifiedDate":"2023-09-08"},{"lineNumber":31,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":32,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":33,"author":{"gitId":"AlagappanRa"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":34,"author":{"gitId":"AlagappanRa"},"content":" * Reads the command using Scanner class.","lastModifiedDate":"2023-09-08"},{"lineNumber":35,"author":{"gitId":"AlagappanRa"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":36,"author":{"gitId":"AlagappanRa"},"content":" public String readCommand() {","lastModifiedDate":"2023-09-08"},{"lineNumber":37,"author":{"gitId":"AlagappanRa"},"content":" return scanner.nextLine();","lastModifiedDate":"2023-09-08"},{"lineNumber":38,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":39,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":40,"author":{"gitId":"AlagappanRa"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":41,"author":{"gitId":"AlagappanRa"},"content":" * Shows the welcome message.","lastModifiedDate":"2023-09-08"},{"lineNumber":42,"author":{"gitId":"AlagappanRa"},"content":" * @param chatBotName","lastModifiedDate":"2023-09-08"},{"lineNumber":43,"author":{"gitId":"AlagappanRa"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":44,"author":{"gitId":"AlagappanRa"},"content":" public void showWelcome(String chatBotName) {","lastModifiedDate":"2023-09-08"},{"lineNumber":45,"author":{"gitId":"AlagappanRa"},"content":" System.out.println(Ui.LINE);","lastModifiedDate":"2023-09-08"},{"lineNumber":46,"author":{"gitId":"AlagappanRa"},"content":" String logo \u003d \" ____ _ \\n\"","lastModifiedDate":"2023-09-08"},{"lineNumber":47,"author":{"gitId":"AlagappanRa"},"content":" + \"| _ \\\\ _ _| | _____ \\n\"","lastModifiedDate":"2023-09-08"},{"lineNumber":48,"author":{"gitId":"AlagappanRa"},"content":" + \"| | | | | | | |/ / _ \\\\\\n\"","lastModifiedDate":"2023-09-08"},{"lineNumber":49,"author":{"gitId":"AlagappanRa"},"content":" + \"| |_| | |_| | \u003c __/\\n\"","lastModifiedDate":"2023-09-08"},{"lineNumber":50,"author":{"gitId":"AlagappanRa"},"content":" + \"|____/ \\\\__,_|_|\\\\_\\\\___|\\n\";","lastModifiedDate":"2023-09-08"},{"lineNumber":51,"author":{"gitId":"AlagappanRa"},"content":" System.out.println(logo);","lastModifiedDate":"2023-09-08"},{"lineNumber":52,"author":{"gitId":"AlagappanRa"},"content":" System.out.println(\"Hello! I\u0027m \" + chatBotName);","lastModifiedDate":"2023-09-08"},{"lineNumber":53,"author":{"gitId":"AlagappanRa"},"content":" System.out.println(\"What can I do for you?\");","lastModifiedDate":"2023-09-08"},{"lineNumber":54,"author":{"gitId":"AlagappanRa"},"content":" System.out.println(Ui.LINE);","lastModifiedDate":"2023-09-08"},{"lineNumber":55,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":56,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":57,"author":{"gitId":"AlagappanRa"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":58,"author":{"gitId":"AlagappanRa"},"content":" * Shows the goodbye message.","lastModifiedDate":"2023-09-08"},{"lineNumber":59,"author":{"gitId":"AlagappanRa"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":60,"author":{"gitId":"AlagappanRa"},"content":" public void showBye() {","lastModifiedDate":"2023-09-08"},{"lineNumber":61,"author":{"gitId":"AlagappanRa"},"content":" System.out.println(\"Bye. Hope to see you again soon!\");","lastModifiedDate":"2023-09-08"},{"lineNumber":62,"author":{"gitId":"AlagappanRa"},"content":" System.out.println(Ui.LINE);","lastModifiedDate":"2023-09-08"},{"lineNumber":63,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":64,"author":{"gitId":"AlagappanRa"},"content":"}","lastModifiedDate":"2023-09-08"}],"authorContributionMap":{"AlagappanRa":64}},{"path":"src/main/java/main/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AlagappanRa"},"content":"package main;","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"AlagappanRa"},"content":"import commands.Command;","lastModifiedDate":"2023-09-08"},{"lineNumber":3,"author":{"gitId":"AlagappanRa"},"content":"import components.DukeException;","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"AlagappanRa"},"content":"import components.Parser;","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"AlagappanRa"},"content":"import components.Storage;","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"AlagappanRa"},"content":"import components.Ui;","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"AlagappanRa"},"content":"import tasks.TaskList;","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":10,"author":{"gitId":"AlagappanRa"},"content":" private final Storage storage;","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"AlagappanRa"},"content":" private TaskList list;","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"AlagappanRa"},"content":" private final Ui ui;","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"AlagappanRa"},"content":" private static final String chatBotName \u003d \"CHAD CCP\";","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"AlagappanRa"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"AlagappanRa"},"content":" * Constructor for Duke.","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"AlagappanRa"},"content":" * @param PARENT_DIR Parent directory of the file.","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"AlagappanRa"},"content":" * @param FILEPATH Filepath of the file.","lastModifiedDate":"2023-09-08"},{"lineNumber":19,"author":{"gitId":"AlagappanRa"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":20,"author":{"gitId":"AlagappanRa"},"content":" public Duke(String PARENT_DIR, String FILEPATH) {","lastModifiedDate":"2023-09-08"},{"lineNumber":21,"author":{"gitId":"AlagappanRa"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-09-08"},{"lineNumber":22,"author":{"gitId":"AlagappanRa"},"content":" storage \u003d new Storage(PARENT_DIR, FILEPATH);","lastModifiedDate":"2023-09-08"},{"lineNumber":23,"author":{"gitId":"AlagappanRa"},"content":" try {","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"AlagappanRa"},"content":" storage.loadOrCreateFile();","lastModifiedDate":"2023-09-08"},{"lineNumber":25,"author":{"gitId":"AlagappanRa"},"content":" list \u003d storage.readData(storage);","lastModifiedDate":"2023-09-08"},{"lineNumber":26,"author":{"gitId":"AlagappanRa"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"AlagappanRa"},"content":" ui.showError(e);","lastModifiedDate":"2023-09-08"},{"lineNumber":28,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":29,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":30,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":31,"author":{"gitId":"AlagappanRa"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":32,"author":{"gitId":"AlagappanRa"},"content":" * Drives the program by reading user input and executing the command.","lastModifiedDate":"2023-09-08"},{"lineNumber":33,"author":{"gitId":"AlagappanRa"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":34,"author":{"gitId":"AlagappanRa"},"content":" public void run() {","lastModifiedDate":"2023-09-08"},{"lineNumber":35,"author":{"gitId":"AlagappanRa"},"content":" ui.showWelcome(chatBotName);","lastModifiedDate":"2023-09-08"},{"lineNumber":36,"author":{"gitId":"AlagappanRa"},"content":" boolean isExit \u003d false;","lastModifiedDate":"2023-09-08"},{"lineNumber":37,"author":{"gitId":"AlagappanRa"},"content":" while (!isExit) {","lastModifiedDate":"2023-09-08"},{"lineNumber":38,"author":{"gitId":"AlagappanRa"},"content":" try {","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"AlagappanRa"},"content":" String fullCommand \u003d ui.readCommand();","lastModifiedDate":"2023-09-08"},{"lineNumber":40,"author":{"gitId":"AlagappanRa"},"content":" //ui.showLine(); ","lastModifiedDate":"2023-09-08"},{"lineNumber":41,"author":{"gitId":"AlagappanRa"},"content":" Command c \u003d Parser.parse(fullCommand);","lastModifiedDate":"2023-09-08"},{"lineNumber":42,"author":{"gitId":"AlagappanRa"},"content":" c.execute(list, ui, storage);","lastModifiedDate":"2023-09-08"},{"lineNumber":43,"author":{"gitId":"AlagappanRa"},"content":" isExit \u003d c.isExit();","lastModifiedDate":"2023-09-08"},{"lineNumber":44,"author":{"gitId":"AlagappanRa"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-08"},{"lineNumber":45,"author":{"gitId":"AlagappanRa"},"content":" ui.showError(e);","lastModifiedDate":"2023-09-08"},{"lineNumber":46,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":47,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":48,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":49,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":50,"author":{"gitId":"AlagappanRa"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":51,"author":{"gitId":"AlagappanRa"},"content":" * Main method to run the program.","lastModifiedDate":"2023-09-08"},{"lineNumber":52,"author":{"gitId":"AlagappanRa"},"content":" * @param args Command line arguments.","lastModifiedDate":"2023-09-08"},{"lineNumber":53,"author":{"gitId":"AlagappanRa"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":54,"author":{"gitId":"AlagappanRa"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-08"},{"lineNumber":55,"author":{"gitId":"AlagappanRa"},"content":" new Duke(\"./data\", \"./data/store.txt\").run();","lastModifiedDate":"2023-09-08"},{"lineNumber":56,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":57,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"AlagappanRa":54,"-":3}},{"path":"src/main/java/tasks/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AlagappanRa"},"content":"package tasks;","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"AlagappanRa"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"AlagappanRa"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"AlagappanRa"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"AlagappanRa"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"AlagappanRa"},"content":" private final String by;","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"AlagappanRa"},"content":" private LocalDate date;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"AlagappanRa"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"AlagappanRa"},"content":" * Constructor for Deadline class for stdin inputs","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"AlagappanRa"},"content":" * @param description","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"AlagappanRa"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"AlagappanRa"},"content":" public Deadline(String description) {","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"AlagappanRa"},"content":" super(description.substring(0, description.indexOf(\" /by\")));","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"AlagappanRa"},"content":" this.by \u003d description.substring(description.indexOf(\" /by \") + 5);","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"AlagappanRa"},"content":" setDate(this.by); ","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"AlagappanRa"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":21,"author":{"gitId":"AlagappanRa"},"content":" * Constructor for Deadline class for inputs from file","lastModifiedDate":"2023-09-08"},{"lineNumber":22,"author":{"gitId":"AlagappanRa"},"content":" * @param description","lastModifiedDate":"2023-09-08"},{"lineNumber":23,"author":{"gitId":"AlagappanRa"},"content":" * @param by","lastModifiedDate":"2023-09-08"},{"lineNumber":24,"author":{"gitId":"AlagappanRa"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":25,"author":{"gitId":"AlagappanRa"},"content":" public Deadline(String description, String by) {","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"AlagappanRa"},"content":" super(description);","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"AlagappanRa"},"content":" this.by \u003d by;","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"AlagappanRa"},"content":" setDate(this.by); ","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"AlagappanRa"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":32,"author":{"gitId":"AlagappanRa"},"content":" * Setter for date, checks if date is in yyyy-MM-dd format","lastModifiedDate":"2023-09-08"},{"lineNumber":33,"author":{"gitId":"AlagappanRa"},"content":" * @param by","lastModifiedDate":"2023-09-08"},{"lineNumber":34,"author":{"gitId":"AlagappanRa"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":35,"author":{"gitId":"AlagappanRa"},"content":" private void setDate(String by) {","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"AlagappanRa"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"AlagappanRa"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd\");","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"AlagappanRa"},"content":" this.date \u003d LocalDate.parse(by, formatter);","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"AlagappanRa"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"AlagappanRa"},"content":" this.date \u003d null;","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"AlagappanRa"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":45,"author":{"gitId":"AlagappanRa"},"content":" * Getter for date","lastModifiedDate":"2023-09-08"},{"lineNumber":46,"author":{"gitId":"AlagappanRa"},"content":" * @return date","lastModifiedDate":"2023-09-08"},{"lineNumber":47,"author":{"gitId":"AlagappanRa"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":48,"author":{"gitId":"AlagappanRa"},"content":" private String getDate(LocalDate date) {","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"AlagappanRa"},"content":" return date.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\"));","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"AlagappanRa"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":53,"author":{"gitId":"AlagappanRa"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":54,"author":{"gitId":"AlagappanRa"},"content":" return String.format(\"[D]%s (by: %s)\", super.toString(), date !\u003d null","lastModifiedDate":"2023-09-10"},{"lineNumber":55,"author":{"gitId":"AlagappanRa"},"content":" ? getDate(date)","lastModifiedDate":"2023-09-10"},{"lineNumber":56,"author":{"gitId":"AlagappanRa"},"content":" : by);","lastModifiedDate":"2023-09-10"},{"lineNumber":57,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":58,"author":{"gitId":"AlagappanRa"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"AlagappanRa":58}},{"path":"src/main/java/tasks/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AlagappanRa"},"content":"package tasks;","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"AlagappanRa"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"AlagappanRa"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"AlagappanRa"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"AlagappanRa"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"AlagappanRa"},"content":" private final String to;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"AlagappanRa"},"content":" private final String from;","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"AlagappanRa"},"content":" private LocalDate toDate;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"AlagappanRa"},"content":" private LocalDate fromDate;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"AlagappanRa"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"AlagappanRa"},"content":" * Constructor for Event class.","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"AlagappanRa"},"content":" * @param m String containing the description of the events","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"AlagappanRa"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"AlagappanRa"},"content":" public Event(String m) {","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"AlagappanRa"},"content":" super(m.substring(0, m.indexOf(\" /from\")));","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"AlagappanRa"},"content":" int indexOfFirstSlash \u003d m.indexOf(\"/from \");","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"AlagappanRa"},"content":" int indexOfSecondSlash \u003d m.indexOf(\"/to \", m.indexOf(\"/to \"));","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"AlagappanRa"},"content":" this.from \u003d m.substring(indexOfFirstSlash + 6, indexOfSecondSlash - 1);","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"AlagappanRa"},"content":" this.to \u003d m.substring(indexOfSecondSlash + 4);","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"AlagappanRa"},"content":" setDate(to, true);","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"AlagappanRa"},"content":" setDate(from, false);","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"AlagappanRa"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":27,"author":{"gitId":"AlagappanRa"},"content":" * Constructor for Event class.","lastModifiedDate":"2023-09-08"},{"lineNumber":28,"author":{"gitId":"AlagappanRa"},"content":" * @param m String containing the description of the event.","lastModifiedDate":"2023-09-08"},{"lineNumber":29,"author":{"gitId":"AlagappanRa"},"content":" * @param from String containing the starting date of the event.","lastModifiedDate":"2023-09-08"},{"lineNumber":30,"author":{"gitId":"AlagappanRa"},"content":" * @param to String containing the ending date of the event.","lastModifiedDate":"2023-09-08"},{"lineNumber":31,"author":{"gitId":"AlagappanRa"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":32,"author":{"gitId":"AlagappanRa"},"content":" public Event (String m, String from, String to) {","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"AlagappanRa"},"content":" super(m);","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"AlagappanRa"},"content":" this.from \u003d from;","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"AlagappanRa"},"content":" this.to \u003d to;","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"AlagappanRa"},"content":" setDate(to, true);","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"AlagappanRa"},"content":" setDate(from, false);","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"AlagappanRa"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":41,"author":{"gitId":"AlagappanRa"},"content":" * Sets the date of the event.","lastModifiedDate":"2023-09-08"},{"lineNumber":42,"author":{"gitId":"AlagappanRa"},"content":" * @param by String containing the date of the event.","lastModifiedDate":"2023-09-08"},{"lineNumber":43,"author":{"gitId":"AlagappanRa"},"content":" * @param isToDate Boolean value to check if the date is a proper date yyyy-MM-dd string.","lastModifiedDate":"2023-09-08"},{"lineNumber":44,"author":{"gitId":"AlagappanRa"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":45,"author":{"gitId":"AlagappanRa"},"content":" private void setDate(String by, boolean isToDate) {","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"AlagappanRa"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"AlagappanRa"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd\");","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"AlagappanRa"},"content":" if (isToDate) {","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"AlagappanRa"},"content":" toDate \u003d LocalDate.parse(by, formatter);","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"AlagappanRa"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"AlagappanRa"},"content":" fromDate \u003d LocalDate.parse(by, formatter);","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"AlagappanRa"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"AlagappanRa"},"content":" if (isToDate) {","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"AlagappanRa"},"content":" this.toDate \u003d null;","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"AlagappanRa"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"AlagappanRa"},"content":" this.fromDate \u003d null;","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"AlagappanRa"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":63,"author":{"gitId":"AlagappanRa"},"content":" * Returns the date of the event.","lastModifiedDate":"2023-09-08"},{"lineNumber":64,"author":{"gitId":"AlagappanRa"},"content":" * @param date LocalDate object containing the date of the event.","lastModifiedDate":"2023-09-08"},{"lineNumber":65,"author":{"gitId":"AlagappanRa"},"content":" * @return String containing the date of the event.","lastModifiedDate":"2023-09-08"},{"lineNumber":66,"author":{"gitId":"AlagappanRa"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":67,"author":{"gitId":"AlagappanRa"},"content":" private String getDate(LocalDate date) {","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"AlagappanRa"},"content":" return date.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\"));","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"AlagappanRa"},"content":" ","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"AlagappanRa"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":73,"author":{"gitId":"AlagappanRa"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":74,"author":{"gitId":"AlagappanRa"},"content":" return String.format(\"[E]%s (from: %s to: %s)\", super.toString(),","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"AlagappanRa"},"content":" fromDate !\u003d null ? getDate(fromDate) : from,","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"AlagappanRa"},"content":" toDate !\u003d null ? getDate(toDate) : to","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"AlagappanRa"},"content":" );","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":79,"author":{"gitId":"AlagappanRa"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"AlagappanRa":79}},{"path":"src/main/java/tasks/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AlagappanRa"},"content":"package tasks;","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"AlagappanRa"},"content":"public class Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"AlagappanRa"},"content":" private Boolean isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"AlagappanRa"},"content":" private final String description;","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"AlagappanRa"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"AlagappanRa"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"AlagappanRa"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"AlagappanRa"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"AlagappanRa"},"content":" return \"[\" + (isDone ? \"X\" : \" \") + \"] \" + description;","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"AlagappanRa"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"AlagappanRa"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"AlagappanRa"},"content":" public void markAsUndone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"AlagappanRa"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"AlagappanRa"},"content":" public String getDescription() {","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"AlagappanRa"},"content":" return this.description;","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":27,"author":{"gitId":"AlagappanRa"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"AlagappanRa":27}},{"path":"src/main/java/tasks/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AlagappanRa"},"content":"package tasks;","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"AlagappanRa"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"AlagappanRa"},"content":"import components.DukeException;","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"AlagappanRa"},"content":"import components.Storage;","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"AlagappanRa"},"content":"import components.Ui;","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"AlagappanRa"},"content":"public class TaskList extends ArrayList\u003cTask\u003e {","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"AlagappanRa"},"content":" public TaskList() {","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"AlagappanRa"},"content":" super();","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"AlagappanRa"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"AlagappanRa"},"content":" * Prints the list of tasks in the TaskList.","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"AlagappanRa"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"AlagappanRa"},"content":" public void printList() {","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"AlagappanRa"},"content":" System.out.println(Ui.LINE);","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"AlagappanRa"},"content":" System.out.println(\"Here are the tasks in your list:\");","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"AlagappanRa"},"content":" for (int i \u003d 0; i \u003c this.size(); i++) {","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"AlagappanRa"},"content":" System.out.println((i + 1) + \". \" + this.get(i));","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"AlagappanRa"},"content":" System.out.println(Ui.LINE);","lastModifiedDate":"2023-09-08"},{"lineNumber":23,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"AlagappanRa"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":26,"author":{"gitId":"AlagappanRa"},"content":" * Marks a task as done.","lastModifiedDate":"2023-09-08"},{"lineNumber":27,"author":{"gitId":"AlagappanRa"},"content":" * @param index The index of the task to be marked as done.","lastModifiedDate":"2023-09-08"},{"lineNumber":28,"author":{"gitId":"AlagappanRa"},"content":" * @param storage The Storage object to write to.","lastModifiedDate":"2023-09-08"},{"lineNumber":29,"author":{"gitId":"AlagappanRa"},"content":" * @param isFromDatabase A boolean to indicate if the task is from the database.","lastModifiedDate":"2023-09-08"},{"lineNumber":30,"author":{"gitId":"AlagappanRa"},"content":" * @throws DukeException If the index is out of bounds.","lastModifiedDate":"2023-09-08"},{"lineNumber":31,"author":{"gitId":"AlagappanRa"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":32,"author":{"gitId":"AlagappanRa"},"content":" public void markAsDone(Integer index, Storage storage, boolean... isFromDatabase) throws DukeException{ ","lastModifiedDate":"2023-09-08"},{"lineNumber":33,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"AlagappanRa"},"content":" if (isFromDatabase.length \u003e 0 \u0026\u0026 isFromDatabase[0]) {","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"AlagappanRa"},"content":" this.get(Integer.valueOf(index - 1)).markAsDone();","lastModifiedDate":"2023-09-08"},{"lineNumber":36,"author":{"gitId":"AlagappanRa"},"content":" return;","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"AlagappanRa"},"content":" if (index \u003d\u003d 0) {","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"AlagappanRa"},"content":" throw new DukeException(\"Mark command must be followed by a space and an integer. ERR: NO INTEGER.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"AlagappanRa"},"content":" } ","lastModifiedDate":"2023-08-24"},{"lineNumber":42,"author":{"gitId":"AlagappanRa"},"content":" ","lastModifiedDate":"2023-08-24"},{"lineNumber":43,"author":{"gitId":"AlagappanRa"},"content":" try {","lastModifiedDate":"2023-08-24"},{"lineNumber":44,"author":{"gitId":"AlagappanRa"},"content":" this.get(index - 1).markAsDone();","lastModifiedDate":"2023-08-24"},{"lineNumber":45,"author":{"gitId":"AlagappanRa"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-24"},{"lineNumber":46,"author":{"gitId":"AlagappanRa"},"content":" throw new DukeException(\"There is no task at that index.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":47,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":48,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":49,"author":{"gitId":"AlagappanRa"},"content":" System.out.println(Ui.LINE);","lastModifiedDate":"2023-09-08"},{"lineNumber":50,"author":{"gitId":"AlagappanRa"},"content":" System.out.println(\"Nice! I\u0027ve marked this task as done:\");","lastModifiedDate":"2023-08-24"},{"lineNumber":51,"author":{"gitId":"AlagappanRa"},"content":" System.out.println(\" \" + this.get(index - 1));","lastModifiedDate":"2023-08-24"},{"lineNumber":52,"author":{"gitId":"AlagappanRa"},"content":" System.out.println(Ui.LINE);","lastModifiedDate":"2023-09-08"},{"lineNumber":53,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"AlagappanRa"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"AlagappanRa"},"content":" storage.replaceLine(index, this.get(index - 1).toString());","lastModifiedDate":"2023-09-08"},{"lineNumber":56,"author":{"gitId":"AlagappanRa"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"AlagappanRa"},"content":" System.out.println(Ui.LINE);","lastModifiedDate":"2023-09-08"},{"lineNumber":58,"author":{"gitId":"AlagappanRa"},"content":" System.out.println(e);","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"AlagappanRa"},"content":" System.out.println(Ui.LINE);","lastModifiedDate":"2023-09-08"},{"lineNumber":60,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"AlagappanRa"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":64,"author":{"gitId":"AlagappanRa"},"content":" * Marks a task as undone.","lastModifiedDate":"2023-09-08"},{"lineNumber":65,"author":{"gitId":"AlagappanRa"},"content":" * @param index The index of the task to be marked as undone.","lastModifiedDate":"2023-09-08"},{"lineNumber":66,"author":{"gitId":"AlagappanRa"},"content":" * @param storage The Storage object to write to.","lastModifiedDate":"2023-09-08"},{"lineNumber":67,"author":{"gitId":"AlagappanRa"},"content":" * @param isFromDatabase A boolean to indicate if the task is from the database.","lastModifiedDate":"2023-09-08"},{"lineNumber":68,"author":{"gitId":"AlagappanRa"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":69,"author":{"gitId":"AlagappanRa"},"content":" public void markAsUndone(int index, Storage storage, boolean... isFromDatabase) {","lastModifiedDate":"2023-09-08"},{"lineNumber":70,"author":{"gitId":"AlagappanRa"},"content":" ","lastModifiedDate":"2023-09-08"},{"lineNumber":71,"author":{"gitId":"AlagappanRa"},"content":" if (isFromDatabase.length \u003e 0 \u0026\u0026 isFromDatabase[0]) {","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"AlagappanRa"},"content":" this.get(index - 1).markAsUndone();","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"AlagappanRa"},"content":" return;","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":75,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":76,"author":{"gitId":"AlagappanRa"},"content":" System.out.println(Ui.LINE);","lastModifiedDate":"2023-09-08"},{"lineNumber":77,"author":{"gitId":"AlagappanRa"},"content":" System.out.println(\"OK, I\u0027ve marked this task as not done yet:\");","lastModifiedDate":"2023-08-24"},{"lineNumber":78,"author":{"gitId":"AlagappanRa"},"content":" this.get(index - 1).markAsUndone();","lastModifiedDate":"2023-08-24"},{"lineNumber":79,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":80,"author":{"gitId":"AlagappanRa"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"AlagappanRa"},"content":" storage.replaceLine(index, this.get(index - 1).toString());","lastModifiedDate":"2023-09-08"},{"lineNumber":82,"author":{"gitId":"AlagappanRa"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"AlagappanRa"},"content":" System.out.println(Ui.LINE);","lastModifiedDate":"2023-09-08"},{"lineNumber":84,"author":{"gitId":"AlagappanRa"},"content":" System.out.println(e);","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"AlagappanRa"},"content":" System.out.println(Ui.LINE);","lastModifiedDate":"2023-09-08"},{"lineNumber":86,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":87,"author":{"gitId":"AlagappanRa"},"content":" System.out.println(Ui.LINE);","lastModifiedDate":"2023-09-08"},{"lineNumber":88,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":89,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"AlagappanRa"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":91,"author":{"gitId":"AlagappanRa"},"content":" * Deletes a task from the TaskList.","lastModifiedDate":"2023-09-08"},{"lineNumber":92,"author":{"gitId":"AlagappanRa"},"content":" * @param index The index of the task to be deleted.","lastModifiedDate":"2023-09-08"},{"lineNumber":93,"author":{"gitId":"AlagappanRa"},"content":" * @param storage The Storage object to write to.","lastModifiedDate":"2023-09-08"},{"lineNumber":94,"author":{"gitId":"AlagappanRa"},"content":" * @param isFromDatabase A boolean to indicate if the task is from the database.","lastModifiedDate":"2023-09-08"},{"lineNumber":95,"author":{"gitId":"AlagappanRa"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":96,"author":{"gitId":"AlagappanRa"},"content":" public void deleteTask(int index, Storage storage, boolean... isFromDatabase) {","lastModifiedDate":"2023-09-08"},{"lineNumber":97,"author":{"gitId":"AlagappanRa"},"content":" if (isFromDatabase.length \u003e 0 \u0026\u0026 isFromDatabase[0]) {","lastModifiedDate":"2023-09-01"},{"lineNumber":98,"author":{"gitId":"AlagappanRa"},"content":" this.remove(index - 1);","lastModifiedDate":"2023-09-01"},{"lineNumber":99,"author":{"gitId":"AlagappanRa"},"content":" return;","lastModifiedDate":"2023-09-01"},{"lineNumber":100,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":101,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":102,"author":{"gitId":"AlagappanRa"},"content":" System.out.println(Ui.LINE);","lastModifiedDate":"2023-09-08"},{"lineNumber":103,"author":{"gitId":"AlagappanRa"},"content":" System.out.println(\"Noted. I\u0027ve removed this task:\");","lastModifiedDate":"2023-08-24"},{"lineNumber":104,"author":{"gitId":"AlagappanRa"},"content":" Task t \u003d this.remove(index - 1);","lastModifiedDate":"2023-08-24"},{"lineNumber":105,"author":{"gitId":"AlagappanRa"},"content":" System.out.println(\" \" + t);","lastModifiedDate":"2023-08-24"},{"lineNumber":106,"author":{"gitId":"AlagappanRa"},"content":" System.out.println(\"Now you have \" + Integer.toString(this.size()) + \" \" + (this.size() \u003d\u003d 1 ? \"task\" : \"tasks\") + \" in the list.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":107,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":108,"author":{"gitId":"AlagappanRa"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":109,"author":{"gitId":"AlagappanRa"},"content":" storage.deleteLine(index);","lastModifiedDate":"2023-09-08"},{"lineNumber":110,"author":{"gitId":"AlagappanRa"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":111,"author":{"gitId":"AlagappanRa"},"content":" System.out.println(Ui.LINE);","lastModifiedDate":"2023-09-08"},{"lineNumber":112,"author":{"gitId":"AlagappanRa"},"content":" System.out.println(e);","lastModifiedDate":"2023-09-01"},{"lineNumber":113,"author":{"gitId":"AlagappanRa"},"content":" System.out.println(Ui.LINE);","lastModifiedDate":"2023-09-08"},{"lineNumber":114,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":115,"author":{"gitId":"AlagappanRa"},"content":" System.out.println(Ui.LINE);","lastModifiedDate":"2023-09-08"},{"lineNumber":116,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":117,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":118,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":119,"author":{"gitId":"AlagappanRa"},"content":" public void addTask(Task task, Storage storage, boolean... isFromDatabase) {","lastModifiedDate":"2023-09-08"},{"lineNumber":120,"author":{"gitId":"AlagappanRa"},"content":" if (isFromDatabase.length \u003e 0 \u0026\u0026 isFromDatabase[0]) {","lastModifiedDate":"2023-09-01"},{"lineNumber":121,"author":{"gitId":"AlagappanRa"},"content":" this.add(task);","lastModifiedDate":"2023-09-01"},{"lineNumber":122,"author":{"gitId":"AlagappanRa"},"content":" return;","lastModifiedDate":"2023-09-01"},{"lineNumber":123,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":124,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":125,"author":{"gitId":"AlagappanRa"},"content":" System.out.println(Ui.LINE);","lastModifiedDate":"2023-09-08"},{"lineNumber":126,"author":{"gitId":"AlagappanRa"},"content":" System.out.println(\"Got it. I\u0027ve added this task:\");","lastModifiedDate":"2023-08-24"},{"lineNumber":127,"author":{"gitId":"AlagappanRa"},"content":" this.add(task);","lastModifiedDate":"2023-08-24"},{"lineNumber":128,"author":{"gitId":"AlagappanRa"},"content":" System.out.println(\" \" + task);","lastModifiedDate":"2023-08-24"},{"lineNumber":129,"author":{"gitId":"AlagappanRa"},"content":" System.out.println(\"Now you have \" + Integer.toString(this.size()) + \" \" + (this.size() \u003d\u003d 1 ? \"task\" : \"tasks\") + \" in the list.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":130,"author":{"gitId":"AlagappanRa"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":131,"author":{"gitId":"AlagappanRa"},"content":" storage.writeData(task.toString());","lastModifiedDate":"2023-09-08"},{"lineNumber":132,"author":{"gitId":"AlagappanRa"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":133,"author":{"gitId":"AlagappanRa"},"content":" System.out.println(Ui.LINE);","lastModifiedDate":"2023-09-08"},{"lineNumber":134,"author":{"gitId":"AlagappanRa"},"content":" System.out.println(e);","lastModifiedDate":"2023-09-01"},{"lineNumber":135,"author":{"gitId":"AlagappanRa"},"content":" System.out.println(Ui.LINE);","lastModifiedDate":"2023-09-08"},{"lineNumber":136,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":137,"author":{"gitId":"AlagappanRa"},"content":" System.out.println(Ui.LINE);","lastModifiedDate":"2023-09-08"},{"lineNumber":138,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":139,"author":{"gitId":"AlagappanRa"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"AlagappanRa":139}},{"path":"src/main/java/tasks/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AlagappanRa"},"content":"package tasks;","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"AlagappanRa"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"AlagappanRa"},"content":" public ToDo(String description) {","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"AlagappanRa"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"AlagappanRa"},"content":" ","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"AlagappanRa"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"AlagappanRa"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"AlagappanRa"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"AlagappanRa"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"AlagappanRa":12}},{"path":"src/test/java/components/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AlagappanRa"},"content":"package components;","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":3,"author":{"gitId":"AlagappanRa"},"content":"import static org.junit.jupiter.api.Assertions.*;","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"AlagappanRa"},"content":"import commands.*;","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"AlagappanRa"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"AlagappanRa"},"content":"public class ParserTest {","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"AlagappanRa"},"content":" @Test","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"AlagappanRa"},"content":" public void testParseExitCommand() throws DukeException {","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"AlagappanRa"},"content":" Command command \u003d Parser.parse(\"bye\");","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"AlagappanRa"},"content":" assertTrue(command instanceof ExitCommand);","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"AlagappanRa"},"content":" @Test","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"AlagappanRa"},"content":" public void testParseShowCommand() throws DukeException {","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"AlagappanRa"},"content":" Command command \u003d Parser.parse(\"list\");","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"AlagappanRa"},"content":" assertTrue(command instanceof ShowCommand);","lastModifiedDate":"2023-09-08"},{"lineNumber":19,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":20,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":21,"author":{"gitId":"AlagappanRa"},"content":" @Test","lastModifiedDate":"2023-09-08"},{"lineNumber":22,"author":{"gitId":"AlagappanRa"},"content":" public void testParseMarkAsDoneCommand() throws DukeException {","lastModifiedDate":"2023-09-08"},{"lineNumber":23,"author":{"gitId":"AlagappanRa"},"content":" Command command \u003d Parser.parse(\"mark 1\");","lastModifiedDate":"2023-09-08"},{"lineNumber":24,"author":{"gitId":"AlagappanRa"},"content":" assertTrue(command instanceof MarkAsDoneCommand);","lastModifiedDate":"2023-09-08"},{"lineNumber":25,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":26,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":27,"author":{"gitId":"AlagappanRa"},"content":" @Test","lastModifiedDate":"2023-09-08"},{"lineNumber":28,"author":{"gitId":"AlagappanRa"},"content":" public void testParseMarkAsDoneCommandInvalidIndex() {","lastModifiedDate":"2023-09-08"},{"lineNumber":29,"author":{"gitId":"AlagappanRa"},"content":" assertThrows(DukeException.class, () -\u003e Parser.parse(\"mark abc\"));","lastModifiedDate":"2023-09-08"},{"lineNumber":30,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":31,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":32,"author":{"gitId":"AlagappanRa"},"content":" @Test","lastModifiedDate":"2023-09-08"},{"lineNumber":33,"author":{"gitId":"AlagappanRa"},"content":" public void testParseMarkAsDoneCommandNoIndex() {","lastModifiedDate":"2023-09-08"},{"lineNumber":34,"author":{"gitId":"AlagappanRa"},"content":" assertThrows(DukeException.class, () -\u003e Parser.parse(\"mark\"));","lastModifiedDate":"2023-09-08"},{"lineNumber":35,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":36,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":37,"author":{"gitId":"AlagappanRa"},"content":" @Test","lastModifiedDate":"2023-09-08"},{"lineNumber":38,"author":{"gitId":"AlagappanRa"},"content":" public void testParseMarkAsUndoneCommand() throws DukeException {","lastModifiedDate":"2023-09-08"},{"lineNumber":39,"author":{"gitId":"AlagappanRa"},"content":" Command command \u003d Parser.parse(\"unmark 1\");","lastModifiedDate":"2023-09-08"},{"lineNumber":40,"author":{"gitId":"AlagappanRa"},"content":" assertTrue(command instanceof MarkAsUndoneCommand);","lastModifiedDate":"2023-09-08"},{"lineNumber":41,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":42,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":43,"author":{"gitId":"AlagappanRa"},"content":" @Test","lastModifiedDate":"2023-09-08"},{"lineNumber":44,"author":{"gitId":"AlagappanRa"},"content":" public void testParseToDoCommand() throws DukeException {","lastModifiedDate":"2023-09-08"},{"lineNumber":45,"author":{"gitId":"AlagappanRa"},"content":" Command command \u003d Parser.parse(\"todo some task\");","lastModifiedDate":"2023-09-08"},{"lineNumber":46,"author":{"gitId":"AlagappanRa"},"content":" assertTrue(command instanceof ToDoCommand);","lastModifiedDate":"2023-09-08"},{"lineNumber":47,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":48,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":49,"author":{"gitId":"AlagappanRa"},"content":" @Test","lastModifiedDate":"2023-09-08"},{"lineNumber":50,"author":{"gitId":"AlagappanRa"},"content":" public void testParseDeadlineCommand() throws DukeException {","lastModifiedDate":"2023-09-08"},{"lineNumber":51,"author":{"gitId":"AlagappanRa"},"content":" Command command \u003d Parser.parse(\"deadline some task\");","lastModifiedDate":"2023-09-08"},{"lineNumber":52,"author":{"gitId":"AlagappanRa"},"content":" assertTrue(command instanceof DeadlineCommand);","lastModifiedDate":"2023-09-08"},{"lineNumber":53,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":54,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":55,"author":{"gitId":"AlagappanRa"},"content":" @Test","lastModifiedDate":"2023-09-08"},{"lineNumber":56,"author":{"gitId":"AlagappanRa"},"content":" public void testParseEventCommand() throws DukeException {","lastModifiedDate":"2023-09-08"},{"lineNumber":57,"author":{"gitId":"AlagappanRa"},"content":" Command command \u003d Parser.parse(\"event some task\");","lastModifiedDate":"2023-09-08"},{"lineNumber":58,"author":{"gitId":"AlagappanRa"},"content":" assertTrue(command instanceof EventCommand);","lastModifiedDate":"2023-09-08"},{"lineNumber":59,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":60,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":61,"author":{"gitId":"AlagappanRa"},"content":" @Test","lastModifiedDate":"2023-09-08"},{"lineNumber":62,"author":{"gitId":"AlagappanRa"},"content":" public void testParseDeleteCommand() throws DukeException {","lastModifiedDate":"2023-09-08"},{"lineNumber":63,"author":{"gitId":"AlagappanRa"},"content":" Command command \u003d Parser.parse(\"delete 1\");","lastModifiedDate":"2023-09-08"},{"lineNumber":64,"author":{"gitId":"AlagappanRa"},"content":" assertTrue(command instanceof DeleteCommand);","lastModifiedDate":"2023-09-08"},{"lineNumber":65,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":66,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":67,"author":{"gitId":"AlagappanRa"},"content":" @Test","lastModifiedDate":"2023-09-08"},{"lineNumber":68,"author":{"gitId":"AlagappanRa"},"content":" public void testParseUnknownCommand() throws DukeException {","lastModifiedDate":"2023-09-08"},{"lineNumber":69,"author":{"gitId":"AlagappanRa"},"content":" Command command \u003d Parser.parse(\"unknown_command\");","lastModifiedDate":"2023-09-08"},{"lineNumber":70,"author":{"gitId":"AlagappanRa"},"content":" assertTrue(command instanceof UnknownCommand);","lastModifiedDate":"2023-09-08"},{"lineNumber":71,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":72,"author":{"gitId":"AlagappanRa"},"content":"}","lastModifiedDate":"2023-09-08"}],"authorContributionMap":{"AlagappanRa":72}},{"path":"src/test/java/components/StorageTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AlagappanRa"},"content":"package components;","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":3,"author":{"gitId":"AlagappanRa"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"AlagappanRa"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"AlagappanRa"},"content":"import org.junit.jupiter.api.io.TempDir;","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"AlagappanRa"},"content":"import java.io.BufferedWriter;","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"AlagappanRa"},"content":"import java.io.File;","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"AlagappanRa"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"AlagappanRa"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"AlagappanRa"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"AlagappanRa"},"content":"import static org.junit.jupiter.api.Assertions.*;","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"AlagappanRa"},"content":"public class StorageTest {","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"AlagappanRa"},"content":" private Storage storage;","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"AlagappanRa"},"content":" private File tempFile;","lastModifiedDate":"2023-09-08"},{"lineNumber":19,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":20,"author":{"gitId":"AlagappanRa"},"content":" @BeforeEach","lastModifiedDate":"2023-09-08"},{"lineNumber":21,"author":{"gitId":"AlagappanRa"},"content":" public void setUp(@TempDir Path tempDir) throws IOException, DukeException {","lastModifiedDate":"2023-09-08"},{"lineNumber":22,"author":{"gitId":"AlagappanRa"},"content":" tempFile \u003d File.createTempFile(\"temp\", \".txt\", tempDir.toFile());","lastModifiedDate":"2023-09-08"},{"lineNumber":23,"author":{"gitId":"AlagappanRa"},"content":" storage \u003d new Storage(tempDir.toString(), tempFile.getAbsolutePath());","lastModifiedDate":"2023-09-08"},{"lineNumber":24,"author":{"gitId":"AlagappanRa"},"content":" storage.loadOrCreateFile();","lastModifiedDate":"2023-09-08"},{"lineNumber":25,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":26,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":27,"author":{"gitId":"AlagappanRa"},"content":" @Test","lastModifiedDate":"2023-09-08"},{"lineNumber":28,"author":{"gitId":"AlagappanRa"},"content":" public void testDeleteLine_FileEmpty() {","lastModifiedDate":"2023-09-08"},{"lineNumber":29,"author":{"gitId":"AlagappanRa"},"content":" assertThrows(DukeException.class, () -\u003e storage.deleteLine(1));","lastModifiedDate":"2023-09-08"},{"lineNumber":30,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":31,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":32,"author":{"gitId":"AlagappanRa"},"content":" @Test","lastModifiedDate":"2023-09-08"},{"lineNumber":33,"author":{"gitId":"AlagappanRa"},"content":" public void testDeleteLine_InvalidLineNumber() {","lastModifiedDate":"2023-09-08"},{"lineNumber":34,"author":{"gitId":"AlagappanRa"},"content":" assertThrows(DukeException.class, () -\u003e storage.deleteLine(0));","lastModifiedDate":"2023-09-08"},{"lineNumber":35,"author":{"gitId":"AlagappanRa"},"content":" assertThrows(DukeException.class, () -\u003e storage.deleteLine(-1));","lastModifiedDate":"2023-09-08"},{"lineNumber":36,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":37,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":38,"author":{"gitId":"AlagappanRa"},"content":" @Test","lastModifiedDate":"2023-09-08"},{"lineNumber":39,"author":{"gitId":"AlagappanRa"},"content":" public void testDeleteLine_LineNumberGreaterThanFileLines() throws IOException {","lastModifiedDate":"2023-09-08"},{"lineNumber":40,"author":{"gitId":"AlagappanRa"},"content":" try (BufferedWriter bw \u003d new BufferedWriter(new FileWriter(tempFile))) {","lastModifiedDate":"2023-09-08"},{"lineNumber":41,"author":{"gitId":"AlagappanRa"},"content":" bw.write(\"Line 1\");","lastModifiedDate":"2023-09-08"},{"lineNumber":42,"author":{"gitId":"AlagappanRa"},"content":" bw.newLine();","lastModifiedDate":"2023-09-08"},{"lineNumber":43,"author":{"gitId":"AlagappanRa"},"content":" bw.write(\"Line 2\");","lastModifiedDate":"2023-09-08"},{"lineNumber":44,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":45,"author":{"gitId":"AlagappanRa"},"content":" assertThrows(DukeException.class, () -\u003e storage.deleteLine(3));","lastModifiedDate":"2023-09-08"},{"lineNumber":46,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":47,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":48,"author":{"gitId":"AlagappanRa"},"content":" @Test","lastModifiedDate":"2023-09-08"},{"lineNumber":49,"author":{"gitId":"AlagappanRa"},"content":" public void testDeleteLine_ValidLineNumber() throws IOException, DukeException {","lastModifiedDate":"2023-09-08"},{"lineNumber":50,"author":{"gitId":"AlagappanRa"},"content":" try (BufferedWriter bw \u003d new BufferedWriter(new FileWriter(tempFile))) {","lastModifiedDate":"2023-09-08"},{"lineNumber":51,"author":{"gitId":"AlagappanRa"},"content":" bw.write(\"Line 1\");","lastModifiedDate":"2023-09-08"},{"lineNumber":52,"author":{"gitId":"AlagappanRa"},"content":" bw.newLine();","lastModifiedDate":"2023-09-08"},{"lineNumber":53,"author":{"gitId":"AlagappanRa"},"content":" bw.write(\"Line 2\");","lastModifiedDate":"2023-09-08"},{"lineNumber":54,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":55,"author":{"gitId":"AlagappanRa"},"content":" assertDoesNotThrow(() -\u003e storage.deleteLine(1));","lastModifiedDate":"2023-09-08"},{"lineNumber":56,"author":{"gitId":"AlagappanRa"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":57,"author":{"gitId":"AlagappanRa"},"content":"}","lastModifiedDate":"2023-09-08"}],"authorContributionMap":{"AlagappanRa":57}},{"path":"text-ui-test/data/store.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"AlagappanRa"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"AlagappanRa"},"content":"[T][X] read book","lastModifiedDate":"2023-09-08"},{"lineNumber":3,"author":{"gitId":"AlagappanRa"},"content":"[T][X] return book","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"AlagappanRa"},"content":"[T][ ] buy bread","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"AlagappanRa"},"content":"[T][ ] borrow book","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"AlagappanRa"},"content":"[D][ ] return book (by: Sunday)","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"AlagappanRa"},"content":"[E][ ] project meeting (from: Mon 2pm to: Fri 4pm)","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"AlagappanRa"},"content":"[T][ ] read book","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"AlagappanRa"},"content":"[T][ ] return book","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"AlagappanRa"},"content":"[T][ ] buy bread","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"AlagappanRa"},"content":"[T][ ] borrow book","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"AlagappanRa"},"content":"[D][ ] return book (by: Sunday)","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"AlagappanRa"},"content":"[E][ ] project meeting (from: Mon 2pm to: Fri 4pm)","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"AlagappanRa"},"content":"[T][ ] read book","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"AlagappanRa"},"content":"[T][ ] return book","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"AlagappanRa"},"content":"[T][ ] buy bread","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"AlagappanRa"},"content":"[T][ ] read book","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"AlagappanRa"},"content":"[T][ ] return book","lastModifiedDate":"2023-09-08"},{"lineNumber":19,"author":{"gitId":"AlagappanRa"},"content":"[T][ ] buy bread","lastModifiedDate":"2023-09-08"},{"lineNumber":20,"author":{"gitId":"AlagappanRa"},"content":"[T][ ] borrow book","lastModifiedDate":"2023-09-08"},{"lineNumber":21,"author":{"gitId":"AlagappanRa"},"content":"[D][ ] return book (by: Sunday)","lastModifiedDate":"2023-09-08"},{"lineNumber":22,"author":{"gitId":"AlagappanRa"},"content":"[E][ ] project meeting (from: Mon 2pm to: Fri 4pm)","lastModifiedDate":"2023-09-08"},{"lineNumber":23,"author":{"gitId":"AlagappanRa"},"content":"[T][ ] read book","lastModifiedDate":"2023-09-08"},{"lineNumber":24,"author":{"gitId":"AlagappanRa"},"content":"[T][ ] return book","lastModifiedDate":"2023-09-08"},{"lineNumber":25,"author":{"gitId":"AlagappanRa"},"content":"[T][ ] buy bread","lastModifiedDate":"2023-09-08"},{"lineNumber":26,"author":{"gitId":"AlagappanRa"},"content":"[T][ ] borrow book","lastModifiedDate":"2023-09-08"},{"lineNumber":27,"author":{"gitId":"AlagappanRa"},"content":"[D][ ] return book (by: Sunday)","lastModifiedDate":"2023-09-08"},{"lineNumber":28,"author":{"gitId":"AlagappanRa"},"content":"[E][ ] project meeting (from: Mon 2pm to: Fri 4pm)","lastModifiedDate":"2023-09-08"},{"lineNumber":29,"author":{"gitId":"AlagappanRa"},"content":"[T][ ] read book","lastModifiedDate":"2023-09-08"},{"lineNumber":30,"author":{"gitId":"AlagappanRa"},"content":"[T][ ] return book","lastModifiedDate":"2023-09-08"},{"lineNumber":31,"author":{"gitId":"AlagappanRa"},"content":"[T][ ] buy bread","lastModifiedDate":"2023-09-08"},{"lineNumber":32,"author":{"gitId":"AlagappanRa"},"content":"[T][ ] borrow book","lastModifiedDate":"2023-09-08"},{"lineNumber":33,"author":{"gitId":"AlagappanRa"},"content":"[D][ ] return book (by: Sunday)","lastModifiedDate":"2023-09-08"},{"lineNumber":34,"author":{"gitId":"AlagappanRa"},"content":"[E][ ] project meeting (from: Mon 2pm to: Fri 4pm)","lastModifiedDate":"2023-09-08"}],"authorContributionMap":{"AlagappanRa":34}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"AlagappanRa"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"AlagappanRa"},"content":"blah","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"AlagappanRa"},"content":"todo read book","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"AlagappanRa"},"content":"todo return book","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"AlagappanRa"},"content":"todo buy bread","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"AlagappanRa"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"AlagappanRa"},"content":"mark 1","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"AlagappanRa"},"content":"mark 2","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"AlagappanRa"},"content":"unmark 2","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"AlagappanRa"},"content":"todo borrow book","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"AlagappanRa"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"AlagappanRa"},"content":"deadline return book /by Sunday","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"AlagappanRa"},"content":"event project meeting /from Mon 2pm /to Fri 4pm","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"AlagappanRa"},"content":"list","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"AlagappanRa"},"content":"bye","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"AlagappanRa":15}},{"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":"AlagappanRa"},"content":"for /r \"..\\src\\main\\java\" %%a in (*.java) do (","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"AlagappanRa"},"content":" javac -cp ..\\src\\main\\java -Xlint:none -d ..\\bin %%a","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"AlagappanRa"},"content":")","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"-"},"content":"IF ERRORLEVEL 1 (","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":" echo ********** BUILD FAILURE **********","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":" exit /b 1","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":")","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"REM no error here, errorlevel \u003d\u003d 0","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"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":20,"author":{"gitId":"AlagappanRa"},"content":"java -classpath ..\\bin main.Duke \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":"REM compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":"FC ACTUAL.TXT EXPECTED.TXT","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"AlagappanRa":4,"-":19}}] diff --git a/AlagappanRa_ip_master/commits.json b/AlagappanRa_ip_master/commits.json index 09b592f2..0ce6a1cb 100644 --- a/AlagappanRa_ip_master/commits.json +++ b/AlagappanRa_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"AlagappanRa":[{"date":"2023-08-23","commitResults":[{"hash":"7fb10af7792cf4e68ed90e7f365f0293d0060ee5","isMergeCommit":false,"messageTitle":"Tasks Completed: Level 0. Rename, Greet, Exit Level 1. Echo","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":40,"deletions":6}}},{"hash":"55bb0e8fbdac69a7ef3e855b62a33095a59aef5d","isMergeCommit":false,"messageTitle":"Tasks Completed: Level 0. Rename, Greet, Exit Level 1. Echo","messageBody":"","tags":["Level-2","Level-1","Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}}]},{"date":"2023-08-24","commitResults":[{"hash":"b9bf836ab351b116b8770729c09b860918dd362b","isMergeCommit":false,"messageTitle":"Level 3 [COMPLETED]","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":92,"deletions":4}}},{"hash":"8a6cffb0f189ec7156c21f9190e570439dc878b9","isMergeCommit":false,"messageTitle":"Level 4 [COMPLETED]","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":64,"deletions":12}}},{"hash":"3e4abeb46c93dd58331e88615b032ea43e36b52b","isMergeCommit":false,"messageTitle":"Level 5 [COMPLETED]","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":13,"deletions":0},"java":{"insertions":1,"deletions":1},"bat":{"insertions":4,"deletions":2}}},{"hash":"6554a1692679a3e2473c51b0cc9bb9b0b8ca7e0a","isMergeCommit":false,"messageTitle":"Level 5 [COMPLETED]","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":72,"deletions":16}}},{"hash":"9a6ee064fc4869aa1eb1309b3ea681ae39809d11","isMergeCommit":false,"messageTitle":"Level 6 [COMPLETED]","messageBody":"","tags":["Level-6","A-TextUiTesting","A-Enums"],"fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":0}}}]},{"date":"2023-08-30","commitResults":[{"hash":"b78e91bb85881351f7efd37d3c9aeae18184bbb0","isMergeCommit":false,"messageTitle":"Reformatted code to include additional enums","messageBody":"Reformatted code to include additional enums\n","fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":4},"java":{"insertions":92,"deletions":44}}}]},{"date":"2023-09-01","commitResults":[{"hash":"7d653c8e4dcd8cc9d1c0a2c416dc4f1bca27f9e0","isMergeCommit":false,"messageTitle":"Level-7","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":6,"deletions":1},"java":{"insertions":354,"deletions":65}}},{"hash":"972ff0eaf017fe07e7d5ef6843e77cdf52547bac","isMergeCommit":true,"messageTitle":"Merge pull request #1 from AlagappanRa/branch-Level-7","messageBody":"Level-7","tags":["Level-7"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-02","commitResults":[{"hash":"dd166e2480fb0ffe93d7787bcc9b5e2bb9e38c2b","isMergeCommit":false,"messageTitle":"Level-8","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":11,"deletions":1},"java":{"insertions":74,"deletions":14}}},{"hash":"df8683110ee52eb9c340f5132a4cc4164556e82e","isMergeCommit":true,"messageTitle":"Merge pull request #2 from AlagappanRa/branch-Level-8","messageBody":"Level-8","tags":["Level-8"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-08","commitResults":[{"hash":"df57125561feee8afbbdeaab22ead0b20abc0dac","isMergeCommit":false,"messageTitle":"A-MoreOOP \u0026 A-Packages","messageBody":"","tags":["A-Packages","A-MoreOOP"],"fileTypesAndContributionMap":{"txt":{"insertions":34,"deletions":14},"java":{"insertions":413,"deletions":216}}},{"hash":"55d188d0e9de4868af4c1c7dc9db6cb5cd850873","isMergeCommit":true,"messageTitle":"Merge pull request #3 from AlagappanRa/branch-Level-8","messageBody":"A-MoreOOP \u0026 A-Packages","fileTypesAndContributionMap":{}},{"hash":"96d8eed50b76957d84529aab6d03f6a7baa7febf","isMergeCommit":true,"messageTitle":"Merge pull request #4 from AlagappanRa/add-gradle-support","messageBody":"Add gradle support","fileTypesAndContributionMap":{}},{"hash":"3066f582d6726f62a50d41b3dec7c7d2714e053d","isMergeCommit":false,"messageTitle":"A-Gradle \u0026 A-JUnit","messageBody":"","tags":["A-JUnit","A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":1},"java":{"insertions":144,"deletions":17}}},{"hash":"d91e7eb0b8a5a9b9de1fba24d65cdd997e724e6b","isMergeCommit":false,"messageTitle":"A-JAR","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":9,"deletions":0},"txt":{"insertions":0,"deletions":0},"md":{"insertions":6,"deletions":0}}},{"hash":"c2e24feaa801c6a6e7a86c7768c041bf68dc7338","isMergeCommit":false,"messageTitle":"A-JavaDoc","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":198,"deletions":44}}},{"hash":"ce7ddb378f06ee475ef19e6837f2c2089d399d18","isMergeCommit":true,"messageTitle":"Merge pull request #5 from AlagappanRa/branch-Level-9","messageBody":"A-JavaDoc","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"AlagappanRa":{"java":1122,"md":6,"fxml":0,"sh":0,"bat":4,"gradle":9,"txt":49}},"authorContributionVariance":{"AlagappanRa":59232.06},"authorDisplayNameMap":{"AlagappanRa":"CS2103T-T17-2 ALAG..THAN"}} +{"authorDailyContributionsMap":{"AlagappanRa":[{"date":"2023-08-23","commitResults":[{"hash":"7fb10af7792cf4e68ed90e7f365f0293d0060ee5","isMergeCommit":false,"messageTitle":"Tasks Completed: Level 0. Rename, Greet, Exit Level 1. Echo","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":40,"deletions":6}}},{"hash":"55bb0e8fbdac69a7ef3e855b62a33095a59aef5d","isMergeCommit":false,"messageTitle":"Tasks Completed: Level 0. Rename, Greet, Exit Level 1. Echo","messageBody":"","tags":["Level-2","Level-1","Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}}]},{"date":"2023-08-24","commitResults":[{"hash":"b9bf836ab351b116b8770729c09b860918dd362b","isMergeCommit":false,"messageTitle":"Level 3 [COMPLETED]","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":92,"deletions":4}}},{"hash":"8a6cffb0f189ec7156c21f9190e570439dc878b9","isMergeCommit":false,"messageTitle":"Level 4 [COMPLETED]","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":64,"deletions":12}}},{"hash":"3e4abeb46c93dd58331e88615b032ea43e36b52b","isMergeCommit":false,"messageTitle":"Level 5 [COMPLETED]","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":13,"deletions":0},"java":{"insertions":1,"deletions":1},"bat":{"insertions":4,"deletions":2}}},{"hash":"6554a1692679a3e2473c51b0cc9bb9b0b8ca7e0a","isMergeCommit":false,"messageTitle":"Level 5 [COMPLETED]","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":72,"deletions":16}}},{"hash":"9a6ee064fc4869aa1eb1309b3ea681ae39809d11","isMergeCommit":false,"messageTitle":"Level 6 [COMPLETED]","messageBody":"","tags":["Level-6","A-TextUiTesting","A-Enums"],"fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":0}}}]},{"date":"2023-08-30","commitResults":[{"hash":"b78e91bb85881351f7efd37d3c9aeae18184bbb0","isMergeCommit":false,"messageTitle":"Reformatted code to include additional enums","messageBody":"Reformatted code to include additional enums\n","fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":4},"java":{"insertions":92,"deletions":44}}}]},{"date":"2023-09-01","commitResults":[{"hash":"7d653c8e4dcd8cc9d1c0a2c416dc4f1bca27f9e0","isMergeCommit":false,"messageTitle":"Level-7","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":6,"deletions":1},"java":{"insertions":354,"deletions":65}}},{"hash":"972ff0eaf017fe07e7d5ef6843e77cdf52547bac","isMergeCommit":true,"messageTitle":"Merge pull request #1 from AlagappanRa/branch-Level-7","messageBody":"Level-7","tags":["Level-7"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-02","commitResults":[{"hash":"dd166e2480fb0ffe93d7787bcc9b5e2bb9e38c2b","isMergeCommit":false,"messageTitle":"Level-8","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":11,"deletions":1},"java":{"insertions":74,"deletions":14}}},{"hash":"df8683110ee52eb9c340f5132a4cc4164556e82e","isMergeCommit":true,"messageTitle":"Merge pull request #2 from AlagappanRa/branch-Level-8","messageBody":"Level-8","tags":["Level-8"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-08","commitResults":[{"hash":"df57125561feee8afbbdeaab22ead0b20abc0dac","isMergeCommit":false,"messageTitle":"A-MoreOOP \u0026 A-Packages","messageBody":"","tags":["A-Packages","A-MoreOOP"],"fileTypesAndContributionMap":{"txt":{"insertions":34,"deletions":14},"java":{"insertions":413,"deletions":216}}},{"hash":"55d188d0e9de4868af4c1c7dc9db6cb5cd850873","isMergeCommit":true,"messageTitle":"Merge pull request #3 from AlagappanRa/branch-Level-8","messageBody":"A-MoreOOP \u0026 A-Packages","fileTypesAndContributionMap":{}},{"hash":"96d8eed50b76957d84529aab6d03f6a7baa7febf","isMergeCommit":true,"messageTitle":"Merge pull request #4 from AlagappanRa/add-gradle-support","messageBody":"Add gradle support","fileTypesAndContributionMap":{}},{"hash":"3066f582d6726f62a50d41b3dec7c7d2714e053d","isMergeCommit":false,"messageTitle":"A-Gradle \u0026 A-JUnit","messageBody":"","tags":["A-JUnit","A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":1},"java":{"insertions":144,"deletions":17}}},{"hash":"d91e7eb0b8a5a9b9de1fba24d65cdd997e724e6b","isMergeCommit":false,"messageTitle":"A-JAR","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":9,"deletions":0},"txt":{"insertions":0,"deletions":0},"md":{"insertions":6,"deletions":0}}},{"hash":"c2e24feaa801c6a6e7a86c7768c041bf68dc7338","isMergeCommit":false,"messageTitle":"A-JavaDoc","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":198,"deletions":44}}},{"hash":"ce7ddb378f06ee475ef19e6837f2c2089d399d18","isMergeCommit":true,"messageTitle":"Merge pull request #5 from AlagappanRa/branch-Level-9","messageBody":"A-JavaDoc","fileTypesAndContributionMap":{}}]},{"date":"2023-09-10","commitResults":[{"hash":"5df267657a3bda5a5e994761c348b2d1cf9275e6","isMergeCommit":false,"messageTitle":"Add A-Coding Standard","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":11}}},{"hash":"628f7644f9b0ea8fbdf9cf0408c4b5957249808f","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-A-CodingStandard","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"73b6e965dc30d7e8018a98c82926e334add99bb4","isMergeCommit":true,"messageTitle":"Merge pull request #6 from AlagappanRa/branch-A-CodingStandard","messageBody":"Add A-Coding Standard","fileTypesAndContributionMap":{}},{"hash":"5fab754c79a42a4dbdeb44fa794c9561060cf2b4","isMergeCommit":false,"messageTitle":"Add find functionality","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":0},"java":{"insertions":51,"deletions":15}}},{"hash":"7ea7c564873228822174ea6944931674d0784e3c","isMergeCommit":true,"messageTitle":"Merge pull request #7 from AlagappanRa/branch-Level-9","messageBody":"Add find functionality","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"AlagappanRa":{"java":1158,"md":6,"fxml":0,"sh":0,"bat":4,"gradle":9,"txt":54}},"authorContributionVariance":{"AlagappanRa":54662.035},"authorDisplayNameMap":{"AlagappanRa":"CS2103T-T17-2 ALAG..THAN"}} diff --git a/AlfredBeNoel_ip_master/authorship.json b/AlfredBeNoel_ip_master/authorship.json index 3f371502..55d59a48 100644 --- a/AlfredBeNoel_ip_master/authorship.json +++ b/AlfredBeNoel_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"data/noel.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"AlfredBeNoel"},"content":"T | 1 | read","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"AlfredBeNoel"},"content":"E | 1 | ori | (from: 2033-04-04 06:00 to: 2020-04-04 06:00)","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"AlfredBeNoel"},"content":"D | 0 | read | 2023-04-03 06:00","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"AlfredBeNoel"},"content":"T | 0 | read","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"AlfredBeNoel":4}},{"path":"src/main/java/noel/Noel.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AlfredBeNoel"},"content":"package noel;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"AlfredBeNoel"},"content":"import noel.exceptions.NoelException;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"AlfredBeNoel"},"content":"import noel.helper.Parser;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"AlfredBeNoel"},"content":"import noel.helper.Storage;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"AlfredBeNoel"},"content":"import noel.helper.Tasklist;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"AlfredBeNoel"},"content":"import noel.helper.Ui;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"AlfredBeNoel"},"content":"public class Noel {","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"AlfredBeNoel"},"content":" static String HELLO_MSG \u003d \" Hello! I\u0027m Noel!\\nWhat can I do for you?\";","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"AlfredBeNoel"},"content":" static String BYE_MSG \u003d \" Bye. Hope to see you again soon!\";","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"AlfredBeNoel"},"content":" private final Ui ui;","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"AlfredBeNoel"},"content":" private Tasklist tasks;","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"AlfredBeNoel"},"content":" private final Parser parser;","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"AlfredBeNoel"},"content":" public Noel(String filePath) {","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"AlfredBeNoel"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"AlfredBeNoel"},"content":" Storage storage \u003d new Storage(filePath);","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"AlfredBeNoel"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"AlfredBeNoel"},"content":" tasks \u003d new Tasklist(storage.load());","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"AlfredBeNoel"},"content":" } catch (NoelException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"AlfredBeNoel"},"content":" ui.showLoadingError();","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"AlfredBeNoel"},"content":" tasks \u003d new Tasklist();","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"AlfredBeNoel"},"content":" } finally {","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"AlfredBeNoel"},"content":" storage.updateFile();","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"AlfredBeNoel"},"content":" parser \u003d new Parser(tasks, storage);","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"AlfredBeNoel"},"content":" public String chatHelper() {","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"AlfredBeNoel"},"content":" return this.ui.getNextLine();","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"AlfredBeNoel"},"content":" public static void printFunction(String message){","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"AlfredBeNoel"},"content":" String filler \u003d \"____________________________________________________________\";","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"AlfredBeNoel"},"content":" System.out.println(filler + \"\\n\" + message + \"\\n\" + filler);","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"AlfredBeNoel"},"content":" public void run() {","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"AlfredBeNoel"},"content":" printFunction(HELLO_MSG);","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"AlfredBeNoel"},"content":" String nextLine \u003d chatHelper();","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"AlfredBeNoel"},"content":" int commandOption \u003d parser.parseCommand(nextLine);","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"AlfredBeNoel"},"content":" while (commandOption !\u003d 1) {","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"AlfredBeNoel"},"content":" nextLine \u003d ui.getNextLine();","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"AlfredBeNoel"},"content":" commandOption \u003d parser.parseCommand(nextLine);","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"AlfredBeNoel"},"content":" printFunction(BYE_MSG);","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"AlfredBeNoel"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"AlfredBeNoel"},"content":" new Noel(\"./data/noel.txt\").run();","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"AlfredBeNoel"},"content":"}","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"AlfredBeNoel":55}},{"path":"src/main/java/noel/exceptions/NoelException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AlfredBeNoel"},"content":"package noel.exceptions;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"AlfredBeNoel"},"content":"public class NoelException extends Exception {","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"AlfredBeNoel"},"content":" public NoelException(String errorMsg) {","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"AlfredBeNoel"},"content":" super(errorMsg);","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"AlfredBeNoel"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"AlfredBeNoel":7}},{"path":"src/main/java/noel/helper/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AlfredBeNoel"},"content":"package noel.helper;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"AlfredBeNoel"},"content":"import noel.tasks.Task;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"AlfredBeNoel"},"content":"public class Parser {","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"AlfredBeNoel"},"content":" private final Tasklist tasks;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"AlfredBeNoel"},"content":" private final Storage storage;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"AlfredBeNoel"},"content":" public Parser(Tasklist tasks, Storage storage) {","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"AlfredBeNoel"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"AlfredBeNoel"},"content":" this.storage \u003d storage;","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"AlfredBeNoel"},"content":" public static void printFunction(String message){","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"AlfredBeNoel"},"content":" String filler \u003d \"____________________________________________________________\";","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"AlfredBeNoel"},"content":" System.out.println(filler + \"\\n\" + message + \"\\n\" + filler);","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"AlfredBeNoel"},"content":" public int parseCommand(String nextLine) {","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"AlfredBeNoel"},"content":" String command;","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"AlfredBeNoel"},"content":" if (nextLine.equals(\"bye\")) {","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"AlfredBeNoel"},"content":" return -1;","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"AlfredBeNoel"},"content":" } else if (nextLine.equals(\"list\")) {","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"AlfredBeNoel"},"content":" tasks.printTaskList();","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"AlfredBeNoel"},"content":" } else if (nextLine.contains(\" \")) {","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"AlfredBeNoel"},"content":" String[] result \u003d nextLine.split(\" \");","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"AlfredBeNoel"},"content":" command \u003d result[0];","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"AlfredBeNoel"},"content":" switch (command) {","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"AlfredBeNoel"},"content":" case \"mark\": {","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"AlfredBeNoel"},"content":" int taskNum \u003d Integer.parseInt(result[1]);","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"AlfredBeNoel"},"content":" taskNum \u003d taskNum - 1;","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"AlfredBeNoel"},"content":" tasks.markAsDone(taskNum);","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"AlfredBeNoel"},"content":" storage.writeToFile(tasks.getTaskAsList());","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"AlfredBeNoel"},"content":" break;","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"AlfredBeNoel"},"content":" case \"unmark\": {","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"AlfredBeNoel"},"content":" int taskNum \u003d Integer.parseInt(result[1]);","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"AlfredBeNoel"},"content":" tasks.unMark(taskNum);","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"AlfredBeNoel"},"content":" storage.writeToFile(tasks.getTaskAsList());","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"AlfredBeNoel"},"content":" break;","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"AlfredBeNoel"},"content":" case \"todo\":","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"AlfredBeNoel"},"content":" result \u003d nextLine.split(\"todo \");","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"AlfredBeNoel"},"content":" if (result.length \u003d\u003d 0) {","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"AlfredBeNoel"},"content":" System.out.println(\"OOPS!!! The description of a todo cannot be empty.\");","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"AlfredBeNoel"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"AlfredBeNoel"},"content":" tasks.addToDo(result[1]);","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"AlfredBeNoel"},"content":" storage.writeToFile(tasks.getTaskAsList());","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"AlfredBeNoel"},"content":" break;","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"AlfredBeNoel"},"content":" case \"deadline\":","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"AlfredBeNoel"},"content":" result \u003d nextLine.split(\"deadline \");","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"AlfredBeNoel"},"content":" if (result.length \u003d\u003d 0) {","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"AlfredBeNoel"},"content":" System.out.println(\"OOPS!!! The description of a deadline cannot be empty.\");","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"AlfredBeNoel"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"AlfredBeNoel"},"content":" String[] deadlineHelper \u003d result[1].split(\" /by \");","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"AlfredBeNoel"},"content":" if (deadlineHelper.length \u003d\u003d 2) {","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"AlfredBeNoel"},"content":" tasks.addDeadline(deadlineHelper[0], deadlineHelper[1]);","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"AlfredBeNoel"},"content":" storage.writeToFile(tasks.getTaskAsList());","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"AlfredBeNoel"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"AlfredBeNoel"},"content":" System.out.println(\"OOPS!!! Remember to add the date/description\");","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":69,"author":{"gitId":"AlfredBeNoel"},"content":" break;","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"AlfredBeNoel"},"content":" case \"event\":","lastModifiedDate":"2023-09-04"},{"lineNumber":72,"author":{"gitId":"AlfredBeNoel"},"content":" result \u003d nextLine.split(\"event \");","lastModifiedDate":"2023-09-04"},{"lineNumber":73,"author":{"gitId":"AlfredBeNoel"},"content":" if (result.length \u003d\u003d 0) {","lastModifiedDate":"2023-09-04"},{"lineNumber":74,"author":{"gitId":"AlfredBeNoel"},"content":" System.out.println(\"OOPS!!! The description of a event cannot be empty.\");","lastModifiedDate":"2023-09-04"},{"lineNumber":75,"author":{"gitId":"AlfredBeNoel"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":76,"author":{"gitId":"AlfredBeNoel"},"content":" String[] eventsHelper \u003d result[1].split(\" /from \");","lastModifiedDate":"2023-09-04"},{"lineNumber":77,"author":{"gitId":"AlfredBeNoel"},"content":" command \u003d eventsHelper[0];","lastModifiedDate":"2023-09-04"},{"lineNumber":78,"author":{"gitId":"AlfredBeNoel"},"content":" if (eventsHelper.length \u003d\u003d 2) {","lastModifiedDate":"2023-09-04"},{"lineNumber":79,"author":{"gitId":"AlfredBeNoel"},"content":" eventsHelper \u003d eventsHelper[1].split(\" /to \");","lastModifiedDate":"2023-09-04"},{"lineNumber":80,"author":{"gitId":"AlfredBeNoel"},"content":" if (eventsHelper.length \u003d\u003d 2) {","lastModifiedDate":"2023-09-04"},{"lineNumber":81,"author":{"gitId":"AlfredBeNoel"},"content":" tasks.addEvent(command, eventsHelper[0], eventsHelper[1]);","lastModifiedDate":"2023-09-04"},{"lineNumber":82,"author":{"gitId":"AlfredBeNoel"},"content":" storage.writeToFile(tasks.getTaskAsList());","lastModifiedDate":"2023-09-04"},{"lineNumber":83,"author":{"gitId":"AlfredBeNoel"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":84,"author":{"gitId":"AlfredBeNoel"},"content":" System.out.println(\"Insufficient commands provided!\");","lastModifiedDate":"2023-09-04"},{"lineNumber":85,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":86,"author":{"gitId":"AlfredBeNoel"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":87,"author":{"gitId":"AlfredBeNoel"},"content":" System.out.println(\"Insufficient commands provided!\");","lastModifiedDate":"2023-09-04"},{"lineNumber":88,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":89,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":90,"author":{"gitId":"AlfredBeNoel"},"content":" break;","lastModifiedDate":"2023-09-04"},{"lineNumber":91,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":92,"author":{"gitId":"AlfredBeNoel"},"content":" case \"delete\":","lastModifiedDate":"2023-09-04"},{"lineNumber":93,"author":{"gitId":"AlfredBeNoel"},"content":" result \u003d nextLine.split(\"delete \");","lastModifiedDate":"2023-09-04"},{"lineNumber":94,"author":{"gitId":"AlfredBeNoel"},"content":" if (result.length \u003d\u003d 0) {","lastModifiedDate":"2023-09-04"},{"lineNumber":95,"author":{"gitId":"AlfredBeNoel"},"content":" System.out.println(\"OOPS!!! The description of a delete cannot be empty.\");","lastModifiedDate":"2023-09-04"},{"lineNumber":96,"author":{"gitId":"AlfredBeNoel"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":97,"author":{"gitId":"AlfredBeNoel"},"content":" int intToRemove \u003d Integer.parseInt(result[1]) - 1;","lastModifiedDate":"2023-09-04"},{"lineNumber":98,"author":{"gitId":"AlfredBeNoel"},"content":" Task taskToDel \u003d tasks.get(intToRemove);","lastModifiedDate":"2023-09-04"},{"lineNumber":99,"author":{"gitId":"AlfredBeNoel"},"content":" tasks.remove(intToRemove);","lastModifiedDate":"2023-09-04"},{"lineNumber":100,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":101,"author":{"gitId":"AlfredBeNoel"},"content":" String delStart \u003d \"Noted. I\u0027ve removed this task:\\n\";","lastModifiedDate":"2023-09-04"},{"lineNumber":102,"author":{"gitId":"AlfredBeNoel"},"content":" String delEnd \u003d \"Now you have \" + tasks.size() + \" tasks in the list.\";","lastModifiedDate":"2023-09-04"},{"lineNumber":103,"author":{"gitId":"AlfredBeNoel"},"content":" printFunction(delStart + taskToDel + \"\\n\" + delEnd);","lastModifiedDate":"2023-09-04"},{"lineNumber":104,"author":{"gitId":"AlfredBeNoel"},"content":" storage.writeToFile(tasks.getTaskAsList());","lastModifiedDate":"2023-09-04"},{"lineNumber":105,"author":{"gitId":"AlfredBeNoel"},"content":" break;","lastModifiedDate":"2023-09-04"},{"lineNumber":106,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":107,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":108,"author":{"gitId":"AlfredBeNoel"},"content":" default:","lastModifiedDate":"2023-09-04"},{"lineNumber":109,"author":{"gitId":"AlfredBeNoel"},"content":" System.out.println(\"Invalid Option!\");","lastModifiedDate":"2023-09-04"},{"lineNumber":110,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":111,"author":{"gitId":"AlfredBeNoel"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":112,"author":{"gitId":"AlfredBeNoel"},"content":" System.out.println(\"Invalid Option!\");","lastModifiedDate":"2023-09-04"},{"lineNumber":113,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":114,"author":{"gitId":"AlfredBeNoel"},"content":" return 0;","lastModifiedDate":"2023-09-04"},{"lineNumber":115,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":116,"author":{"gitId":"AlfredBeNoel"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"AlfredBeNoel":116}},{"path":"src/main/java/noel/helper/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AlfredBeNoel"},"content":"package noel.helper;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"AlfredBeNoel"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"AlfredBeNoel"},"content":"import java.nio.file.Files;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"AlfredBeNoel"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"AlfredBeNoel"},"content":"import java.nio.file.Paths;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"AlfredBeNoel"},"content":"import java.util.List;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"AlfredBeNoel"},"content":"public class Storage {","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"AlfredBeNoel"},"content":" private final String filePath;","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"AlfredBeNoel"},"content":" protected boolean hasFileUpdated;","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"AlfredBeNoel"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"AlfredBeNoel"},"content":" hasFileUpdated \u003d false;","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"AlfredBeNoel"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"AlfredBeNoel"},"content":" public String load() {","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"AlfredBeNoel"},"content":" return checkFile();","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"AlfredBeNoel"},"content":" public void updateFile() {","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"AlfredBeNoel"},"content":" this.hasFileUpdated \u003d true;","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"AlfredBeNoel"},"content":" public String checkFile() {","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"AlfredBeNoel"},"content":" Path filePath \u003d Paths.get(this.filePath);","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"AlfredBeNoel"},"content":" if (Files.exists(filePath)) {","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"AlfredBeNoel"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"AlfredBeNoel"},"content":" return new String(Files.readAllBytes(filePath));","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"AlfredBeNoel"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"AlfredBeNoel"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"AlfredBeNoel"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"AlfredBeNoel"},"content":" hasFileUpdated \u003d true;","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"AlfredBeNoel"},"content":" System.out.println(\"File does not exist\");","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"AlfredBeNoel"},"content":" System.out.println(\"Creating file now!\");","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"AlfredBeNoel"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"AlfredBeNoel"},"content":" Files.createDirectories(filePath.getParent());","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"AlfredBeNoel"},"content":" Files.createFile(filePath);","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"AlfredBeNoel"},"content":" System.out.println(\"File and Directories created!\");","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"AlfredBeNoel"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"AlfredBeNoel"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"AlfredBeNoel"},"content":" return null;","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"AlfredBeNoel"},"content":" public void writeToFile(List\u003cString\u003e task) {","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"AlfredBeNoel"},"content":" if (hasFileUpdated) {","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"AlfredBeNoel"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"AlfredBeNoel"},"content":" Files.write(Paths.get(filePath), task);","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"AlfredBeNoel"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"AlfredBeNoel"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"AlfredBeNoel"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"AlfredBeNoel":60}},{"path":"src/main/java/noel/helper/Tasklist.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AlfredBeNoel"},"content":"package noel.helper;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"AlfredBeNoel"},"content":"import noel.exceptions.NoelException;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"AlfredBeNoel"},"content":"import noel.tasks.Deadlines;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"AlfredBeNoel"},"content":"import noel.tasks.Events;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"AlfredBeNoel"},"content":"import noel.tasks.Task;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"AlfredBeNoel"},"content":"import noel.tasks.ToDos;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"AlfredBeNoel"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"AlfredBeNoel"},"content":"import java.time.LocalTime;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"AlfredBeNoel"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"AlfredBeNoel"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"AlfredBeNoel"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"AlfredBeNoel"},"content":"import java.util.Arrays;","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"AlfredBeNoel"},"content":"import java.util.List;","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"AlfredBeNoel"},"content":"import java.util.Objects;","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"AlfredBeNoel"},"content":"public class Tasklist {","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"AlfredBeNoel"},"content":" private final ArrayList\u003cTask\u003e taskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"AlfredBeNoel"},"content":" static String addedMessageStart \u003d \"Got it. I\u0027ve added this task:\";","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"AlfredBeNoel"},"content":" public Tasklist(String listOfTasks) throws NoelException {","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"AlfredBeNoel"},"content":" if (listOfTasks \u003d\u003d null) {","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"AlfredBeNoel"},"content":" throw new NoelException(\"No content in file!\");","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"AlfredBeNoel"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"AlfredBeNoel"},"content":" taskList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"AlfredBeNoel"},"content":" updateTaskList(listOfTasks);","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"AlfredBeNoel"},"content":" public Tasklist() {","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"AlfredBeNoel"},"content":" taskList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"AlfredBeNoel"},"content":" public boolean checkFull() {","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"AlfredBeNoel"},"content":" int maxSize \u003d 100;","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"AlfredBeNoel"},"content":" return taskList.size() \u003d\u003d maxSize;","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"AlfredBeNoel"},"content":" public boolean checkEmpty() {","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"AlfredBeNoel"},"content":" return taskList.size() \u003d\u003d 0;","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"AlfredBeNoel"},"content":" public void updateTaskList(String content) {","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"AlfredBeNoel"},"content":" String[] listOfStrings \u003d content.split(\"\\n\");","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"AlfredBeNoel"},"content":" System.out.println(Arrays.toString(listOfStrings));","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"AlfredBeNoel"},"content":" for (String line : listOfStrings) {","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"AlfredBeNoel"},"content":" String[] values \u003d line.split(\" \\\\| \");","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"AlfredBeNoel"},"content":" if (values.length !\u003d 1) {","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"AlfredBeNoel"},"content":" if (Objects.equals(values[0], \"E\")) {","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"AlfredBeNoel"},"content":" if (values.length \u003d\u003d 4) {","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"AlfredBeNoel"},"content":" // (from: 02 02 2023 06:00 to: 03 02 2023 06:00)","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"AlfredBeNoel"},"content":" String[] dates \u003d values[3].split(\"to:\");","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"AlfredBeNoel"},"content":" String[] startDateArray \u003d dates[0].split(\"\\\\(from: \")[1].split(\" \");","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"AlfredBeNoel"},"content":" String startDate \u003d startDateArray[0] + \" \" + startDateArray[1];","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"AlfredBeNoel"},"content":" String[] endDateArray \u003d dates[1].split(\"\\\\)\")[0].split(\" \");","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"AlfredBeNoel"},"content":" String endDate \u003d endDateArray[1] + \" \" + endDateArray[2];","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"AlfredBeNoel"},"content":" if (dates.length \u003d\u003d 2) {","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"AlfredBeNoel"},"content":" addEvent(values[2], startDate, endDate);","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"AlfredBeNoel"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"AlfredBeNoel"},"content":" System.out.println(\"Invalid line! Skipping line...\");","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"AlfredBeNoel"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":69,"author":{"gitId":"AlfredBeNoel"},"content":" System.out.println(\"Invalid line! Skipping line...\");","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":72,"author":{"gitId":"AlfredBeNoel"},"content":" } else if (Objects.equals(values[0], \"T\")) {","lastModifiedDate":"2023-09-04"},{"lineNumber":73,"author":{"gitId":"AlfredBeNoel"},"content":" if (values.length \u003d\u003d 3) {","lastModifiedDate":"2023-09-04"},{"lineNumber":74,"author":{"gitId":"AlfredBeNoel"},"content":" addToDo(values[2]);","lastModifiedDate":"2023-09-04"},{"lineNumber":75,"author":{"gitId":"AlfredBeNoel"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":76,"author":{"gitId":"AlfredBeNoel"},"content":" System.out.println(\"Invalid line! Skipping line...\");","lastModifiedDate":"2023-09-04"},{"lineNumber":77,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":78,"author":{"gitId":"AlfredBeNoel"},"content":" } else if (Objects.equals(values[0], \"D\")) {","lastModifiedDate":"2023-09-04"},{"lineNumber":79,"author":{"gitId":"AlfredBeNoel"},"content":" if (values.length \u003d\u003d 4) {","lastModifiedDate":"2023-09-04"},{"lineNumber":80,"author":{"gitId":"AlfredBeNoel"},"content":" addDeadline(values[2], values[3]);","lastModifiedDate":"2023-09-04"},{"lineNumber":81,"author":{"gitId":"AlfredBeNoel"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":82,"author":{"gitId":"AlfredBeNoel"},"content":" System.out.println(\"Invalid line! Skipping line...\");","lastModifiedDate":"2023-09-04"},{"lineNumber":83,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":84,"author":{"gitId":"AlfredBeNoel"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":85,"author":{"gitId":"AlfredBeNoel"},"content":" System.out.println(\"Invalid line! Skipping line...\");","lastModifiedDate":"2023-09-04"},{"lineNumber":86,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":87,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":88,"author":{"gitId":"AlfredBeNoel"},"content":" if (Objects.equals(values[1], \"1\")) {","lastModifiedDate":"2023-09-04"},{"lineNumber":89,"author":{"gitId":"AlfredBeNoel"},"content":" this.taskList.get(this.taskList.size() - 1).markAsDone();","lastModifiedDate":"2023-09-04"},{"lineNumber":90,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":91,"author":{"gitId":"AlfredBeNoel"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":92,"author":{"gitId":"AlfredBeNoel"},"content":" System.out.println(\"No value in file\");","lastModifiedDate":"2023-09-04"},{"lineNumber":93,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":94,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":95,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":96,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":97,"author":{"gitId":"AlfredBeNoel"},"content":" public LocalDate dateFormat(String endDate) {","lastModifiedDate":"2023-09-04"},{"lineNumber":98,"author":{"gitId":"AlfredBeNoel"},"content":" LocalDate date;","lastModifiedDate":"2023-09-04"},{"lineNumber":99,"author":{"gitId":"AlfredBeNoel"},"content":" System.out.println(endDate);","lastModifiedDate":"2023-09-04"},{"lineNumber":100,"author":{"gitId":"AlfredBeNoel"},"content":" DateTimeFormatter formatter1 \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\");","lastModifiedDate":"2023-09-04"},{"lineNumber":101,"author":{"gitId":"AlfredBeNoel"},"content":" DateTimeFormatter formatter2 \u003d DateTimeFormatter.ofPattern(\"dd/MM/yyyy HH:mm\");","lastModifiedDate":"2023-09-04"},{"lineNumber":102,"author":{"gitId":"AlfredBeNoel"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":103,"author":{"gitId":"AlfredBeNoel"},"content":" date \u003d LocalDate.parse(endDate, formatter1);","lastModifiedDate":"2023-09-04"},{"lineNumber":104,"author":{"gitId":"AlfredBeNoel"},"content":" return date;","lastModifiedDate":"2023-09-04"},{"lineNumber":105,"author":{"gitId":"AlfredBeNoel"},"content":" } catch (DateTimeParseException e1) {","lastModifiedDate":"2023-09-04"},{"lineNumber":106,"author":{"gitId":"AlfredBeNoel"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":107,"author":{"gitId":"AlfredBeNoel"},"content":" date \u003d LocalDate.parse(endDate, formatter2);","lastModifiedDate":"2023-09-04"},{"lineNumber":108,"author":{"gitId":"AlfredBeNoel"},"content":" return date;","lastModifiedDate":"2023-09-04"},{"lineNumber":109,"author":{"gitId":"AlfredBeNoel"},"content":" } catch (DateTimeParseException e2) {","lastModifiedDate":"2023-09-04"},{"lineNumber":110,"author":{"gitId":"AlfredBeNoel"},"content":" System.out.println(\"Invalid date format\");","lastModifiedDate":"2023-09-04"},{"lineNumber":111,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":112,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":113,"author":{"gitId":"AlfredBeNoel"},"content":" return null;","lastModifiedDate":"2023-09-04"},{"lineNumber":114,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":115,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":116,"author":{"gitId":"AlfredBeNoel"},"content":" public LocalTime timeFormat(String date) {","lastModifiedDate":"2023-09-04"},{"lineNumber":117,"author":{"gitId":"AlfredBeNoel"},"content":" LocalTime time \u003d null;","lastModifiedDate":"2023-09-04"},{"lineNumber":118,"author":{"gitId":"AlfredBeNoel"},"content":" DateTimeFormatter formatter1 \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\");","lastModifiedDate":"2023-09-04"},{"lineNumber":119,"author":{"gitId":"AlfredBeNoel"},"content":" DateTimeFormatter formatter2 \u003d DateTimeFormatter.ofPattern(\"dd/MM/yyyy HH:mm\");","lastModifiedDate":"2023-09-04"},{"lineNumber":120,"author":{"gitId":"AlfredBeNoel"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":121,"author":{"gitId":"AlfredBeNoel"},"content":" time \u003d LocalTime.parse(date, formatter1);","lastModifiedDate":"2023-09-04"},{"lineNumber":122,"author":{"gitId":"AlfredBeNoel"},"content":" } catch (DateTimeParseException e1) {","lastModifiedDate":"2023-09-04"},{"lineNumber":123,"author":{"gitId":"AlfredBeNoel"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":124,"author":{"gitId":"AlfredBeNoel"},"content":" time \u003d LocalTime.parse(date, formatter2);","lastModifiedDate":"2023-09-04"},{"lineNumber":125,"author":{"gitId":"AlfredBeNoel"},"content":" } catch (DateTimeParseException e2) {","lastModifiedDate":"2023-09-04"},{"lineNumber":126,"author":{"gitId":"AlfredBeNoel"},"content":" System.out.println(\"Invalid Time Format\");","lastModifiedDate":"2023-09-04"},{"lineNumber":127,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":128,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":129,"author":{"gitId":"AlfredBeNoel"},"content":" return time;","lastModifiedDate":"2023-09-04"},{"lineNumber":130,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":131,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":132,"author":{"gitId":"AlfredBeNoel"},"content":" public static void printFunction(String message){","lastModifiedDate":"2023-09-04"},{"lineNumber":133,"author":{"gitId":"AlfredBeNoel"},"content":" String filler \u003d \"____________________________________________________________\";","lastModifiedDate":"2023-09-04"},{"lineNumber":134,"author":{"gitId":"AlfredBeNoel"},"content":" System.out.println(filler + \"\\n\" + message + \"\\n\" + filler);","lastModifiedDate":"2023-09-04"},{"lineNumber":135,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":136,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":137,"author":{"gitId":"AlfredBeNoel"},"content":" public void addEvent(String task, String startDate, String endDate) {","lastModifiedDate":"2023-09-04"},{"lineNumber":138,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":139,"author":{"gitId":"AlfredBeNoel"},"content":" LocalDate startDateFormat \u003d dateFormat(startDate);","lastModifiedDate":"2023-09-04"},{"lineNumber":140,"author":{"gitId":"AlfredBeNoel"},"content":" LocalDate endDateFormat \u003d dateFormat(endDate);","lastModifiedDate":"2023-09-04"},{"lineNumber":141,"author":{"gitId":"AlfredBeNoel"},"content":" LocalTime startTimeFormat \u003d timeFormat(startDate);","lastModifiedDate":"2023-09-04"},{"lineNumber":142,"author":{"gitId":"AlfredBeNoel"},"content":" LocalTime endTimeFormat \u003d timeFormat(endDate);","lastModifiedDate":"2023-09-04"},{"lineNumber":143,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":144,"author":{"gitId":"AlfredBeNoel"},"content":" if (startDateFormat \u003d\u003d null || endDateFormat \u003d\u003d null) {","lastModifiedDate":"2023-09-04"},{"lineNumber":145,"author":{"gitId":"AlfredBeNoel"},"content":" System.out.println(\"Invalid format for start/end date!\");","lastModifiedDate":"2023-09-04"},{"lineNumber":146,"author":{"gitId":"AlfredBeNoel"},"content":" return;","lastModifiedDate":"2023-09-04"},{"lineNumber":147,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":148,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":149,"author":{"gitId":"AlfredBeNoel"},"content":" if (startTimeFormat \u003d\u003d null || endTimeFormat \u003d\u003d null) {","lastModifiedDate":"2023-09-04"},{"lineNumber":150,"author":{"gitId":"AlfredBeNoel"},"content":" System.out.println(\"Invalid format for start/end time!\");","lastModifiedDate":"2023-09-04"},{"lineNumber":151,"author":{"gitId":"AlfredBeNoel"},"content":" return;","lastModifiedDate":"2023-09-04"},{"lineNumber":152,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":153,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":154,"author":{"gitId":"AlfredBeNoel"},"content":" Task taskToAdd \u003d new Events(task, startDateFormat, startTimeFormat, endDateFormat, endTimeFormat);","lastModifiedDate":"2023-09-04"},{"lineNumber":155,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":156,"author":{"gitId":"AlfredBeNoel"},"content":" if (checkFull()) {","lastModifiedDate":"2023-09-04"},{"lineNumber":157,"author":{"gitId":"AlfredBeNoel"},"content":" System.out.println(\"Array is full!\");","lastModifiedDate":"2023-09-04"},{"lineNumber":158,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":159,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":160,"author":{"gitId":"AlfredBeNoel"},"content":" taskList.add(taskToAdd);","lastModifiedDate":"2023-09-04"},{"lineNumber":161,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":162,"author":{"gitId":"AlfredBeNoel"},"content":" String addedMessageEnd \u003d \"Now you have \" + taskList.size() + \" tasks in the list.\";","lastModifiedDate":"2023-09-04"},{"lineNumber":163,"author":{"gitId":"AlfredBeNoel"},"content":" String updateAdd \u003d addedMessageStart + \"\\n\" + taskToAdd + \"\\n\" + addedMessageEnd;","lastModifiedDate":"2023-09-04"},{"lineNumber":164,"author":{"gitId":"AlfredBeNoel"},"content":" printFunction(updateAdd);","lastModifiedDate":"2023-09-04"},{"lineNumber":165,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":166,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":167,"author":{"gitId":"AlfredBeNoel"},"content":" public void addDeadline(String task, String endDate) {","lastModifiedDate":"2023-09-04"},{"lineNumber":168,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":169,"author":{"gitId":"AlfredBeNoel"},"content":" LocalDate date \u003d dateFormat(endDate);","lastModifiedDate":"2023-09-04"},{"lineNumber":170,"author":{"gitId":"AlfredBeNoel"},"content":" if (date \u003d\u003d null) {","lastModifiedDate":"2023-09-04"},{"lineNumber":171,"author":{"gitId":"AlfredBeNoel"},"content":" System.out.println(\"Invalid date!\");","lastModifiedDate":"2023-09-04"},{"lineNumber":172,"author":{"gitId":"AlfredBeNoel"},"content":" return;","lastModifiedDate":"2023-09-04"},{"lineNumber":173,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":174,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":175,"author":{"gitId":"AlfredBeNoel"},"content":" LocalTime time \u003d timeFormat(endDate);","lastModifiedDate":"2023-09-04"},{"lineNumber":176,"author":{"gitId":"AlfredBeNoel"},"content":" if (time \u003d\u003d null) {","lastModifiedDate":"2023-09-04"},{"lineNumber":177,"author":{"gitId":"AlfredBeNoel"},"content":" System.out.println(\"Invalid date!\");","lastModifiedDate":"2023-09-04"},{"lineNumber":178,"author":{"gitId":"AlfredBeNoel"},"content":" return;","lastModifiedDate":"2023-09-04"},{"lineNumber":179,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":180,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":181,"author":{"gitId":"AlfredBeNoel"},"content":" Task taskToAdd \u003d new Deadlines(task, date, time);","lastModifiedDate":"2023-09-04"},{"lineNumber":182,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":183,"author":{"gitId":"AlfredBeNoel"},"content":" if (checkFull()) {","lastModifiedDate":"2023-09-04"},{"lineNumber":184,"author":{"gitId":"AlfredBeNoel"},"content":" System.out.println(\"Array is full!\");","lastModifiedDate":"2023-09-04"},{"lineNumber":185,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":186,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":187,"author":{"gitId":"AlfredBeNoel"},"content":" taskList.add(taskToAdd);","lastModifiedDate":"2023-09-04"},{"lineNumber":188,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":189,"author":{"gitId":"AlfredBeNoel"},"content":" String addedMessageEnd \u003d \"Now you have \" + taskList.size() + \" tasks in the list.\";","lastModifiedDate":"2023-09-04"},{"lineNumber":190,"author":{"gitId":"AlfredBeNoel"},"content":" String updateAdd \u003d addedMessageStart + \"\\n\" + taskToAdd + \"\\n\" + addedMessageEnd;","lastModifiedDate":"2023-09-04"},{"lineNumber":191,"author":{"gitId":"AlfredBeNoel"},"content":" printFunction(updateAdd);","lastModifiedDate":"2023-09-04"},{"lineNumber":192,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":193,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":194,"author":{"gitId":"AlfredBeNoel"},"content":" public void addToDo(String task) {","lastModifiedDate":"2023-09-04"},{"lineNumber":195,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":196,"author":{"gitId":"AlfredBeNoel"},"content":" Task taskToAdd \u003d new ToDos(task);","lastModifiedDate":"2023-09-04"},{"lineNumber":197,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":198,"author":{"gitId":"AlfredBeNoel"},"content":" if (checkFull()) {","lastModifiedDate":"2023-09-04"},{"lineNumber":199,"author":{"gitId":"AlfredBeNoel"},"content":" System.out.println(\"Array is full!\");","lastModifiedDate":"2023-09-04"},{"lineNumber":200,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":201,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":202,"author":{"gitId":"AlfredBeNoel"},"content":" taskList.add(taskToAdd);","lastModifiedDate":"2023-09-04"},{"lineNumber":203,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":204,"author":{"gitId":"AlfredBeNoel"},"content":" String addedMessageEnd \u003d \"Now you have \" + taskList.size() + \" tasks in the list.\";","lastModifiedDate":"2023-09-04"},{"lineNumber":205,"author":{"gitId":"AlfredBeNoel"},"content":" String updateAdd \u003d addedMessageStart + \"\\n\" + taskToAdd + \"\\n\" + addedMessageEnd;","lastModifiedDate":"2023-09-04"},{"lineNumber":206,"author":{"gitId":"AlfredBeNoel"},"content":" printFunction(updateAdd);","lastModifiedDate":"2023-09-04"},{"lineNumber":207,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":208,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":209,"author":{"gitId":"AlfredBeNoel"},"content":" public void printTaskList(){","lastModifiedDate":"2023-09-04"},{"lineNumber":210,"author":{"gitId":"AlfredBeNoel"},"content":" if (checkEmpty()) {","lastModifiedDate":"2023-09-04"},{"lineNumber":211,"author":{"gitId":"AlfredBeNoel"},"content":" System.out.println(\"List is empty!\");","lastModifiedDate":"2023-09-04"},{"lineNumber":212,"author":{"gitId":"AlfredBeNoel"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":213,"author":{"gitId":"AlfredBeNoel"},"content":" String filler \u003d \"____________________________________________________________\";","lastModifiedDate":"2023-09-04"},{"lineNumber":214,"author":{"gitId":"AlfredBeNoel"},"content":" System.out.println(filler);","lastModifiedDate":"2023-09-04"},{"lineNumber":215,"author":{"gitId":"AlfredBeNoel"},"content":" int maxLength \u003d taskList.size();","lastModifiedDate":"2023-09-04"},{"lineNumber":216,"author":{"gitId":"AlfredBeNoel"},"content":" for (int i \u003d 0; i \u003c maxLength; i++) {","lastModifiedDate":"2023-09-04"},{"lineNumber":217,"author":{"gitId":"AlfredBeNoel"},"content":" System.out.println(i + 1 + \". \" + taskList.get(i));","lastModifiedDate":"2023-09-04"},{"lineNumber":218,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":219,"author":{"gitId":"AlfredBeNoel"},"content":" System.out.println(filler);","lastModifiedDate":"2023-09-04"},{"lineNumber":220,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":221,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":222,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":223,"author":{"gitId":"AlfredBeNoel"},"content":" public List\u003cString\u003e getTaskAsList() {","lastModifiedDate":"2023-09-04"},{"lineNumber":224,"author":{"gitId":"AlfredBeNoel"},"content":" List\u003cString\u003e linesToAppend \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-04"},{"lineNumber":225,"author":{"gitId":"AlfredBeNoel"},"content":" for (Task t:taskList) {","lastModifiedDate":"2023-09-04"},{"lineNumber":226,"author":{"gitId":"AlfredBeNoel"},"content":" linesToAppend.add(t.toFileString());","lastModifiedDate":"2023-09-04"},{"lineNumber":227,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":228,"author":{"gitId":"AlfredBeNoel"},"content":" return linesToAppend.subList(0, linesToAppend.size());","lastModifiedDate":"2023-09-04"},{"lineNumber":229,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":230,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":231,"author":{"gitId":"AlfredBeNoel"},"content":" public void markAsDone(int index) {","lastModifiedDate":"2023-09-04"},{"lineNumber":232,"author":{"gitId":"AlfredBeNoel"},"content":" taskList.get(index).markAsDone();","lastModifiedDate":"2023-09-04"},{"lineNumber":233,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":234,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":235,"author":{"gitId":"AlfredBeNoel"},"content":" public void unMark(int index) {","lastModifiedDate":"2023-09-04"},{"lineNumber":236,"author":{"gitId":"AlfredBeNoel"},"content":" taskList.get(index).unMark();","lastModifiedDate":"2023-09-04"},{"lineNumber":237,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":238,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":239,"author":{"gitId":"AlfredBeNoel"},"content":" public void remove(int index) {","lastModifiedDate":"2023-09-04"},{"lineNumber":240,"author":{"gitId":"AlfredBeNoel"},"content":" taskList.remove(index);","lastModifiedDate":"2023-09-04"},{"lineNumber":241,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":242,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":243,"author":{"gitId":"AlfredBeNoel"},"content":" public int size() {","lastModifiedDate":"2023-09-04"},{"lineNumber":244,"author":{"gitId":"AlfredBeNoel"},"content":" return taskList.size();","lastModifiedDate":"2023-09-04"},{"lineNumber":245,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":246,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":247,"author":{"gitId":"AlfredBeNoel"},"content":" public Task get(int index) {","lastModifiedDate":"2023-09-04"},{"lineNumber":248,"author":{"gitId":"AlfredBeNoel"},"content":" return taskList.get(index);","lastModifiedDate":"2023-09-04"},{"lineNumber":249,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":250,"author":{"gitId":"AlfredBeNoel"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"AlfredBeNoel":250}},{"path":"src/main/java/noel/helper/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AlfredBeNoel"},"content":"package noel.helper;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"AlfredBeNoel"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"AlfredBeNoel"},"content":"public class Ui {","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"AlfredBeNoel"},"content":" Scanner input;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"AlfredBeNoel"},"content":" public Ui() {","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"AlfredBeNoel"},"content":" this.input \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"AlfredBeNoel"},"content":" public String getNextLine() {","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"AlfredBeNoel"},"content":" return this.input.nextLine();","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"AlfredBeNoel"},"content":" public void showLoadingError() {","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"AlfredBeNoel"},"content":" System.out.println(\"Error reading file!\");","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"AlfredBeNoel"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"AlfredBeNoel":21}},{"path":"src/main/java/noel/tasks/Deadlines.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AlfredBeNoel"},"content":"package noel.tasks;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"AlfredBeNoel"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"AlfredBeNoel"},"content":"import java.time.LocalTime;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"AlfredBeNoel"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"AlfredBeNoel"},"content":"public class Deadlines extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"AlfredBeNoel"},"content":" final String taskChar \u003d \"[D]\";","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"AlfredBeNoel"},"content":" protected LocalDate dueDate;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"AlfredBeNoel"},"content":" protected LocalTime dueTime;","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"AlfredBeNoel"},"content":" public Deadlines(String taskName, LocalDate deadlineDate, LocalTime deadlineTime) {","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"AlfredBeNoel"},"content":" super(taskName);","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"AlfredBeNoel"},"content":" this.dueDate \u003d deadlineDate;","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"AlfredBeNoel"},"content":" this.dueTime \u003d deadlineTime;","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"AlfredBeNoel"},"content":" public String formatDate() {","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"AlfredBeNoel"},"content":" return this.dueDate.format(DateTimeFormatter.ofPattern(\"yyyy-MM-dd\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"AlfredBeNoel"},"content":" public String formatTime() {","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"AlfredBeNoel"},"content":" return this.dueTime.format(DateTimeFormatter.ofPattern(\"HH:mm\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"AlfredBeNoel"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"AlfredBeNoel"},"content":" public String toFileString() {","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"AlfredBeNoel"},"content":" String taskDetails \u003d super.getTaskName() + \" | \" + formatDate() + \" \" + formatTime();","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"AlfredBeNoel"},"content":" return \"D | \" + super.getStatusNumber() + \" | \" + taskDetails;","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"AlfredBeNoel"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"AlfredBeNoel"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"AlfredBeNoel"},"content":" return taskChar + super.toString() + \" (by: \" + formatDate() + \" \" + formatTime() + \")\";","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"AlfredBeNoel"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"AlfredBeNoel":37}},{"path":"src/main/java/noel/tasks/Events.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AlfredBeNoel"},"content":"package noel.tasks;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"AlfredBeNoel"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"AlfredBeNoel"},"content":"import java.time.LocalTime;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"AlfredBeNoel"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"AlfredBeNoel"},"content":"public class Events extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"AlfredBeNoel"},"content":" final String taskChar \u003d \"[E]\";","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"AlfredBeNoel"},"content":" protected LocalDate startDate;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"AlfredBeNoel"},"content":" protected LocalTime startTime;","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"AlfredBeNoel"},"content":" protected LocalDate endDate;","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"AlfredBeNoel"},"content":" protected LocalTime endTime;","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"AlfredBeNoel"},"content":" protected String dateString \u003d \"\";","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"AlfredBeNoel"},"content":" public Events(String taskName, LocalDate startDate, LocalTime startTime, LocalDate endDate, LocalTime endTime) {","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"AlfredBeNoel"},"content":" super(taskName);","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"AlfredBeNoel"},"content":" setDates(startDate, startTime, endDate, endTime);","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"AlfredBeNoel"},"content":" public String formatDate(LocalDate date) {","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"AlfredBeNoel"},"content":" return date.format(DateTimeFormatter.ofPattern(\"yyyy-MM-dd\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"AlfredBeNoel"},"content":" public String formatTime(LocalTime time) {","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"AlfredBeNoel"},"content":" return time.format(DateTimeFormatter.ofPattern(\"HH:mm\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"AlfredBeNoel"},"content":" public void setDates(LocalDate start, LocalTime startTime, LocalDate end, LocalTime endTime) {","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"AlfredBeNoel"},"content":" this.startDate \u003d start;","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"AlfredBeNoel"},"content":" this.endDate \u003d end;","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"AlfredBeNoel"},"content":" this.startTime \u003d startTime;","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"AlfredBeNoel"},"content":" this.endTime \u003d endTime;","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"AlfredBeNoel"},"content":" String startDateTime \u003d formatDate(this.startDate) + \" \" + formatTime(this.startTime);","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"AlfredBeNoel"},"content":" String endDateTime \u003d formatDate(this.endDate) + \" \" + formatTime(this.endTime);","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"AlfredBeNoel"},"content":" this.dateString \u003d \" (from: \" + startDateTime + \" to: \" + endDateTime + \")\";","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"AlfredBeNoel"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"AlfredBeNoel"},"content":" public String toFileString() {","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"AlfredBeNoel"},"content":" return \"E | \" + super.getStatusNumber() + \" | \" + this.taskName + \" | \" + this.dateString;","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"AlfredBeNoel"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":45,"author":{"gitId":"AlfredBeNoel"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":46,"author":{"gitId":"AlfredBeNoel"},"content":" return taskChar + super.toString() + this.dateString;","lastModifiedDate":"2023-08-24"},{"lineNumber":47,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":48,"author":{"gitId":"AlfredBeNoel"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"AlfredBeNoel":48}},{"path":"src/main/java/noel/tasks/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AlfredBeNoel"},"content":"package noel.tasks;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"AlfredBeNoel"},"content":"public class Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"AlfredBeNoel"},"content":" protected String taskName;","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"AlfredBeNoel"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"AlfredBeNoel"},"content":" public Task(String taskName) {","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"AlfredBeNoel"},"content":" this.taskName \u003d taskName;","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"AlfredBeNoel"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"AlfredBeNoel"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"AlfredBeNoel"},"content":" return (isDone ? \"X\" : \" \"); // mark done task with X","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"AlfredBeNoel"},"content":" public String getStatusNumber() {","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"AlfredBeNoel"},"content":" return (isDone ? \"1\" : \"0\"); // mark done task with 1","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"AlfredBeNoel"},"content":" public String getTaskName() {","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"AlfredBeNoel"},"content":" return this.taskName;","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"AlfredBeNoel"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":26,"author":{"gitId":"AlfredBeNoel"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":27,"author":{"gitId":"AlfredBeNoel"},"content":" return \"[\" + getStatusIcon() + \"] \" + this.taskName;","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":29,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":30,"author":{"gitId":"AlfredBeNoel"},"content":" public String toFileString() {","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"AlfredBeNoel"},"content":" return \"\";","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"AlfredBeNoel"},"content":" private void markPrintHelper(String message) {","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"AlfredBeNoel"},"content":" String filler \u003d \"____________________________________________________________\";","lastModifiedDate":"2023-08-23"},{"lineNumber":36,"author":{"gitId":"AlfredBeNoel"},"content":" System.out.println(filler);","lastModifiedDate":"2023-08-23"},{"lineNumber":37,"author":{"gitId":"AlfredBeNoel"},"content":" System.out.println(message);","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"AlfredBeNoel"},"content":" System.out.println(this);","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"AlfredBeNoel"},"content":" System.out.println(filler);","lastModifiedDate":"2023-08-23"},{"lineNumber":40,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":41,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":42,"author":{"gitId":"AlfredBeNoel"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":43,"author":{"gitId":"AlfredBeNoel"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-24"},{"lineNumber":44,"author":{"gitId":"AlfredBeNoel"},"content":" markPrintHelper(\" Nice! I\u0027ve marked this task as done:\");","lastModifiedDate":"2023-08-24"},{"lineNumber":45,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":46,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":47,"author":{"gitId":"AlfredBeNoel"},"content":" public void unMark() {","lastModifiedDate":"2023-08-23"},{"lineNumber":48,"author":{"gitId":"AlfredBeNoel"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-23"},{"lineNumber":49,"author":{"gitId":"AlfredBeNoel"},"content":" markPrintHelper(\" OK, I\u0027ve marked this task as not done yet:\");","lastModifiedDate":"2023-08-24"},{"lineNumber":50,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":51,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":52,"author":{"gitId":"AlfredBeNoel"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"AlfredBeNoel":52}},{"path":"src/main/java/noel/tasks/ToDos.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AlfredBeNoel"},"content":"package noel.tasks;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"AlfredBeNoel"},"content":"public class ToDos extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"AlfredBeNoel"},"content":" final String taskChar \u003d \"[T]\";","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"AlfredBeNoel"},"content":" public ToDos(String taskName) {","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"AlfredBeNoel"},"content":" super(taskName);","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"AlfredBeNoel"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"AlfredBeNoel"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"AlfredBeNoel"},"content":" return taskChar + super.toString();","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"AlfredBeNoel"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"AlfredBeNoel"},"content":" public String toFileString() {","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"AlfredBeNoel"},"content":" return \"T | \" + super.getStatusNumber() + \" | \" + super.getTaskName();","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"AlfredBeNoel"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"AlfredBeNoel":21}},{"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":"AlfredBeNoel"},"content":"java -classpath ../bin Noel \u003c input.txt \u003e ACTUAL.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":"-"},"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":{"AlfredBeNoel":1,"-":37}}] +[{"path":"_loadFileTest.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"AlfredBeNoel"},"content":"T | 1 | read","lastModifiedDate":"2023-09-10"},{"lineNumber":2,"author":{"gitId":"AlfredBeNoel"},"content":"E | 1 | ori | (from: 2033-04-04 06:00 to: 2020-04-04 06:00)","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"AlfredBeNoel"},"content":"D | 0 | read | 2023-04-03 06:00","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"AlfredBeNoel"},"content":"T | 0 | read","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"AlfredBeNoel":4}},{"path":"_noelTestFile.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"AlfredBeNoel"},"content":"T | 1 | read","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"AlfredBeNoel":1}},{"path":"_writeFileTest.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"AlfredBeNoel"},"content":"T | 1 | read","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"AlfredBeNoel":1}},{"path":"build.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"AlfredBeNoel"},"content":"plugins {","lastModifiedDate":"2023-09-10"},{"lineNumber":2,"author":{"gitId":"AlfredBeNoel"},"content":" id \u0027java\u0027","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"AlfredBeNoel"},"content":"}","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"AlfredBeNoel"},"content":"group \u0027org.example\u0027","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"AlfredBeNoel"},"content":"version \u00271.0-SNAPSHOT\u0027","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"AlfredBeNoel"},"content":"repositories {","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"AlfredBeNoel"},"content":" mavenCentral()","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"AlfredBeNoel"},"content":"}","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"AlfredBeNoel"},"content":"dependencies {","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"AlfredBeNoel"},"content":" testImplementation \u0027org.junit.jupiter:junit-jupiter-api:5.9.2\u0027","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"AlfredBeNoel"},"content":" testImplementation \u0027junit:junit:4.13.2\u0027","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"AlfredBeNoel"},"content":" testRuntimeOnly \u0027org.junit.jupiter:junit-jupiter-engine:5.9.2\u0027","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"AlfredBeNoel"},"content":"}","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"AlfredBeNoel"},"content":"test {","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"AlfredBeNoel"},"content":" useJUnitPlatform()","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"AlfredBeNoel"},"content":"}","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"AlfredBeNoel":20}},{"path":"data/noel.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"AlfredBeNoel"},"content":"T | 1 | read","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"AlfredBeNoel"},"content":"E | 1 | ori | (from: 2033-04-04 06:00 to: 2020-04-04 06:00)","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"AlfredBeNoel"},"content":"D | 0 | read | 2023-04-03 06:00","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"AlfredBeNoel"},"content":"T | 0 | read","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"AlfredBeNoel"},"content":"D | 0 | read | 2023-02-02 06:00","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"AlfredBeNoel":5}},{"path":"settings.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"AlfredBeNoel"},"content":"/*","lastModifiedDate":"2023-09-10"},{"lineNumber":2,"author":{"gitId":"AlfredBeNoel"},"content":" * This file was generated by the Gradle \u0027init\u0027 task.","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"AlfredBeNoel"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"AlfredBeNoel"},"content":" * The settings file is used to specify which projects to include in your build.","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"AlfredBeNoel"},"content":" * For more detailed information on multi-project builds, please refer to https://docs.gradle.org/8.3/userguide/building_swift_projects.html in the Gradle documentation.","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"AlfredBeNoel"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"AlfredBeNoel"},"content":"rootProject.name \u003d \u0027ip\u0027","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"AlfredBeNoel":8}},{"path":"src/main/java/noelPackage/Noel.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AlfredBeNoel"},"content":"package noelPackage;","lastModifiedDate":"2023-09-10"},{"lineNumber":2,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"AlfredBeNoel"},"content":"import noelPackage.exceptions.NoelException;","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"AlfredBeNoel"},"content":"import noelPackage.helper.Parser;","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"AlfredBeNoel"},"content":"import noelPackage.helper.Storage;","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"AlfredBeNoel"},"content":"import noelPackage.helper.Tasklist;","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"AlfredBeNoel"},"content":"import noelPackage.helper.Ui;","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"AlfredBeNoel"},"content":"public class Noel {","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"AlfredBeNoel"},"content":" static String HELLO_MSG \u003d \" Hello! I\u0027m Noel!\\nWhat can I do for you?\";","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"AlfredBeNoel"},"content":" static String BYE_MSG \u003d \" Bye. Hope to see you again soon!\";","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"AlfredBeNoel"},"content":" private final Ui ui;","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"AlfredBeNoel"},"content":" private Tasklist tasks;","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"AlfredBeNoel"},"content":" private final Parser parser;","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"AlfredBeNoel"},"content":" public Noel(String filePath) {","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"AlfredBeNoel"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"AlfredBeNoel"},"content":" Storage storage \u003d new Storage(filePath);","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"AlfredBeNoel"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"AlfredBeNoel"},"content":" tasks \u003d new Tasklist(storage.loadFile());","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"AlfredBeNoel"},"content":" } catch (NoelException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"AlfredBeNoel"},"content":" ui.showLoadingError();","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"AlfredBeNoel"},"content":" tasks \u003d new Tasklist();","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"AlfredBeNoel"},"content":" } finally {","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"AlfredBeNoel"},"content":" storage.updateFile();","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"AlfredBeNoel"},"content":" parser \u003d new Parser(tasks, storage);","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"AlfredBeNoel"},"content":" public String chatHelper() {","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"AlfredBeNoel"},"content":" return this.ui.getNextLine();","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"AlfredBeNoel"},"content":" public static void printFunction(String message){","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"AlfredBeNoel"},"content":" String filler \u003d \"____________________________________________________________\";","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"AlfredBeNoel"},"content":" System.out.println(filler + \"\\n\" + message + \"\\n\" + filler);","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"AlfredBeNoel"},"content":" public void run() {","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"AlfredBeNoel"},"content":" printFunction(HELLO_MSG);","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"AlfredBeNoel"},"content":" String nextLine \u003d chatHelper();","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"AlfredBeNoel"},"content":" int commandOption \u003d parser.parseCommand(nextLine);","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"AlfredBeNoel"},"content":" while (commandOption !\u003d 1) {","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"AlfredBeNoel"},"content":" nextLine \u003d ui.getNextLine();","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"AlfredBeNoel"},"content":" commandOption \u003d parser.parseCommand(nextLine);","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"AlfredBeNoel"},"content":" printFunction(BYE_MSG);","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"AlfredBeNoel"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"AlfredBeNoel"},"content":" new Noel(\"./data/noel.txt\").run();","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"AlfredBeNoel"},"content":"}","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"AlfredBeNoel":56}},{"path":"src/main/java/noelPackage/exceptions/NoelException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AlfredBeNoel"},"content":"package noelPackage.exceptions;","lastModifiedDate":"2023-09-10"},{"lineNumber":2,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"AlfredBeNoel"},"content":"public class NoelException extends Exception {","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"AlfredBeNoel"},"content":" public NoelException(String errorMsg) {","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"AlfredBeNoel"},"content":" super(errorMsg);","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"AlfredBeNoel"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"AlfredBeNoel":7}},{"path":"src/main/java/noelPackage/helper/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AlfredBeNoel"},"content":"package noelPackage.helper;","lastModifiedDate":"2023-09-10"},{"lineNumber":2,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"AlfredBeNoel"},"content":"import noelPackage.tasks.Task;","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"AlfredBeNoel"},"content":"public class Parser {","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"AlfredBeNoel"},"content":" private final Tasklist tasks;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"AlfredBeNoel"},"content":" private final Storage storage;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"AlfredBeNoel"},"content":" public Parser(Tasklist tasks, Storage storage) {","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"AlfredBeNoel"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"AlfredBeNoel"},"content":" this.storage \u003d storage;","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"AlfredBeNoel"},"content":" public static void printFunction(String message){","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"AlfredBeNoel"},"content":" String filler \u003d \"____________________________________________________________\";","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"AlfredBeNoel"},"content":" System.out.println(filler + \"\\n\" + message + \"\\n\" + filler);","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"AlfredBeNoel"},"content":" public int parseCommand(String nextLine) {","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"AlfredBeNoel"},"content":" String command;","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"AlfredBeNoel"},"content":" if (nextLine.equals(\"bye\")) {","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"AlfredBeNoel"},"content":" return -1;","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"AlfredBeNoel"},"content":" } else if (nextLine.equals(\"list\")) {","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"AlfredBeNoel"},"content":" tasks.printTaskList();","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"AlfredBeNoel"},"content":" } else if (nextLine.contains(\" \")) {","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"AlfredBeNoel"},"content":" String[] result \u003d nextLine.split(\" \");","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"AlfredBeNoel"},"content":" command \u003d result[0];","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"AlfredBeNoel"},"content":" switch (command) {","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"AlfredBeNoel"},"content":" case \"mark\": {","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"AlfredBeNoel"},"content":" int taskNum \u003d Integer.parseInt(result[1]);","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"AlfredBeNoel"},"content":" taskNum \u003d taskNum - 1;","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"AlfredBeNoel"},"content":" tasks.markAsDone(taskNum);","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"AlfredBeNoel"},"content":" storage.writeToFile(tasks.getTaskAsList());","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"AlfredBeNoel"},"content":" break;","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"AlfredBeNoel"},"content":" case \"unmark\": {","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"AlfredBeNoel"},"content":" int taskNum \u003d Integer.parseInt(result[1]);","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"AlfredBeNoel"},"content":" tasks.unMark(taskNum);","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"AlfredBeNoel"},"content":" storage.writeToFile(tasks.getTaskAsList());","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"AlfredBeNoel"},"content":" break;","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"AlfredBeNoel"},"content":" case \"todo\":","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"AlfredBeNoel"},"content":" result \u003d nextLine.split(\"todo \");","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"AlfredBeNoel"},"content":" if (result.length \u003d\u003d 0) {","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"AlfredBeNoel"},"content":" System.out.println(\"OOPS!!! The description of a todo cannot be empty.\");","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"AlfredBeNoel"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"AlfredBeNoel"},"content":" tasks.addToDo(result[1]);","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"AlfredBeNoel"},"content":" storage.writeToFile(tasks.getTaskAsList());","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"AlfredBeNoel"},"content":" break;","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"AlfredBeNoel"},"content":" case \"deadline\":","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"AlfredBeNoel"},"content":" result \u003d nextLine.split(\"deadline \");","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"AlfredBeNoel"},"content":" if (result.length \u003d\u003d 0) {","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"AlfredBeNoel"},"content":" System.out.println(\"OOPS!!! The description of a deadline cannot be empty.\");","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"AlfredBeNoel"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"AlfredBeNoel"},"content":" String[] deadlineHelper \u003d result[1].split(\" /by \");","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"AlfredBeNoel"},"content":" if (deadlineHelper.length \u003d\u003d 2) {","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"AlfredBeNoel"},"content":" tasks.addDeadline(deadlineHelper[0], deadlineHelper[1]);","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"AlfredBeNoel"},"content":" storage.writeToFile(tasks.getTaskAsList());","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"AlfredBeNoel"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"AlfredBeNoel"},"content":" System.out.println(\"OOPS!!! Remember to add the date/description\");","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":69,"author":{"gitId":"AlfredBeNoel"},"content":" break;","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"AlfredBeNoel"},"content":" case \"event\":","lastModifiedDate":"2023-09-04"},{"lineNumber":72,"author":{"gitId":"AlfredBeNoel"},"content":" result \u003d nextLine.split(\"event \");","lastModifiedDate":"2023-09-04"},{"lineNumber":73,"author":{"gitId":"AlfredBeNoel"},"content":" if (result.length \u003d\u003d 0) {","lastModifiedDate":"2023-09-04"},{"lineNumber":74,"author":{"gitId":"AlfredBeNoel"},"content":" System.out.println(\"OOPS!!! The description of a event cannot be empty.\");","lastModifiedDate":"2023-09-04"},{"lineNumber":75,"author":{"gitId":"AlfredBeNoel"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":76,"author":{"gitId":"AlfredBeNoel"},"content":" String[] eventsHelper \u003d result[1].split(\" /from \");","lastModifiedDate":"2023-09-04"},{"lineNumber":77,"author":{"gitId":"AlfredBeNoel"},"content":" command \u003d eventsHelper[0];","lastModifiedDate":"2023-09-04"},{"lineNumber":78,"author":{"gitId":"AlfredBeNoel"},"content":" if (eventsHelper.length \u003d\u003d 2) {","lastModifiedDate":"2023-09-04"},{"lineNumber":79,"author":{"gitId":"AlfredBeNoel"},"content":" eventsHelper \u003d eventsHelper[1].split(\" /to \");","lastModifiedDate":"2023-09-04"},{"lineNumber":80,"author":{"gitId":"AlfredBeNoel"},"content":" if (eventsHelper.length \u003d\u003d 2) {","lastModifiedDate":"2023-09-04"},{"lineNumber":81,"author":{"gitId":"AlfredBeNoel"},"content":" tasks.addEvent(command, eventsHelper[0], eventsHelper[1]);","lastModifiedDate":"2023-09-04"},{"lineNumber":82,"author":{"gitId":"AlfredBeNoel"},"content":" storage.writeToFile(tasks.getTaskAsList());","lastModifiedDate":"2023-09-04"},{"lineNumber":83,"author":{"gitId":"AlfredBeNoel"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":84,"author":{"gitId":"AlfredBeNoel"},"content":" System.out.println(\"Insufficient commands provided!\");","lastModifiedDate":"2023-09-04"},{"lineNumber":85,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":86,"author":{"gitId":"AlfredBeNoel"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":87,"author":{"gitId":"AlfredBeNoel"},"content":" System.out.println(\"Insufficient commands provided!\");","lastModifiedDate":"2023-09-04"},{"lineNumber":88,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":89,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":90,"author":{"gitId":"AlfredBeNoel"},"content":" break;","lastModifiedDate":"2023-09-04"},{"lineNumber":91,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":92,"author":{"gitId":"AlfredBeNoel"},"content":" case \"delete\":","lastModifiedDate":"2023-09-04"},{"lineNumber":93,"author":{"gitId":"AlfredBeNoel"},"content":" result \u003d nextLine.split(\"delete \");","lastModifiedDate":"2023-09-04"},{"lineNumber":94,"author":{"gitId":"AlfredBeNoel"},"content":" if (result.length \u003d\u003d 0) {","lastModifiedDate":"2023-09-04"},{"lineNumber":95,"author":{"gitId":"AlfredBeNoel"},"content":" System.out.println(\"OOPS!!! The description of a delete cannot be empty.\");","lastModifiedDate":"2023-09-04"},{"lineNumber":96,"author":{"gitId":"AlfredBeNoel"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":97,"author":{"gitId":"AlfredBeNoel"},"content":" int intToRemove \u003d Integer.parseInt(result[1]) - 1;","lastModifiedDate":"2023-09-04"},{"lineNumber":98,"author":{"gitId":"AlfredBeNoel"},"content":" Task taskToDel \u003d tasks.get(intToRemove);","lastModifiedDate":"2023-09-04"},{"lineNumber":99,"author":{"gitId":"AlfredBeNoel"},"content":" tasks.remove(intToRemove);","lastModifiedDate":"2023-09-04"},{"lineNumber":100,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":101,"author":{"gitId":"AlfredBeNoel"},"content":" String delStart \u003d \"Noted. I\u0027ve removed this task:\\n\";","lastModifiedDate":"2023-09-04"},{"lineNumber":102,"author":{"gitId":"AlfredBeNoel"},"content":" String delEnd \u003d \"Now you have \" + tasks.size() + \" tasks in the list.\";","lastModifiedDate":"2023-09-04"},{"lineNumber":103,"author":{"gitId":"AlfredBeNoel"},"content":" printFunction(delStart + taskToDel + \"\\n\" + delEnd);","lastModifiedDate":"2023-09-04"},{"lineNumber":104,"author":{"gitId":"AlfredBeNoel"},"content":" storage.writeToFile(tasks.getTaskAsList());","lastModifiedDate":"2023-09-04"},{"lineNumber":105,"author":{"gitId":"AlfredBeNoel"},"content":" break;","lastModifiedDate":"2023-09-04"},{"lineNumber":106,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":107,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":108,"author":{"gitId":"AlfredBeNoel"},"content":" default:","lastModifiedDate":"2023-09-04"},{"lineNumber":109,"author":{"gitId":"AlfredBeNoel"},"content":" System.out.println(\"Invalid Option!\");","lastModifiedDate":"2023-09-04"},{"lineNumber":110,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":111,"author":{"gitId":"AlfredBeNoel"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":112,"author":{"gitId":"AlfredBeNoel"},"content":" System.out.println(\"Invalid Option!\");","lastModifiedDate":"2023-09-04"},{"lineNumber":113,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":114,"author":{"gitId":"AlfredBeNoel"},"content":" return 0;","lastModifiedDate":"2023-09-04"},{"lineNumber":115,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":116,"author":{"gitId":"AlfredBeNoel"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"AlfredBeNoel":116}},{"path":"src/main/java/noelPackage/helper/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AlfredBeNoel"},"content":"package noelPackage.helper;","lastModifiedDate":"2023-09-10"},{"lineNumber":2,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"AlfredBeNoel"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"AlfredBeNoel"},"content":"import java.nio.file.Files;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"AlfredBeNoel"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"AlfredBeNoel"},"content":"import java.nio.file.Paths;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"AlfredBeNoel"},"content":"import java.util.List;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"AlfredBeNoel"},"content":"public class Storage {","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"AlfredBeNoel"},"content":" private final String filePath;","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"AlfredBeNoel"},"content":" protected boolean hasFileUpdated;","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"AlfredBeNoel"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"AlfredBeNoel"},"content":" hasFileUpdated \u003d false;","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"AlfredBeNoel"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"AlfredBeNoel"},"content":" public String loadFile() {","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"AlfredBeNoel"},"content":" return checkFile();","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"AlfredBeNoel"},"content":" public void updateFile() {","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"AlfredBeNoel"},"content":" this.hasFileUpdated \u003d true;","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"AlfredBeNoel"},"content":" public String checkFile() {","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"AlfredBeNoel"},"content":" Path filePath \u003d Paths.get(this.filePath);","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"AlfredBeNoel"},"content":" if (Files.exists(filePath)) {","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"AlfredBeNoel"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"AlfredBeNoel"},"content":" return new String(Files.readAllBytes(filePath));","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"AlfredBeNoel"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"AlfredBeNoel"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"AlfredBeNoel"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"AlfredBeNoel"},"content":" hasFileUpdated \u003d true;","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"AlfredBeNoel"},"content":" System.out.println(\"File does not exist\");","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"AlfredBeNoel"},"content":" System.out.println(\"Creating file now!\");","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"AlfredBeNoel"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"AlfredBeNoel"},"content":" Files.createDirectories(filePath.getParent());","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"AlfredBeNoel"},"content":" Files.createFile(filePath);","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"AlfredBeNoel"},"content":" System.out.println(\"File and Directories created!\");","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"AlfredBeNoel"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"AlfredBeNoel"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"AlfredBeNoel"},"content":" return null;","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"AlfredBeNoel"},"content":" public void writeToFile(List\u003cString\u003e task) {","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"AlfredBeNoel"},"content":" if (hasFileUpdated) {","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"AlfredBeNoel"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"AlfredBeNoel"},"content":" Files.write(Paths.get(filePath), task);","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"AlfredBeNoel"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"AlfredBeNoel"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"AlfredBeNoel"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"AlfredBeNoel":60}},{"path":"src/main/java/noelPackage/helper/Tasklist.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AlfredBeNoel"},"content":"package noelPackage.helper;","lastModifiedDate":"2023-09-10"},{"lineNumber":2,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"AlfredBeNoel"},"content":"import noelPackage.exceptions.NoelException;","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"AlfredBeNoel"},"content":"import noelPackage.tasks.Deadlines;","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"AlfredBeNoel"},"content":"import noelPackage.tasks.Events;","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"AlfredBeNoel"},"content":"import noelPackage.tasks.Task;","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"AlfredBeNoel"},"content":"import noelPackage.tasks.ToDos;","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"AlfredBeNoel"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"AlfredBeNoel"},"content":"import java.time.LocalTime;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"AlfredBeNoel"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"AlfredBeNoel"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"AlfredBeNoel"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"AlfredBeNoel"},"content":"import java.util.Arrays;","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"AlfredBeNoel"},"content":"import java.util.List;","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"AlfredBeNoel"},"content":"import java.util.Objects;","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"AlfredBeNoel"},"content":"public class Tasklist {","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"AlfredBeNoel"},"content":" private final ArrayList\u003cTask\u003e taskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"AlfredBeNoel"},"content":" static String addedMessageStart \u003d \"Got it. I\u0027ve added this task:\";","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"AlfredBeNoel"},"content":" public Tasklist(String listOfTasks) throws NoelException {","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"AlfredBeNoel"},"content":" if (listOfTasks \u003d\u003d null) {","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"AlfredBeNoel"},"content":" throw new NoelException(\"No content in file!\");","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"AlfredBeNoel"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"AlfredBeNoel"},"content":" taskList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"AlfredBeNoel"},"content":" updateTaskList(listOfTasks);","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"AlfredBeNoel"},"content":" public Tasklist() {","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"AlfredBeNoel"},"content":" taskList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"AlfredBeNoel"},"content":" public boolean checkFull() {","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"AlfredBeNoel"},"content":" int maxSize \u003d 100;","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"AlfredBeNoel"},"content":" return taskList.size() \u003d\u003d maxSize;","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"AlfredBeNoel"},"content":" public boolean checkEmpty() {","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"AlfredBeNoel"},"content":" return taskList.size() \u003d\u003d 0;","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"AlfredBeNoel"},"content":" public void updateTaskList(String content) {","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"AlfredBeNoel"},"content":" String[] listOfStrings \u003d content.split(\"\\n\");","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"AlfredBeNoel"},"content":" System.out.println(Arrays.toString(listOfStrings));","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"AlfredBeNoel"},"content":" for (String line : listOfStrings) {","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"AlfredBeNoel"},"content":" String[] values \u003d line.split(\" \\\\| \");","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"AlfredBeNoel"},"content":" if (values.length !\u003d 1) {","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"AlfredBeNoel"},"content":" if (Objects.equals(values[0], \"E\")) {","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"AlfredBeNoel"},"content":" if (values.length \u003d\u003d 4) {","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"AlfredBeNoel"},"content":" // (from: 02 02 2023 06:00 to: 03 02 2023 06:00)","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"AlfredBeNoel"},"content":" String[] dates \u003d values[3].split(\"to:\");","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"AlfredBeNoel"},"content":" String[] startDateArray \u003d dates[0].split(\"\\\\(from: \")[1].split(\" \");","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"AlfredBeNoel"},"content":" String startDate \u003d startDateArray[0] + \" \" + startDateArray[1];","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"AlfredBeNoel"},"content":" String[] endDateArray \u003d dates[1].split(\"\\\\)\")[0].split(\" \");","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"AlfredBeNoel"},"content":" String endDate \u003d endDateArray[1] + \" \" + endDateArray[2];","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"AlfredBeNoel"},"content":" if (dates.length \u003d\u003d 2) {","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"AlfredBeNoel"},"content":" addEvent(values[2], startDate, endDate);","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"AlfredBeNoel"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"AlfredBeNoel"},"content":" System.out.println(\"Invalid line! Skipping line...\");","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"AlfredBeNoel"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":69,"author":{"gitId":"AlfredBeNoel"},"content":" System.out.println(\"Invalid line! Skipping line...\");","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":72,"author":{"gitId":"AlfredBeNoel"},"content":" } else if (Objects.equals(values[0], \"T\")) {","lastModifiedDate":"2023-09-04"},{"lineNumber":73,"author":{"gitId":"AlfredBeNoel"},"content":" if (values.length \u003d\u003d 3) {","lastModifiedDate":"2023-09-04"},{"lineNumber":74,"author":{"gitId":"AlfredBeNoel"},"content":" addToDo(values[2]);","lastModifiedDate":"2023-09-04"},{"lineNumber":75,"author":{"gitId":"AlfredBeNoel"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":76,"author":{"gitId":"AlfredBeNoel"},"content":" System.out.println(\"Invalid line! Skipping line...\");","lastModifiedDate":"2023-09-04"},{"lineNumber":77,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":78,"author":{"gitId":"AlfredBeNoel"},"content":" } else if (Objects.equals(values[0], \"D\")) {","lastModifiedDate":"2023-09-04"},{"lineNumber":79,"author":{"gitId":"AlfredBeNoel"},"content":" if (values.length \u003d\u003d 4) {","lastModifiedDate":"2023-09-04"},{"lineNumber":80,"author":{"gitId":"AlfredBeNoel"},"content":" addDeadline(values[2], values[3]);","lastModifiedDate":"2023-09-04"},{"lineNumber":81,"author":{"gitId":"AlfredBeNoel"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":82,"author":{"gitId":"AlfredBeNoel"},"content":" System.out.println(\"Invalid line! Skipping line...\");","lastModifiedDate":"2023-09-04"},{"lineNumber":83,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":84,"author":{"gitId":"AlfredBeNoel"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":85,"author":{"gitId":"AlfredBeNoel"},"content":" System.out.println(\"Invalid line! Skipping line...\");","lastModifiedDate":"2023-09-04"},{"lineNumber":86,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":87,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":88,"author":{"gitId":"AlfredBeNoel"},"content":" if (Objects.equals(values[1], \"1\")) {","lastModifiedDate":"2023-09-04"},{"lineNumber":89,"author":{"gitId":"AlfredBeNoel"},"content":" this.taskList.get(this.taskList.size() - 1).markAsDone();","lastModifiedDate":"2023-09-04"},{"lineNumber":90,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":91,"author":{"gitId":"AlfredBeNoel"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":92,"author":{"gitId":"AlfredBeNoel"},"content":" System.out.println(\"No value in file\");","lastModifiedDate":"2023-09-04"},{"lineNumber":93,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":94,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":95,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":96,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":97,"author":{"gitId":"AlfredBeNoel"},"content":" public LocalDate dateFormat(String endDate) {","lastModifiedDate":"2023-09-04"},{"lineNumber":98,"author":{"gitId":"AlfredBeNoel"},"content":" LocalDate date;","lastModifiedDate":"2023-09-04"},{"lineNumber":99,"author":{"gitId":"AlfredBeNoel"},"content":" System.out.println(endDate);","lastModifiedDate":"2023-09-04"},{"lineNumber":100,"author":{"gitId":"AlfredBeNoel"},"content":" DateTimeFormatter formatter1 \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\");","lastModifiedDate":"2023-09-04"},{"lineNumber":101,"author":{"gitId":"AlfredBeNoel"},"content":" DateTimeFormatter formatter2 \u003d DateTimeFormatter.ofPattern(\"dd/MM/yyyy HH:mm\");","lastModifiedDate":"2023-09-04"},{"lineNumber":102,"author":{"gitId":"AlfredBeNoel"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":103,"author":{"gitId":"AlfredBeNoel"},"content":" date \u003d LocalDate.parse(endDate, formatter1);","lastModifiedDate":"2023-09-04"},{"lineNumber":104,"author":{"gitId":"AlfredBeNoel"},"content":" return date;","lastModifiedDate":"2023-09-04"},{"lineNumber":105,"author":{"gitId":"AlfredBeNoel"},"content":" } catch (DateTimeParseException e1) {","lastModifiedDate":"2023-09-04"},{"lineNumber":106,"author":{"gitId":"AlfredBeNoel"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":107,"author":{"gitId":"AlfredBeNoel"},"content":" date \u003d LocalDate.parse(endDate, formatter2);","lastModifiedDate":"2023-09-04"},{"lineNumber":108,"author":{"gitId":"AlfredBeNoel"},"content":" return date;","lastModifiedDate":"2023-09-04"},{"lineNumber":109,"author":{"gitId":"AlfredBeNoel"},"content":" } catch (DateTimeParseException e2) {","lastModifiedDate":"2023-09-04"},{"lineNumber":110,"author":{"gitId":"AlfredBeNoel"},"content":" System.out.println(\"Invalid date format\");","lastModifiedDate":"2023-09-04"},{"lineNumber":111,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":112,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":113,"author":{"gitId":"AlfredBeNoel"},"content":" return null;","lastModifiedDate":"2023-09-04"},{"lineNumber":114,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":115,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":116,"author":{"gitId":"AlfredBeNoel"},"content":" public LocalTime timeFormat(String date) {","lastModifiedDate":"2023-09-04"},{"lineNumber":117,"author":{"gitId":"AlfredBeNoel"},"content":" LocalTime time \u003d null;","lastModifiedDate":"2023-09-04"},{"lineNumber":118,"author":{"gitId":"AlfredBeNoel"},"content":" DateTimeFormatter formatter1 \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\");","lastModifiedDate":"2023-09-04"},{"lineNumber":119,"author":{"gitId":"AlfredBeNoel"},"content":" DateTimeFormatter formatter2 \u003d DateTimeFormatter.ofPattern(\"dd/MM/yyyy HH:mm\");","lastModifiedDate":"2023-09-04"},{"lineNumber":120,"author":{"gitId":"AlfredBeNoel"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":121,"author":{"gitId":"AlfredBeNoel"},"content":" time \u003d LocalTime.parse(date, formatter1);","lastModifiedDate":"2023-09-04"},{"lineNumber":122,"author":{"gitId":"AlfredBeNoel"},"content":" } catch (DateTimeParseException e1) {","lastModifiedDate":"2023-09-04"},{"lineNumber":123,"author":{"gitId":"AlfredBeNoel"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":124,"author":{"gitId":"AlfredBeNoel"},"content":" time \u003d LocalTime.parse(date, formatter2);","lastModifiedDate":"2023-09-04"},{"lineNumber":125,"author":{"gitId":"AlfredBeNoel"},"content":" } catch (DateTimeParseException e2) {","lastModifiedDate":"2023-09-04"},{"lineNumber":126,"author":{"gitId":"AlfredBeNoel"},"content":" System.out.println(\"Invalid Time Format\");","lastModifiedDate":"2023-09-04"},{"lineNumber":127,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":128,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":129,"author":{"gitId":"AlfredBeNoel"},"content":" return time;","lastModifiedDate":"2023-09-04"},{"lineNumber":130,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":131,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":132,"author":{"gitId":"AlfredBeNoel"},"content":" public static void printFunction(String message){","lastModifiedDate":"2023-09-04"},{"lineNumber":133,"author":{"gitId":"AlfredBeNoel"},"content":" String filler \u003d \"____________________________________________________________\";","lastModifiedDate":"2023-09-04"},{"lineNumber":134,"author":{"gitId":"AlfredBeNoel"},"content":" System.out.println(filler + \"\\n\" + message + \"\\n\" + filler);","lastModifiedDate":"2023-09-04"},{"lineNumber":135,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":136,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":137,"author":{"gitId":"AlfredBeNoel"},"content":" public void addEvent(String task, String startDate, String endDate) {","lastModifiedDate":"2023-09-04"},{"lineNumber":138,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":139,"author":{"gitId":"AlfredBeNoel"},"content":" LocalDate startDateFormat \u003d dateFormat(startDate);","lastModifiedDate":"2023-09-04"},{"lineNumber":140,"author":{"gitId":"AlfredBeNoel"},"content":" LocalDate endDateFormat \u003d dateFormat(endDate);","lastModifiedDate":"2023-09-04"},{"lineNumber":141,"author":{"gitId":"AlfredBeNoel"},"content":" LocalTime startTimeFormat \u003d timeFormat(startDate);","lastModifiedDate":"2023-09-04"},{"lineNumber":142,"author":{"gitId":"AlfredBeNoel"},"content":" LocalTime endTimeFormat \u003d timeFormat(endDate);","lastModifiedDate":"2023-09-04"},{"lineNumber":143,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":144,"author":{"gitId":"AlfredBeNoel"},"content":" if (startDateFormat \u003d\u003d null || endDateFormat \u003d\u003d null) {","lastModifiedDate":"2023-09-04"},{"lineNumber":145,"author":{"gitId":"AlfredBeNoel"},"content":" System.out.println(\"Invalid format for start/end date!\");","lastModifiedDate":"2023-09-04"},{"lineNumber":146,"author":{"gitId":"AlfredBeNoel"},"content":" return;","lastModifiedDate":"2023-09-04"},{"lineNumber":147,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":148,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":149,"author":{"gitId":"AlfredBeNoel"},"content":" if (startTimeFormat \u003d\u003d null || endTimeFormat \u003d\u003d null) {","lastModifiedDate":"2023-09-04"},{"lineNumber":150,"author":{"gitId":"AlfredBeNoel"},"content":" System.out.println(\"Invalid format for start/end time!\");","lastModifiedDate":"2023-09-04"},{"lineNumber":151,"author":{"gitId":"AlfredBeNoel"},"content":" return;","lastModifiedDate":"2023-09-04"},{"lineNumber":152,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":153,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":154,"author":{"gitId":"AlfredBeNoel"},"content":" Task taskToAdd \u003d new Events(task, startDateFormat, startTimeFormat, endDateFormat, endTimeFormat);","lastModifiedDate":"2023-09-04"},{"lineNumber":155,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":156,"author":{"gitId":"AlfredBeNoel"},"content":" if (checkFull()) {","lastModifiedDate":"2023-09-04"},{"lineNumber":157,"author":{"gitId":"AlfredBeNoel"},"content":" System.out.println(\"Array is full!\");","lastModifiedDate":"2023-09-04"},{"lineNumber":158,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":159,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":160,"author":{"gitId":"AlfredBeNoel"},"content":" taskList.add(taskToAdd);","lastModifiedDate":"2023-09-04"},{"lineNumber":161,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":162,"author":{"gitId":"AlfredBeNoel"},"content":" String addedMessageEnd \u003d \"Now you have \" + taskList.size() + \" tasks in the list.\";","lastModifiedDate":"2023-09-04"},{"lineNumber":163,"author":{"gitId":"AlfredBeNoel"},"content":" String updateAdd \u003d addedMessageStart + \"\\n\" + taskToAdd + \"\\n\" + addedMessageEnd;","lastModifiedDate":"2023-09-04"},{"lineNumber":164,"author":{"gitId":"AlfredBeNoel"},"content":" printFunction(updateAdd);","lastModifiedDate":"2023-09-04"},{"lineNumber":165,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":166,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":167,"author":{"gitId":"AlfredBeNoel"},"content":" public void addDeadline(String task, String endDate) {","lastModifiedDate":"2023-09-04"},{"lineNumber":168,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":169,"author":{"gitId":"AlfredBeNoel"},"content":" LocalDate date \u003d dateFormat(endDate);","lastModifiedDate":"2023-09-04"},{"lineNumber":170,"author":{"gitId":"AlfredBeNoel"},"content":" if (date \u003d\u003d null) {","lastModifiedDate":"2023-09-04"},{"lineNumber":171,"author":{"gitId":"AlfredBeNoel"},"content":" System.out.println(\"Invalid date!\");","lastModifiedDate":"2023-09-04"},{"lineNumber":172,"author":{"gitId":"AlfredBeNoel"},"content":" return;","lastModifiedDate":"2023-09-04"},{"lineNumber":173,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":174,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":175,"author":{"gitId":"AlfredBeNoel"},"content":" LocalTime time \u003d timeFormat(endDate);","lastModifiedDate":"2023-09-04"},{"lineNumber":176,"author":{"gitId":"AlfredBeNoel"},"content":" if (time \u003d\u003d null) {","lastModifiedDate":"2023-09-04"},{"lineNumber":177,"author":{"gitId":"AlfredBeNoel"},"content":" System.out.println(\"Invalid date!\");","lastModifiedDate":"2023-09-04"},{"lineNumber":178,"author":{"gitId":"AlfredBeNoel"},"content":" return;","lastModifiedDate":"2023-09-04"},{"lineNumber":179,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":180,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":181,"author":{"gitId":"AlfredBeNoel"},"content":" Task taskToAdd \u003d new Deadlines(task, date, time);","lastModifiedDate":"2023-09-04"},{"lineNumber":182,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":183,"author":{"gitId":"AlfredBeNoel"},"content":" if (checkFull()) {","lastModifiedDate":"2023-09-04"},{"lineNumber":184,"author":{"gitId":"AlfredBeNoel"},"content":" System.out.println(\"Array is full!\");","lastModifiedDate":"2023-09-04"},{"lineNumber":185,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":186,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":187,"author":{"gitId":"AlfredBeNoel"},"content":" taskList.add(taskToAdd);","lastModifiedDate":"2023-09-04"},{"lineNumber":188,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":189,"author":{"gitId":"AlfredBeNoel"},"content":" String addedMessageEnd \u003d \"Now you have \" + taskList.size() + \" tasks in the list.\";","lastModifiedDate":"2023-09-04"},{"lineNumber":190,"author":{"gitId":"AlfredBeNoel"},"content":" String updateAdd \u003d addedMessageStart + \"\\n\" + taskToAdd + \"\\n\" + addedMessageEnd;","lastModifiedDate":"2023-09-04"},{"lineNumber":191,"author":{"gitId":"AlfredBeNoel"},"content":" printFunction(updateAdd);","lastModifiedDate":"2023-09-04"},{"lineNumber":192,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":193,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":194,"author":{"gitId":"AlfredBeNoel"},"content":" public void addToDo(String task) {","lastModifiedDate":"2023-09-04"},{"lineNumber":195,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":196,"author":{"gitId":"AlfredBeNoel"},"content":" Task taskToAdd \u003d new ToDos(task);","lastModifiedDate":"2023-09-04"},{"lineNumber":197,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":198,"author":{"gitId":"AlfredBeNoel"},"content":" if (checkFull()) {","lastModifiedDate":"2023-09-04"},{"lineNumber":199,"author":{"gitId":"AlfredBeNoel"},"content":" System.out.println(\"Array is full!\");","lastModifiedDate":"2023-09-04"},{"lineNumber":200,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":201,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":202,"author":{"gitId":"AlfredBeNoel"},"content":" taskList.add(taskToAdd);","lastModifiedDate":"2023-09-04"},{"lineNumber":203,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":204,"author":{"gitId":"AlfredBeNoel"},"content":" String addedMessageEnd \u003d \"Now you have \" + taskList.size() + \" tasks in the list.\";","lastModifiedDate":"2023-09-04"},{"lineNumber":205,"author":{"gitId":"AlfredBeNoel"},"content":" String updateAdd \u003d addedMessageStart + \"\\n\" + taskToAdd + \"\\n\" + addedMessageEnd;","lastModifiedDate":"2023-09-04"},{"lineNumber":206,"author":{"gitId":"AlfredBeNoel"},"content":" printFunction(updateAdd);","lastModifiedDate":"2023-09-04"},{"lineNumber":207,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":208,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":209,"author":{"gitId":"AlfredBeNoel"},"content":" public void printTaskList(){","lastModifiedDate":"2023-09-04"},{"lineNumber":210,"author":{"gitId":"AlfredBeNoel"},"content":" if (checkEmpty()) {","lastModifiedDate":"2023-09-04"},{"lineNumber":211,"author":{"gitId":"AlfredBeNoel"},"content":" System.out.println(\"List is empty!\");","lastModifiedDate":"2023-09-04"},{"lineNumber":212,"author":{"gitId":"AlfredBeNoel"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":213,"author":{"gitId":"AlfredBeNoel"},"content":" String filler \u003d \"____________________________________________________________\";","lastModifiedDate":"2023-09-04"},{"lineNumber":214,"author":{"gitId":"AlfredBeNoel"},"content":" System.out.println(filler);","lastModifiedDate":"2023-09-04"},{"lineNumber":215,"author":{"gitId":"AlfredBeNoel"},"content":" int maxLength \u003d taskList.size();","lastModifiedDate":"2023-09-04"},{"lineNumber":216,"author":{"gitId":"AlfredBeNoel"},"content":" for (int i \u003d 0; i \u003c maxLength; i++) {","lastModifiedDate":"2023-09-04"},{"lineNumber":217,"author":{"gitId":"AlfredBeNoel"},"content":" System.out.println(i + 1 + \". \" + taskList.get(i));","lastModifiedDate":"2023-09-04"},{"lineNumber":218,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":219,"author":{"gitId":"AlfredBeNoel"},"content":" System.out.println(filler);","lastModifiedDate":"2023-09-04"},{"lineNumber":220,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":221,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":222,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":223,"author":{"gitId":"AlfredBeNoel"},"content":" public List\u003cString\u003e getTaskAsList() {","lastModifiedDate":"2023-09-04"},{"lineNumber":224,"author":{"gitId":"AlfredBeNoel"},"content":" List\u003cString\u003e linesToAppend \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-04"},{"lineNumber":225,"author":{"gitId":"AlfredBeNoel"},"content":" for (Task t:taskList) {","lastModifiedDate":"2023-09-04"},{"lineNumber":226,"author":{"gitId":"AlfredBeNoel"},"content":" linesToAppend.add(t.toFileString());","lastModifiedDate":"2023-09-04"},{"lineNumber":227,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":228,"author":{"gitId":"AlfredBeNoel"},"content":" System.out.println(linesToAppend.subList(0, linesToAppend.size()));","lastModifiedDate":"2023-09-10"},{"lineNumber":229,"author":{"gitId":"AlfredBeNoel"},"content":" return linesToAppend.subList(0, linesToAppend.size());","lastModifiedDate":"2023-09-04"},{"lineNumber":230,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":231,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":232,"author":{"gitId":"AlfredBeNoel"},"content":" public void markAsDone(int index) {","lastModifiedDate":"2023-09-04"},{"lineNumber":233,"author":{"gitId":"AlfredBeNoel"},"content":" taskList.get(index).markAsDone();","lastModifiedDate":"2023-09-04"},{"lineNumber":234,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":235,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":236,"author":{"gitId":"AlfredBeNoel"},"content":" public void unMark(int index) {","lastModifiedDate":"2023-09-04"},{"lineNumber":237,"author":{"gitId":"AlfredBeNoel"},"content":" taskList.get(index).unMark();","lastModifiedDate":"2023-09-04"},{"lineNumber":238,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":239,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":240,"author":{"gitId":"AlfredBeNoel"},"content":" public void remove(int index) {","lastModifiedDate":"2023-09-04"},{"lineNumber":241,"author":{"gitId":"AlfredBeNoel"},"content":" taskList.remove(index);","lastModifiedDate":"2023-09-04"},{"lineNumber":242,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":243,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":244,"author":{"gitId":"AlfredBeNoel"},"content":" public int size() {","lastModifiedDate":"2023-09-04"},{"lineNumber":245,"author":{"gitId":"AlfredBeNoel"},"content":" return taskList.size();","lastModifiedDate":"2023-09-04"},{"lineNumber":246,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":247,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":248,"author":{"gitId":"AlfredBeNoel"},"content":" public Task get(int index) {","lastModifiedDate":"2023-09-04"},{"lineNumber":249,"author":{"gitId":"AlfredBeNoel"},"content":" return taskList.get(index);","lastModifiedDate":"2023-09-04"},{"lineNumber":250,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":251,"author":{"gitId":"AlfredBeNoel"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"AlfredBeNoel":251}},{"path":"src/main/java/noelPackage/helper/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AlfredBeNoel"},"content":"package noelPackage.helper;","lastModifiedDate":"2023-09-10"},{"lineNumber":2,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"AlfredBeNoel"},"content":"import java.io.ByteArrayInputStream;","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"AlfredBeNoel"},"content":"import java.util.NoSuchElementException;","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"AlfredBeNoel"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"AlfredBeNoel"},"content":"public class Ui {","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"AlfredBeNoel"},"content":" Scanner input;","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"AlfredBeNoel"},"content":" Boolean isTest;","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"AlfredBeNoel"},"content":" ByteArrayInputStream simulatedInput;","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"AlfredBeNoel"},"content":" public Ui() {","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"AlfredBeNoel"},"content":" this.input \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"AlfredBeNoel"},"content":" public String getNextLine() {","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"AlfredBeNoel"},"content":" if (this.input.hasNextLine()) {","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"AlfredBeNoel"},"content":" return this.input.nextLine();","lastModifiedDate":"2023-09-10"},{"lineNumber":21,"author":{"gitId":"AlfredBeNoel"},"content":" } else if (this.isTest) {","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"AlfredBeNoel"},"content":" return simulatedInput.toString();","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"AlfredBeNoel"},"content":" } else {","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"AlfredBeNoel"},"content":" throw new NoSuchElementException(\"No line found\");","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":27,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"AlfredBeNoel"},"content":" public void showLoadingError() {","lastModifiedDate":"2023-09-10"},{"lineNumber":30,"author":{"gitId":"AlfredBeNoel"},"content":" System.out.println(\"Error reading file!\");","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":33,"author":{"gitId":"AlfredBeNoel"},"content":"}","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"AlfredBeNoel":33}},{"path":"src/main/java/noelPackage/tasks/Deadlines.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AlfredBeNoel"},"content":"package noelPackage.tasks;","lastModifiedDate":"2023-09-10"},{"lineNumber":2,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"AlfredBeNoel"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"AlfredBeNoel"},"content":"import java.time.LocalTime;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"AlfredBeNoel"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"AlfredBeNoel"},"content":"public class Deadlines extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"AlfredBeNoel"},"content":" final String taskChar \u003d \"[D]\";","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"AlfredBeNoel"},"content":" protected LocalDate dueDate;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"AlfredBeNoel"},"content":" protected LocalTime dueTime;","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"AlfredBeNoel"},"content":" public Deadlines(String taskName, LocalDate deadlineDate, LocalTime deadlineTime) {","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"AlfredBeNoel"},"content":" super(taskName);","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"AlfredBeNoel"},"content":" this.dueDate \u003d deadlineDate;","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"AlfredBeNoel"},"content":" this.dueTime \u003d deadlineTime;","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"AlfredBeNoel"},"content":" public String formatDate() {","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"AlfredBeNoel"},"content":" return this.dueDate.format(DateTimeFormatter.ofPattern(\"yyyy-MM-dd\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"AlfredBeNoel"},"content":" public String formatTime() {","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"AlfredBeNoel"},"content":" return this.dueTime.format(DateTimeFormatter.ofPattern(\"HH:mm\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"AlfredBeNoel"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"AlfredBeNoel"},"content":" public String toFileString() {","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"AlfredBeNoel"},"content":" String taskDetails \u003d super.getTaskName() + \" | \" + formatDate() + \" \" + formatTime();","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"AlfredBeNoel"},"content":" return \"D | \" + super.getStatusNumber() + \" | \" + taskDetails;","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"AlfredBeNoel"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"AlfredBeNoel"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"AlfredBeNoel"},"content":" return taskChar + super.toString() + \" (by: \" + formatDate() + \" \" + formatTime() + \")\";","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"AlfredBeNoel"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"AlfredBeNoel":37}},{"path":"src/main/java/noelPackage/tasks/Events.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AlfredBeNoel"},"content":"package noelPackage.tasks;","lastModifiedDate":"2023-09-10"},{"lineNumber":2,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"AlfredBeNoel"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"AlfredBeNoel"},"content":"import java.time.LocalTime;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"AlfredBeNoel"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"AlfredBeNoel"},"content":"public class Events extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"AlfredBeNoel"},"content":" final String taskChar \u003d \"[E]\";","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"AlfredBeNoel"},"content":" protected LocalDate startDate;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"AlfredBeNoel"},"content":" protected LocalTime startTime;","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"AlfredBeNoel"},"content":" protected LocalDate endDate;","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"AlfredBeNoel"},"content":" protected LocalTime endTime;","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"AlfredBeNoel"},"content":" protected String dateString \u003d \"\";","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"AlfredBeNoel"},"content":" public Events(String taskName, LocalDate startDate, LocalTime startTime, LocalDate endDate, LocalTime endTime) {","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"AlfredBeNoel"},"content":" super(taskName);","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"AlfredBeNoel"},"content":" setDates(startDate, startTime, endDate, endTime);","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"AlfredBeNoel"},"content":" public String formatDate(LocalDate date) {","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"AlfredBeNoel"},"content":" return date.format(DateTimeFormatter.ofPattern(\"yyyy-MM-dd\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"AlfredBeNoel"},"content":" public String formatTime(LocalTime time) {","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"AlfredBeNoel"},"content":" return time.format(DateTimeFormatter.ofPattern(\"HH:mm\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"AlfredBeNoel"},"content":" public void setDates(LocalDate start, LocalTime startTime, LocalDate end, LocalTime endTime) {","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"AlfredBeNoel"},"content":" this.startDate \u003d start;","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"AlfredBeNoel"},"content":" this.endDate \u003d end;","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"AlfredBeNoel"},"content":" this.startTime \u003d startTime;","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"AlfredBeNoel"},"content":" this.endTime \u003d endTime;","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"AlfredBeNoel"},"content":" String startDateTime \u003d formatDate(this.startDate) + \" \" + formatTime(this.startTime);","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"AlfredBeNoel"},"content":" String endDateTime \u003d formatDate(this.endDate) + \" \" + formatTime(this.endTime);","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"AlfredBeNoel"},"content":" this.dateString \u003d \"(from: \" + startDateTime + \" to: \" + endDateTime + \")\";","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"AlfredBeNoel"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"AlfredBeNoel"},"content":" public String toFileString() {","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"AlfredBeNoel"},"content":" return \"E | \" + super.getStatusNumber() + \" | \" + this.taskName + \" | \" + this.dateString;","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"AlfredBeNoel"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":45,"author":{"gitId":"AlfredBeNoel"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":46,"author":{"gitId":"AlfredBeNoel"},"content":" return taskChar + super.toString() + this.dateString;","lastModifiedDate":"2023-08-24"},{"lineNumber":47,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":48,"author":{"gitId":"AlfredBeNoel"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"AlfredBeNoel":48}},{"path":"src/main/java/noelPackage/tasks/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AlfredBeNoel"},"content":"package noelPackage.tasks;","lastModifiedDate":"2023-09-10"},{"lineNumber":2,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"AlfredBeNoel"},"content":"public class Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"AlfredBeNoel"},"content":" protected String taskName;","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"AlfredBeNoel"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"AlfredBeNoel"},"content":" public Task(String taskName) {","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"AlfredBeNoel"},"content":" this.taskName \u003d taskName;","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"AlfredBeNoel"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"AlfredBeNoel"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"AlfredBeNoel"},"content":" return (isDone ? \"X\" : \" \"); // mark done task with X","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"AlfredBeNoel"},"content":" public String getStatusNumber() {","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"AlfredBeNoel"},"content":" return (isDone ? \"1\" : \"0\"); // mark done task with 1","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"AlfredBeNoel"},"content":" public String getTaskName() {","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"AlfredBeNoel"},"content":" return this.taskName;","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"AlfredBeNoel"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":26,"author":{"gitId":"AlfredBeNoel"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":27,"author":{"gitId":"AlfredBeNoel"},"content":" return \"[\" + getStatusIcon() + \"] \" + this.taskName;","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":29,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":30,"author":{"gitId":"AlfredBeNoel"},"content":" public String toFileString() {","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"AlfredBeNoel"},"content":" return \"\";","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"AlfredBeNoel"},"content":" private void markPrintHelper(String message) {","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"AlfredBeNoel"},"content":" String filler \u003d \"____________________________________________________________\";","lastModifiedDate":"2023-08-23"},{"lineNumber":36,"author":{"gitId":"AlfredBeNoel"},"content":" System.out.println(filler);","lastModifiedDate":"2023-08-23"},{"lineNumber":37,"author":{"gitId":"AlfredBeNoel"},"content":" System.out.println(message);","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"AlfredBeNoel"},"content":" System.out.println(this);","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"AlfredBeNoel"},"content":" System.out.println(filler);","lastModifiedDate":"2023-08-23"},{"lineNumber":40,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":41,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":42,"author":{"gitId":"AlfredBeNoel"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":43,"author":{"gitId":"AlfredBeNoel"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-24"},{"lineNumber":44,"author":{"gitId":"AlfredBeNoel"},"content":" markPrintHelper(\" Nice! I\u0027ve marked this task as done:\");","lastModifiedDate":"2023-08-24"},{"lineNumber":45,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":46,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":47,"author":{"gitId":"AlfredBeNoel"},"content":" public void unMark() {","lastModifiedDate":"2023-08-23"},{"lineNumber":48,"author":{"gitId":"AlfredBeNoel"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-23"},{"lineNumber":49,"author":{"gitId":"AlfredBeNoel"},"content":" markPrintHelper(\" OK, I\u0027ve marked this task as not done yet:\");","lastModifiedDate":"2023-08-24"},{"lineNumber":50,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":51,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":52,"author":{"gitId":"AlfredBeNoel"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"AlfredBeNoel":52}},{"path":"src/main/java/noelPackage/tasks/ToDos.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AlfredBeNoel"},"content":"package noelPackage.tasks;","lastModifiedDate":"2023-09-10"},{"lineNumber":2,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"AlfredBeNoel"},"content":"public class ToDos extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"AlfredBeNoel"},"content":" final String taskChar \u003d \"[T]\";","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"AlfredBeNoel"},"content":" public ToDos(String taskName) {","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"AlfredBeNoel"},"content":" super(taskName);","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"AlfredBeNoel"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"AlfredBeNoel"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"AlfredBeNoel"},"content":" return taskChar + super.toString();","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"AlfredBeNoel"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"AlfredBeNoel"},"content":" public String toFileString() {","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"AlfredBeNoel"},"content":" return \"T | \" + super.getStatusNumber() + \" | \" + super.getTaskName();","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"AlfredBeNoel"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"AlfredBeNoel":21}},{"path":"src/test/java/noelPackage/helper/StorageTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AlfredBeNoel"},"content":"package noelPackage.helper;","lastModifiedDate":"2023-09-10"},{"lineNumber":2,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"AlfredBeNoel"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"AlfredBeNoel"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"AlfredBeNoel"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"AlfredBeNoel"},"content":"import java.util.List;","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"AlfredBeNoel"},"content":"public class StorageTest {","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"AlfredBeNoel"},"content":" @Test","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"AlfredBeNoel"},"content":" public void loadFileTest() {","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"AlfredBeNoel"},"content":" Storage testStorage \u003d new Storage(\"./_loadFileTest.txt\");","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"AlfredBeNoel"},"content":" String expected \u003d \"T | 1 | read\\n\" +","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"AlfredBeNoel"},"content":" \"E | 1 | ori | (from: 2033-04-04 06:00 to: 2020-04-04 06:00)\\n\" +","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"AlfredBeNoel"},"content":" \"D | 0 | read | 2023-04-03 06:00\\n\" +","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"AlfredBeNoel"},"content":" \"T | 0 | read\";","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"AlfredBeNoel"},"content":" assertEquals(expected, testStorage.checkFile());","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":21,"author":{"gitId":"AlfredBeNoel"},"content":" @Test","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"AlfredBeNoel"},"content":" public void writeFileTest() {","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"AlfredBeNoel"},"content":" Storage writeStorage \u003d new Storage(\"./_writeFileTest.txt\");","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"AlfredBeNoel"},"content":" String taskString \u003d \"T | 1 | read\";","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"AlfredBeNoel"},"content":" writeStorage.checkFile();","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":27,"author":{"gitId":"AlfredBeNoel"},"content":" List\u003cString\u003e listOfTasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"AlfredBeNoel"},"content":" listOfTasks.add(taskString);","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"AlfredBeNoel"},"content":" writeStorage.writeToFile(listOfTasks);","lastModifiedDate":"2023-09-10"},{"lineNumber":30,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"AlfredBeNoel"},"content":" assertEquals(taskString + \"\\n\", writeStorage.checkFile());","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":33,"author":{"gitId":"AlfredBeNoel"},"content":"}","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"AlfredBeNoel":33}},{"path":"src/test/java/noelPackage/tasks/DeadlinesTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AlfredBeNoel"},"content":"package noelPackage.tasks;","lastModifiedDate":"2023-09-10"},{"lineNumber":2,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"AlfredBeNoel"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"AlfredBeNoel"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"AlfredBeNoel"},"content":"import java.time.LocalTime;","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"AlfredBeNoel"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"AlfredBeNoel"},"content":"public class DeadlinesTest {","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"AlfredBeNoel"},"content":" @Test","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"AlfredBeNoel"},"content":" public void testStringFormat() {","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"AlfredBeNoel"},"content":" LocalDate date \u003d LocalDate.parse(\"2023-02-03\");","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"AlfredBeNoel"},"content":" LocalTime time \u003d LocalTime.parse(\"09:00\");","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"AlfredBeNoel"},"content":" Deadlines testDeadline1 \u003d new Deadlines(\"test\", date, time);","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"AlfredBeNoel"},"content":" String actualOutput \u003d \"[D][ ] test (by: 2023-02-03 09:00)\";","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"AlfredBeNoel"},"content":" assertEquals(actualOutput, testDeadline1.toString());","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":21,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"AlfredBeNoel"},"content":" @Test","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"AlfredBeNoel"},"content":" public void testFileFormat() {","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"AlfredBeNoel"},"content":" LocalDate date \u003d LocalDate.parse(\"2023-02-03\");","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"AlfredBeNoel"},"content":" LocalTime time \u003d LocalTime.parse(\"09:00\");","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"AlfredBeNoel"},"content":" Deadlines testDeadline2 \u003d new Deadlines(\"test\", date, time);","lastModifiedDate":"2023-09-10"},{"lineNumber":27,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"AlfredBeNoel"},"content":" String actualOutput \u003d \"D | 0 | test | 2023-02-03 09:00\";","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"AlfredBeNoel"},"content":" assertEquals(actualOutput, testDeadline2.toFileString());","lastModifiedDate":"2023-09-10"},{"lineNumber":30,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"AlfredBeNoel"},"content":"}","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"AlfredBeNoel":32}},{"path":"src/test/java/noelPackage/tasks/ToDosTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AlfredBeNoel"},"content":"package noelPackage.tasks;","lastModifiedDate":"2023-09-10"},{"lineNumber":2,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"AlfredBeNoel"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"AlfredBeNoel"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"AlfredBeNoel"},"content":"public class ToDosTest {","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"AlfredBeNoel"},"content":" @Test","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"AlfredBeNoel"},"content":" public void testStringFormat() {","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"AlfredBeNoel"},"content":" ToDos toDoTest1 \u003d new ToDos(\"read book\");","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"AlfredBeNoel"},"content":" String expectedOutput \u003d \"[T][ ] read book\";","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"AlfredBeNoel"},"content":" assertEquals(expectedOutput, toDoTest1.toString());","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"AlfredBeNoel"},"content":" @Test","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"AlfredBeNoel"},"content":" public void testFileFormat() {","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"AlfredBeNoel"},"content":" ToDos toDoTest2 \u003d new ToDos(\"read book\");","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"AlfredBeNoel"},"content":" String expectedOutput \u003d \"T | 0 | read book\";","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"AlfredBeNoel"},"content":" assertEquals(expectedOutput, toDoTest2.toFileString());","lastModifiedDate":"2023-09-10"},{"lineNumber":21,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"AlfredBeNoel"},"content":"}","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"AlfredBeNoel":22}},{"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":"AlfredBeNoel"},"content":"java -classpath ../bin Noel \u003c input.txt \u003e ACTUAL.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":"-"},"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":{"AlfredBeNoel":1,"-":37}}] diff --git a/AlfredBeNoel_ip_master/commits.json b/AlfredBeNoel_ip_master/commits.json index 5b95ab1b..aefcb000 100644 --- a/AlfredBeNoel_ip_master/commits.json +++ b/AlfredBeNoel_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"AlfredBeNoel":[{"date":"2023-08-23","commitResults":[{"hash":"edacd588008044de8f242a546cc976ae66dcbd22","isMergeCommit":false,"messageTitle":"Level-0 modified: src/main/java/Noel.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":0}}},{"hash":"283a7fa92cb2ee01699562fe02ab4fb2b67bce4a","isMergeCommit":false,"messageTitle":"Update Noel.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":7}}},{"hash":"3e5e9d54685054615b29d16e44f294ee67199dd5","isMergeCommit":false,"messageTitle":"Update Noel.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":4}}},{"hash":"5af9f158ec6294c1daed500d69481b1d5eb4c413","isMergeCommit":false,"messageTitle":"Level-2","messageBody":"Solution for Level-2\n","fileTypesAndContributionMap":{"java":{"insertions":53,"deletions":1}}},{"hash":"e0317ca436c0d17978ac493b52507c830037efde","isMergeCommit":false,"messageTitle":"Level-3","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":60,"deletions":5}}}]},{"date":"2023-08-24","commitResults":[{"hash":"7f69aa146458f6345ba83cbd5a220c34cd5b1512","isMergeCommit":false,"messageTitle":"Level-5","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":192,"deletions":39},"sh":{"insertions":1,"deletions":1}}},{"hash":"8abdfecdd8a6655e3412686b593e6905c0301fad","isMergeCommit":false,"messageTitle":"Level-6","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":32,"deletions":34}}}]},{"date":"2023-09-02","commitResults":[{"hash":"2c9a8fb6d5256a3abda9f305a04e6c1f9639b7cb","isMergeCommit":false,"messageTitle":"Add changes for Level-7","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":0}}},{"hash":"239cd4c3bb9ebedc9b50debc94ff1a221b545ea4","isMergeCommit":false,"messageTitle":"Add changes to java files for Level-7","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":129,"deletions":9}}},{"hash":"940c2caf9194d5f6913619911f99c420260cee0b","isMergeCommit":false,"messageTitle":"Level-7","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":0}}}]},{"date":"2023-09-04","commitResults":[{"hash":"7c541177c47266f563076a5c0eddf4b097c041d1","isMergeCommit":false,"messageTitle":"Add changes for Level-8","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":5},"java":{"insertions":149,"deletions":36}}},{"hash":"b16b8e433b774243c8668e018e1c78378758d99d","isMergeCommit":false,"messageTitle":"Change for A-Packages","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":484,"deletions":369}}},{"hash":"9a77859c55ce69dbb171e9c64c1dc2a7dcf889bd","isMergeCommit":false,"messageTitle":"A-Packages","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":1},"java":{"insertions":145,"deletions":110}}}]}]},"authorFileTypeContributionMap":{"AlfredBeNoel":{"java":667,"md":0,"fxml":0,"sh":1,"bat":0,"gradle":0,"txt":4}},"authorContributionVariance":{"AlfredBeNoel":90762.54},"authorDisplayNameMap":{"AlfredBeNoel":"CS2103T-W15-3 ANTO.. BEN"}} +{"authorDailyContributionsMap":{"AlfredBeNoel":[{"date":"2023-08-23","commitResults":[{"hash":"edacd588008044de8f242a546cc976ae66dcbd22","isMergeCommit":false,"messageTitle":"Level-0 modified: src/main/java/Noel.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":0}}},{"hash":"283a7fa92cb2ee01699562fe02ab4fb2b67bce4a","isMergeCommit":false,"messageTitle":"Update Noel.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":7}}},{"hash":"3e5e9d54685054615b29d16e44f294ee67199dd5","isMergeCommit":false,"messageTitle":"Update Noel.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":4}}},{"hash":"5af9f158ec6294c1daed500d69481b1d5eb4c413","isMergeCommit":false,"messageTitle":"Level-2","messageBody":"Solution for Level-2\n","fileTypesAndContributionMap":{"java":{"insertions":53,"deletions":1}}},{"hash":"e0317ca436c0d17978ac493b52507c830037efde","isMergeCommit":false,"messageTitle":"Level-3","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":60,"deletions":5}}}]},{"date":"2023-08-24","commitResults":[{"hash":"7f69aa146458f6345ba83cbd5a220c34cd5b1512","isMergeCommit":false,"messageTitle":"Level-5","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":192,"deletions":39},"sh":{"insertions":1,"deletions":1}}},{"hash":"8abdfecdd8a6655e3412686b593e6905c0301fad","isMergeCommit":false,"messageTitle":"Level-6","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":32,"deletions":34}}}]},{"date":"2023-09-02","commitResults":[{"hash":"2c9a8fb6d5256a3abda9f305a04e6c1f9639b7cb","isMergeCommit":false,"messageTitle":"Add changes for Level-7","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":0}}},{"hash":"239cd4c3bb9ebedc9b50debc94ff1a221b545ea4","isMergeCommit":false,"messageTitle":"Add changes to java files for Level-7","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":129,"deletions":9}}},{"hash":"940c2caf9194d5f6913619911f99c420260cee0b","isMergeCommit":false,"messageTitle":"Level-7","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":0}}}]},{"date":"2023-09-04","commitResults":[{"hash":"7c541177c47266f563076a5c0eddf4b097c041d1","isMergeCommit":false,"messageTitle":"Add changes for Level-8","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":5},"java":{"insertions":149,"deletions":36}}},{"hash":"b16b8e433b774243c8668e018e1c78378758d99d","isMergeCommit":false,"messageTitle":"Change for A-Packages","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":484,"deletions":369}}},{"hash":"9a77859c55ce69dbb171e9c64c1dc2a7dcf889bd","isMergeCommit":false,"messageTitle":"A-Packages","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":1},"java":{"insertions":145,"deletions":110}}}]},{"date":"2023-09-10","commitResults":[{"hash":"c39fcb67a8eedde1b7aec80ba1cb59d232ebd4ab","isMergeCommit":false,"messageTitle":"A-JUnit","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":28,"deletions":0},"txt":{"insertions":8,"deletions":1},"java":{"insertions":147,"deletions":46}}}]}]},"authorFileTypeContributionMap":{"AlfredBeNoel":{"java":768,"md":0,"fxml":0,"sh":1,"bat":0,"gradle":28,"txt":11}},"authorContributionVariance":{"AlfredBeNoel":70760.19},"authorDisplayNameMap":{"AlfredBeNoel":"CS2103T-W15-3 ANTO.. BEN"}} diff --git a/Bombbird2001_ip_master/commits.json b/Bombbird2001_ip_master/commits.json index 8228e4ee..110b496f 100644 --- a/Bombbird2001_ip_master/commits.json +++ b/Bombbird2001_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"Bombbird2001":[{"date":"2023-08-21","commitResults":[{"hash":"1005f73546e87efa73c0860a19d824f1e038306a","isMergeCommit":false,"messageTitle":"Level-0 changes","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":6}}},{"hash":"9a31dff466d2d4223aa9f7a82e3807f6f358f24a","isMergeCommit":false,"messageTitle":"Level-1 changes","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":28,"deletions":3}}},{"hash":"b234c09eb33ed99e7508fba8871577a7262e930f","isMergeCommit":false,"messageTitle":"Level-2 changes","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":61,"deletions":12}}}]},{"date":"2023-08-22","commitResults":[{"hash":"1f988ed7f5146e76fde07b27647ae67a221caf0f","isMergeCommit":false,"messageTitle":"Level-3 changes","messageBody":"","tags":["Level-3","A-Classes"],"fileTypesAndContributionMap":{"java":{"insertions":106,"deletions":8}}},{"hash":"1e64293b45610814f2c1d49567f333a388274068","isMergeCommit":false,"messageTitle":"Level-4 changes","messageBody":"","tags":["Level-4","A-Inheritance"],"fileTypesAndContributionMap":{"java":{"insertions":242,"deletions":27}}},{"hash":"57d52cc5abf3f839beb6dbda7ab7e01b097f7995","isMergeCommit":false,"messageTitle":"TextUiTesting changes","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":14,"deletions":0},"java":{"insertions":2,"deletions":1}}},{"hash":"6b8e55169c13c5d4330c580da7abd1969fad455b","isMergeCommit":false,"messageTitle":"Level-5 changes","messageBody":"","tags":["Level-5","A-Exceptions"],"fileTypesAndContributionMap":{"txt":{"insertions":6,"deletions":0},"java":{"insertions":70,"deletions":57}}},{"hash":"942c5deb537ed759cf411bf7b4a10d97631ff710","isMergeCommit":false,"messageTitle":"Level-6 changes","messageBody":"","tags":["Level-6","A-Collections"],"fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0},"java":{"insertions":140,"deletions":100}}}]},{"date":"2023-08-23","commitResults":[{"hash":"9efc4502d625991a0fa66f9882711249fed97cfb","isMergeCommit":false,"messageTitle":"Enum changes","messageBody":"","tags":["A-Enums"],"fileTypesAndContributionMap":{"java":{"insertions":54,"deletions":41}}}]},{"date":"2023-08-26","commitResults":[{"hash":"f040392dbce3eef9fe940c9e267f981aea772d28","isMergeCommit":false,"messageTitle":"Add saving \u0026 loading of tasks to/from disk file","messageBody":"","tags":["A-Varargs"],"fileTypesAndContributionMap":{"java":{"insertions":298,"deletions":33}}},{"hash":"5f18440785d73f41945c10122d1d039c953d4e4f","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"ec33ed10c23ad9524de74ba13bf6e99c5a1fa1c3","isMergeCommit":false,"messageTitle":"Add datetime or date formats for deadlines, events","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":97,"deletions":27}}},{"hash":"10e90417b218c78c0dab39408bc47c6a15a07bd3","isMergeCommit":false,"messageTitle":"Update tests to account for datetime input","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":1},"java":{"insertions":0,"deletions":2},"bat":{"insertions":3,"deletions":0}}},{"hash":"c9542cfa966a1f05a31ddc0f4d97cd887d5e8479","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-27","commitResults":[{"hash":"d5da861bc054f02ced6c95272eb2f404838ed48d","isMergeCommit":false,"messageTitle":"Extract classes to parser, UI, command, storage categories","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":550,"deletions":339},"bat":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}},{"hash":"56b6a6728beff898718da6ef6df4a88d4fbf1376","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-MoreOOP\u0027","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"0d1b91f49456a425f8c3c1fa49443d7ab9137f91","isMergeCommit":false,"messageTitle":"Move all classes to packages","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":76,"deletions":74},"bat":{"insertions":1,"deletions":1}}},{"hash":"0baafd5a382353c95dccc43b9cb1085c9b6f7439","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Packages\u0027","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-28","commitResults":[{"hash":"30373992f61849fdda518391bb9e2680a2c5d6c1","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/add-gradle-support\u0027 into branch-A-Gradle","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"c9fb66fb6447ea05c4d0a87fcd5457a47e070205","isMergeCommit":false,"messageTitle":"Add gradle, with junit enabled","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":3,"deletions":3},"java":{"insertions":12,"deletions":0}}},{"hash":"817faed65b1bd175718f66245846738dddbee28c","isMergeCommit":false,"messageTitle":"Add tests for DateOptionalTime class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":68,"deletions":3}}},{"hash":"214bf4c48a498439fb9cd00075a5333f7c81b97e","isMergeCommit":false,"messageTitle":"Add tests for TodoCommand class","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":143,"deletions":48}}},{"hash":"095dd24a3eb26713708c342c99a4496d3685a470","isMergeCommit":false,"messageTitle":"Update jar name","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}}]},{"date":"2023-08-29","commitResults":[{"hash":"b7b09b6fca4a2ee8241857c0fe9ec532f9d04356","isMergeCommit":false,"messageTitle":"Update some method JavaDocs","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":3}}},{"hash":"fa0b03b417a63f3d84bd84d7bfdc45d53d3359d7","isMergeCommit":false,"messageTitle":"Add line breaks for long lines","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":5}}},{"hash":"189c82ef22e36c6b3f687c3ef2d02b3791521f13","isMergeCommit":false,"messageTitle":"Add support for find command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":82,"deletions":1}}},{"hash":"3c90b79e300e651844a09a9e06dcd9787a4a8398","isMergeCommit":false,"messageTitle":"Add automated test for find command","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0},"bat":{"insertions":1,"deletions":1}}},{"hash":"ea0e55e34219e63b6017f4f579fd1617d24de59a","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{}},{"hash":"2d6d8bdca9ad7f71f919396d2955125f8db76ed7","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"52942ca8a590844e58f13113127fdccdc0788c85","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"# Conflicts:\n#\tsrc/main/java/shiba/tasks/PersistentTaskList.java\n","tags":["Level-9"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-01","commitResults":[{"hash":"421bd24f1ca4788d18f140a3d340299b79506a22","isMergeCommit":false,"messageTitle":"Fixed checkstyle violations","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":0},"java":{"insertions":277,"deletions":109}}}]},{"date":"2023-09-03","commitResults":[{"hash":"9e73a7438908f0f52b515e31e368d67fbbc330fc","isMergeCommit":false,"messageTitle":"Add checkstyle version; checkstyle violations have been fixed earlier","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{"gradle":{"insertions":4,"deletions":0}}},{"hash":"a59785dbe0bcbe4925123c6420fa584d136a171f","isMergeCommit":false,"messageTitle":"Add initial layout for UI","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":6,"deletions":0},"java":{"insertions":119,"deletions":2}}},{"hash":"854d1fb1a15d760f572336bcd541ac86430eed9e","isMergeCommit":false,"messageTitle":"Implement full UI including user input, bot response","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":290,"deletions":123}}},{"hash":"2d81d81bdc9f2e3e36b6cb3728384a5be5fee4e0","isMergeCommit":false,"messageTitle":"Fix checkstyle violations, prevent user from sending empty input","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":60,"deletions":34}}}]},{"date":"2023-09-04","commitResults":[{"hash":"742d457337924e67e9f2c6e1ff12311aaf692c61","isMergeCommit":false,"messageTitle":"Print start message only after window startup","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":10}}},{"hash":"0f26a04e4ba8b881c391362fe3a8b044bace50ae","isMergeCommit":false,"messageTitle":"Remove unnecessary thread","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"059ea0fb7dcaf023f60adef6453a90b7418339ea","isMergeCommit":false,"messageTitle":"Add pat, bellyrub commands","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":76,"deletions":10}}},{"hash":"a107684abdcb9788bd97a596b622b495a1b02a52","isMergeCommit":false,"messageTitle":"Change wildcard import for coding standard","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":1}}},{"hash":"41adbfcec44476c85443fcc0daee4055ae3fa270","isMergeCommit":false,"messageTitle":"Add better indentation for different text; add press enter to send command","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{"java":{"insertions":149,"deletions":84}}},{"hash":"f43746da545f5bbadad9eaf6bf9e463267f8a6c5","isMergeCommit":false,"messageTitle":"Add missing inheritdoc to overriding methods","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":25,"deletions":1}}},{"hash":"19a7e79a3592aa23273570f121b1f86aececcbcf","isMergeCommit":false,"messageTitle":"Fix program not ending when closed using close button","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":1}}},{"hash":"beaa537837d059b2406e67fcbc71db65a63a1e49","isMergeCommit":false,"messageTitle":"Update README.md; varargs have already been added in an earlier commit","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":3,"deletions":11}}},{"hash":"9b31b23836ce12d9c57280f9d10d11e29e33da00","isMergeCommit":false,"messageTitle":"Change gradle to build with Java 11","messageBody":"","tags":["v1.1"],"fileTypesAndContributionMap":{"gradle":{"insertions":4,"deletions":0},"java":{"insertions":2,"deletions":2}}}]},{"date":"2023-09-09","commitResults":[{"hash":"bd24b6daf5911f74c52c29ebdc0fd54147040de8","isMergeCommit":false,"messageTitle":"Add assertions","messageBody":"We are not able to pass an instance of Shiba to MainWindow, and vice\nversa, so we have singletons for both of these classes instead. Hence,\nwe check that the singleton instance does not already exist when\ncreating a new instance.\n\nWe also assert that a file exists after creating it with no errors.\n","fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":18}}},{"hash":"51db94f99469eb7b659992fb712865721e652cc1","isMergeCommit":false,"messageTitle":"Improve code style, add indent for tasks in find command","messageBody":"Currently, tasks are not indented in the find command.\nIndented block for tasks will make them easier to read.\n","fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":10}}},{"hash":"2026f3ec6b36783cba6a541318f91ed62de818f5","isMergeCommit":false,"messageTitle":"Use streams for find command","messageBody":"Improved readability and more concise code using streams\nas compared to using a conventional for loop\n","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":7}}},{"hash":"e0ab2a1bff5dc0f9cae7a968dbd339b6175b8f9b","isMergeCommit":true,"messageTitle":"Merge pull request #1 from Bombbird2001/branch-A-Assertions","messageBody":"Add assertions","tags":["A-Assertions"],"fileTypesAndContributionMap":{}},{"hash":"b8ec4a584cbaf70b9a775fa479639b65e52c0eea","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-A-CodeQuality","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"76340391f3addb1d154bda691fa4d543561d3214","isMergeCommit":true,"messageTitle":"Merge pull request #2 from Bombbird2001/branch-A-CodeQuality","messageBody":"Improve code style, add indent for tasks in find command","tags":["A-CodeQuality"],"fileTypesAndContributionMap":{}},{"hash":"3303102719226a87d41b8425cef0c02e85762100","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-A-Streams","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"a36c8f2ddef6769d4b75263be8d16bb5ef254a78","isMergeCommit":true,"messageTitle":"Merge pull request #3 from Bombbird2001/branch-A-Streams","messageBody":"Use streams for find command","tags":["A-Streams"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"Bombbird2001":{"java":1933,"md":3,"fxml":0,"sh":0,"bat":5,"gradle":17,"txt":28}},"authorContributionVariance":{"Bombbird2001":83181.44},"authorDisplayNameMap":{"Bombbird2001":"CS2103T-W13-3 KU S..G YI"}} +{"authorDailyContributionsMap":{"Bombbird2001":[{"date":"2023-08-21","commitResults":[{"hash":"1005f73546e87efa73c0860a19d824f1e038306a","isMergeCommit":false,"messageTitle":"Level-0 changes","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":6}}},{"hash":"9a31dff466d2d4223aa9f7a82e3807f6f358f24a","isMergeCommit":false,"messageTitle":"Level-1 changes","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":28,"deletions":3}}},{"hash":"b234c09eb33ed99e7508fba8871577a7262e930f","isMergeCommit":false,"messageTitle":"Level-2 changes","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":61,"deletions":12}}}]},{"date":"2023-08-22","commitResults":[{"hash":"1f988ed7f5146e76fde07b27647ae67a221caf0f","isMergeCommit":false,"messageTitle":"Level-3 changes","messageBody":"","tags":["Level-3","A-Classes"],"fileTypesAndContributionMap":{"java":{"insertions":106,"deletions":8}}},{"hash":"1e64293b45610814f2c1d49567f333a388274068","isMergeCommit":false,"messageTitle":"Level-4 changes","messageBody":"","tags":["Level-4","A-Inheritance"],"fileTypesAndContributionMap":{"java":{"insertions":242,"deletions":27}}},{"hash":"57d52cc5abf3f839beb6dbda7ab7e01b097f7995","isMergeCommit":false,"messageTitle":"TextUiTesting changes","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":14,"deletions":0},"java":{"insertions":2,"deletions":1}}},{"hash":"6b8e55169c13c5d4330c580da7abd1969fad455b","isMergeCommit":false,"messageTitle":"Level-5 changes","messageBody":"","tags":["Level-5","A-Exceptions"],"fileTypesAndContributionMap":{"txt":{"insertions":6,"deletions":0},"java":{"insertions":70,"deletions":57}}},{"hash":"942c5deb537ed759cf411bf7b4a10d97631ff710","isMergeCommit":false,"messageTitle":"Level-6 changes","messageBody":"","tags":["Level-6","A-Collections"],"fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0},"java":{"insertions":140,"deletions":100}}}]},{"date":"2023-08-23","commitResults":[{"hash":"9efc4502d625991a0fa66f9882711249fed97cfb","isMergeCommit":false,"messageTitle":"Enum changes","messageBody":"","tags":["A-Enums"],"fileTypesAndContributionMap":{"java":{"insertions":54,"deletions":41}}}]},{"date":"2023-08-26","commitResults":[{"hash":"f040392dbce3eef9fe940c9e267f981aea772d28","isMergeCommit":false,"messageTitle":"Add saving \u0026 loading of tasks to/from disk file","messageBody":"","tags":["A-Varargs"],"fileTypesAndContributionMap":{"java":{"insertions":298,"deletions":33}}},{"hash":"5f18440785d73f41945c10122d1d039c953d4e4f","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"ec33ed10c23ad9524de74ba13bf6e99c5a1fa1c3","isMergeCommit":false,"messageTitle":"Add datetime or date formats for deadlines, events","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":97,"deletions":27}}},{"hash":"10e90417b218c78c0dab39408bc47c6a15a07bd3","isMergeCommit":false,"messageTitle":"Update tests to account for datetime input","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":1},"java":{"insertions":0,"deletions":2},"bat":{"insertions":3,"deletions":0}}},{"hash":"c9542cfa966a1f05a31ddc0f4d97cd887d5e8479","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-27","commitResults":[{"hash":"d5da861bc054f02ced6c95272eb2f404838ed48d","isMergeCommit":false,"messageTitle":"Extract classes to parser, UI, command, storage categories","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":550,"deletions":339},"bat":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}},{"hash":"56b6a6728beff898718da6ef6df4a88d4fbf1376","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-MoreOOP\u0027","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"0d1b91f49456a425f8c3c1fa49443d7ab9137f91","isMergeCommit":false,"messageTitle":"Move all classes to packages","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":76,"deletions":74},"bat":{"insertions":1,"deletions":1}}},{"hash":"0baafd5a382353c95dccc43b9cb1085c9b6f7439","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Packages\u0027","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-28","commitResults":[{"hash":"30373992f61849fdda518391bb9e2680a2c5d6c1","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/add-gradle-support\u0027 into branch-A-Gradle","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"c9fb66fb6447ea05c4d0a87fcd5457a47e070205","isMergeCommit":false,"messageTitle":"Add gradle, with junit enabled","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":3,"deletions":3},"java":{"insertions":12,"deletions":0}}},{"hash":"817faed65b1bd175718f66245846738dddbee28c","isMergeCommit":false,"messageTitle":"Add tests for DateOptionalTime class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":68,"deletions":3}}},{"hash":"214bf4c48a498439fb9cd00075a5333f7c81b97e","isMergeCommit":false,"messageTitle":"Add tests for TodoCommand class","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":143,"deletions":48}}},{"hash":"095dd24a3eb26713708c342c99a4496d3685a470","isMergeCommit":false,"messageTitle":"Update jar name","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}}]},{"date":"2023-08-29","commitResults":[{"hash":"b7b09b6fca4a2ee8241857c0fe9ec532f9d04356","isMergeCommit":false,"messageTitle":"Update some method JavaDocs","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":3}}},{"hash":"fa0b03b417a63f3d84bd84d7bfdc45d53d3359d7","isMergeCommit":false,"messageTitle":"Add line breaks for long lines","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":5}}},{"hash":"189c82ef22e36c6b3f687c3ef2d02b3791521f13","isMergeCommit":false,"messageTitle":"Add support for find command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":82,"deletions":1}}},{"hash":"3c90b79e300e651844a09a9e06dcd9787a4a8398","isMergeCommit":false,"messageTitle":"Add automated test for find command","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0},"bat":{"insertions":1,"deletions":1}}},{"hash":"ea0e55e34219e63b6017f4f579fd1617d24de59a","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{}},{"hash":"2d6d8bdca9ad7f71f919396d2955125f8db76ed7","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"52942ca8a590844e58f13113127fdccdc0788c85","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"# Conflicts:\n#\tsrc/main/java/shiba/tasks/PersistentTaskList.java\n","tags":["Level-9"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-01","commitResults":[{"hash":"421bd24f1ca4788d18f140a3d340299b79506a22","isMergeCommit":false,"messageTitle":"Fixed checkstyle violations","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":0},"java":{"insertions":277,"deletions":109}}}]},{"date":"2023-09-03","commitResults":[{"hash":"9e73a7438908f0f52b515e31e368d67fbbc330fc","isMergeCommit":false,"messageTitle":"Add checkstyle version; checkstyle violations have been fixed earlier","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{"gradle":{"insertions":4,"deletions":0}}},{"hash":"a59785dbe0bcbe4925123c6420fa584d136a171f","isMergeCommit":false,"messageTitle":"Add initial layout for UI","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":6,"deletions":0},"java":{"insertions":119,"deletions":2}}},{"hash":"854d1fb1a15d760f572336bcd541ac86430eed9e","isMergeCommit":false,"messageTitle":"Implement full UI including user input, bot response","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":290,"deletions":123}}},{"hash":"2d81d81bdc9f2e3e36b6cb3728384a5be5fee4e0","isMergeCommit":false,"messageTitle":"Fix checkstyle violations, prevent user from sending empty input","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":60,"deletions":34}}}]},{"date":"2023-09-04","commitResults":[{"hash":"742d457337924e67e9f2c6e1ff12311aaf692c61","isMergeCommit":false,"messageTitle":"Print start message only after window startup","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":10}}},{"hash":"0f26a04e4ba8b881c391362fe3a8b044bace50ae","isMergeCommit":false,"messageTitle":"Remove unnecessary thread","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"059ea0fb7dcaf023f60adef6453a90b7418339ea","isMergeCommit":false,"messageTitle":"Add pat, bellyrub commands","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":76,"deletions":10}}},{"hash":"a107684abdcb9788bd97a596b622b495a1b02a52","isMergeCommit":false,"messageTitle":"Change wildcard import for coding standard","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":1}}},{"hash":"41adbfcec44476c85443fcc0daee4055ae3fa270","isMergeCommit":false,"messageTitle":"Add better indentation for different text; add press enter to send command","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{"java":{"insertions":149,"deletions":84}}},{"hash":"f43746da545f5bbadad9eaf6bf9e463267f8a6c5","isMergeCommit":false,"messageTitle":"Add missing inheritdoc to overriding methods","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":25,"deletions":1}}},{"hash":"19a7e79a3592aa23273570f121b1f86aececcbcf","isMergeCommit":false,"messageTitle":"Fix program not ending when closed using close button","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":1}}},{"hash":"beaa537837d059b2406e67fcbc71db65a63a1e49","isMergeCommit":false,"messageTitle":"Update README.md; varargs have already been added in an earlier commit","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":3,"deletions":11}}},{"hash":"9b31b23836ce12d9c57280f9d10d11e29e33da00","isMergeCommit":false,"messageTitle":"Change gradle to build with Java 11","messageBody":"","tags":["v1.1"],"fileTypesAndContributionMap":{"gradle":{"insertions":4,"deletions":0},"java":{"insertions":2,"deletions":2}}}]},{"date":"2023-09-09","commitResults":[{"hash":"bd24b6daf5911f74c52c29ebdc0fd54147040de8","isMergeCommit":false,"messageTitle":"Add assertions","messageBody":"We are not able to pass an instance of Shiba to MainWindow, and vice\nversa, so we have singletons for both of these classes instead. Hence,\nwe check that the singleton instance does not already exist when\ncreating a new instance.\n\nWe also assert that a file exists after creating it with no errors.\n","fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":18}}},{"hash":"51db94f99469eb7b659992fb712865721e652cc1","isMergeCommit":false,"messageTitle":"Improve code style, add indent for tasks in find command","messageBody":"Currently, tasks are not indented in the find command.\nIndented block for tasks will make them easier to read.\n","fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":10}}},{"hash":"2026f3ec6b36783cba6a541318f91ed62de818f5","isMergeCommit":false,"messageTitle":"Use streams for find command","messageBody":"Improved readability and more concise code using streams\nas compared to using a conventional for loop\n","tags":["A-FullCommitMessage"],"fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":7}}},{"hash":"e0ab2a1bff5dc0f9cae7a968dbd339b6175b8f9b","isMergeCommit":true,"messageTitle":"Merge pull request #1 from Bombbird2001/branch-A-Assertions","messageBody":"Add assertions","tags":["A-Assertions"],"fileTypesAndContributionMap":{}},{"hash":"b8ec4a584cbaf70b9a775fa479639b65e52c0eea","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-A-CodeQuality","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"76340391f3addb1d154bda691fa4d543561d3214","isMergeCommit":true,"messageTitle":"Merge pull request #2 from Bombbird2001/branch-A-CodeQuality","messageBody":"Improve code style, add indent for tasks in find command","tags":["A-CodeQuality"],"fileTypesAndContributionMap":{}},{"hash":"3303102719226a87d41b8425cef0c02e85762100","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-A-Streams","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"a36c8f2ddef6769d4b75263be8d16bb5ef254a78","isMergeCommit":true,"messageTitle":"Merge pull request #3 from Bombbird2001/branch-A-Streams","messageBody":"Use streams for find command","tags":["A-Streams"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"Bombbird2001":{"java":1933,"md":3,"fxml":0,"sh":0,"bat":5,"gradle":17,"txt":28}},"authorContributionVariance":{"Bombbird2001":83181.44},"authorDisplayNameMap":{"Bombbird2001":"CS2103T-W13-3 KU S..G YI"}} diff --git a/Chandan8186_ip_master/authorship.json b/Chandan8186_ip_master/authorship.json index 9f300e15..4e748cc6 100644 --- a/Chandan8186_ip_master/authorship.json +++ b/Chandan8186_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"Chandan8186"},"content":"# duke.Duke project template","lastModifiedDate":"2023-08-29"},{"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":"Chandan8186"},"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-08-29"},{"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":{"Chandan8186":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":"-"},"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":"Chandan8186"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"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":"Chandan8186"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"Chandan8186"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"Chandan8186"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"Chandan8186"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"Chandan8186"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"Chandan8186"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"Chandan8186"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"Chandan8186"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"Chandan8186"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"Chandan8186"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"Chandan8186"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"Chandan8186"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"Chandan8186"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"Chandan8186"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","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":"","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":47,"author":{"gitId":"Chandan8186"},"content":" mainClass.set(\"duke.Launcher\")","lastModifiedDate":"2023-09-03"},{"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":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":52,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":53,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":54,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":55,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":56,"author":{"gitId":"-"},"content":"run {","lastModifiedDate":"2020-05-25"},{"lineNumber":57,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":58,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":59,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"Chandan8186"},"content":"checkstyle {","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"Chandan8186"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"Chandan8186"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"Chandan8186":21,"-":41}},{"path":"src/main/java/duke/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Chandan8186"},"content":"package duke;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Chandan8186"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"Chandan8186"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"Chandan8186"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"Chandan8186"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"Chandan8186"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"Chandan8186"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"Chandan8186"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"Chandan8186"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"Chandan8186"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"Chandan8186"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"Chandan8186"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"Chandan8186"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"Chandan8186"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"Chandan8186"},"content":" * An example of a custom control using FXML.","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"Chandan8186"},"content":" * This control represents a dialog box consisting of an ImageView to represent the speaker\u0027s face and a label","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"Chandan8186"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"Chandan8186"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"Chandan8186"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"Chandan8186"},"content":" private Label dialog;","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"Chandan8186"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"Chandan8186"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"Chandan8186"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"Chandan8186"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"Chandan8186"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"Chandan8186"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"Chandan8186"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"Chandan8186"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"Chandan8186"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"Chandan8186"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"Chandan8186"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"Chandan8186"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"Chandan8186"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"Chandan8186"},"content":" private void flip() {","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"Chandan8186"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"Chandan8186"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"Chandan8186"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"Chandan8186"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"Chandan8186"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"Chandan8186"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"Chandan8186"},"content":" public static DialogBox getDukeDialog(String text, Image img) {","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"Chandan8186"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"Chandan8186"},"content":" db.flip();","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"Chandan8186"},"content":" return db;","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"Chandan8186"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"Chandan8186":61}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Chandan8186"},"content":"package duke;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Chandan8186"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":5,"author":{"gitId":"Chandan8186"},"content":"import exceptions.DukeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"Chandan8186"},"content":"import tasks.Task;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"Chandan8186"},"content":"import tasks.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"Chandan8186"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Chandan8186"},"content":" * Duke is a chatbot that allows users to manage tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Chandan8186"},"content":"public class Duke {","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":14,"author":{"gitId":"Chandan8186"},"content":" protected static TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"Chandan8186"},"content":" protected static Storage storage;","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Chandan8186"},"content":" * Marks task as done.","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Chandan8186"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Chandan8186"},"content":" * @param index Index of task.","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Chandan8186"},"content":" * @return String to be shown to user.","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"Chandan8186"},"content":" * @throws DukeException If index is out of range.","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Chandan8186"},"content":" public static String markTask(int index)","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"Chandan8186"},"content":" throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"Chandan8186"},"content":" Task task \u003d Duke.taskList.markTaskAsDone(index);","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"Chandan8186"},"content":" storage.saveChanges(Duke.taskList);","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"Chandan8186"},"content":" return Ui.getTaskMarkingMessage(task);","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":30,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":31,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Chandan8186"},"content":" * Marks task as not done.","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Chandan8186"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"Chandan8186"},"content":" * @param index Index of task.","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"Chandan8186"},"content":" * @return String to be shown to user.","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"Chandan8186"},"content":" * @throws DukeException If index is out of range.","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"Chandan8186"},"content":" public static String unmarkTask(int index)","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"Chandan8186"},"content":" throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"Chandan8186"},"content":" Task task \u003d Duke.taskList.unmarkTask(index);","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"Chandan8186"},"content":" storage.saveChanges(Duke.taskList);","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"Chandan8186"},"content":" return Ui.getTaskUnmarkingMessage(task);","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":44,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":45,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"Chandan8186"},"content":" * Deletes task.","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"Chandan8186"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"Chandan8186"},"content":" * @param index Index of task.","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"Chandan8186"},"content":" * @return String to be shown to user.","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"Chandan8186"},"content":" * @throws DukeException If index is out of range.","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"Chandan8186"},"content":" public static String deleteTask(int index)","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"Chandan8186"},"content":" throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"Chandan8186"},"content":" Task task \u003d Duke.taskList.deleteTask(index);","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"Chandan8186"},"content":" storage.saveChanges(Duke.taskList);","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"Chandan8186"},"content":" return Ui.getTaskDeletingMessage(task, Duke.taskList.getSize());","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":58,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":59,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"Chandan8186"},"content":" * Creates todo task.","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"Chandan8186"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"Chandan8186"},"content":" * @param desc Description of task.","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"Chandan8186"},"content":" * @return Message to be shown after task is created.","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"Chandan8186"},"content":" public static String createTodo(String desc) {","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"Chandan8186"},"content":" Task task \u003d Duke.taskList.addTodo(desc, 0);","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"Chandan8186"},"content":" storage.saveChanges(Duke.taskList);","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"Chandan8186"},"content":" return Ui.getTaskAddingMessage(task, Duke.taskList.getSize());","lastModifiedDate":"2023-09-04"},{"lineNumber":69,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":70,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":71,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"Chandan8186"},"content":" * Creates deadline task.","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"Chandan8186"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"Chandan8186"},"content":" * @param desc Description of task.","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"Chandan8186"},"content":" * @param deadline Deadline date/time.","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"Chandan8186"},"content":" * @return Message to be shown after task is created.","lastModifiedDate":"2023-09-04"},{"lineNumber":77,"author":{"gitId":"Chandan8186"},"content":" * @throws DateTimeParseException If deadline doesn\u0027t match format \"yyyy-MM-dd HHmm\".","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"Chandan8186"},"content":" public static String createDeadline(String desc, String deadline)","lastModifiedDate":"2023-09-03"},{"lineNumber":80,"author":{"gitId":"Chandan8186"},"content":" throws DateTimeParseException {","lastModifiedDate":"2023-08-29"},{"lineNumber":81,"author":{"gitId":"Chandan8186"},"content":" Task task \u003d Duke.taskList.addDeadline(desc, deadline, 0);","lastModifiedDate":"2023-08-29"},{"lineNumber":82,"author":{"gitId":"Chandan8186"},"content":" storage.saveChanges(Duke.taskList);","lastModifiedDate":"2023-08-29"},{"lineNumber":83,"author":{"gitId":"Chandan8186"},"content":" return Ui.getTaskAddingMessage(task, Duke.taskList.getSize());","lastModifiedDate":"2023-09-04"},{"lineNumber":84,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":85,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":86,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"Chandan8186"},"content":" * Creates event task.","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"Chandan8186"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"Chandan8186"},"content":" * @param desc Description of task.","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"Chandan8186"},"content":" * @param start Start date/time.","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"Chandan8186"},"content":" * @param end End date/time.","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"Chandan8186"},"content":" * @return Message to be shown after task is created.","lastModifiedDate":"2023-09-04"},{"lineNumber":93,"author":{"gitId":"Chandan8186"},"content":" * @throws DateTimeParseException If start/end don\u0027t match format \"yyyy-MM-dd HHmm\".","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"Chandan8186"},"content":" public static String createEvent(String desc, String start, String end)","lastModifiedDate":"2023-09-03"},{"lineNumber":96,"author":{"gitId":"Chandan8186"},"content":" throws DateTimeParseException {","lastModifiedDate":"2023-08-29"},{"lineNumber":97,"author":{"gitId":"Chandan8186"},"content":" Task task \u003d Duke.taskList.addEvent(desc, start, end, 0);","lastModifiedDate":"2023-08-29"},{"lineNumber":98,"author":{"gitId":"Chandan8186"},"content":" storage.saveChanges(Duke.taskList);","lastModifiedDate":"2023-08-29"},{"lineNumber":99,"author":{"gitId":"Chandan8186"},"content":" return Ui.getTaskAddingMessage(task, Duke.taskList.getSize());","lastModifiedDate":"2023-09-04"},{"lineNumber":100,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":101,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":102,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"Chandan8186"},"content":" * Gives list of current tasks in output message format.","lastModifiedDate":"2023-09-04"},{"lineNumber":104,"author":{"gitId":"Chandan8186"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":105,"author":{"gitId":"Chandan8186"},"content":" * @return Message to be shown to user.","lastModifiedDate":"2023-09-04"},{"lineNumber":106,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"Chandan8186"},"content":" public static String listTasks() {","lastModifiedDate":"2023-09-03"},{"lineNumber":108,"author":{"gitId":"Chandan8186"},"content":" return Duke.taskList.toString();","lastModifiedDate":"2023-09-04"},{"lineNumber":109,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":110,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":111,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":112,"author":{"gitId":"Chandan8186"},"content":" * Gives list of current tasks in output message format.","lastModifiedDate":"2023-09-04"},{"lineNumber":113,"author":{"gitId":"Chandan8186"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":114,"author":{"gitId":"Chandan8186"},"content":" * @param keyword String of keyword.","lastModifiedDate":"2023-09-04"},{"lineNumber":115,"author":{"gitId":"Chandan8186"},"content":" * @return Message to be shown to user.","lastModifiedDate":"2023-09-04"},{"lineNumber":116,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":117,"author":{"gitId":"Chandan8186"},"content":" public static String listFilteredTasks(String keyword) {","lastModifiedDate":"2023-09-03"},{"lineNumber":118,"author":{"gitId":"Chandan8186"},"content":" return Duke.taskList.getMatchingTasks(keyword);","lastModifiedDate":"2023-09-03"},{"lineNumber":119,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":120,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":121,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":122,"author":{"gitId":"Chandan8186"},"content":" * Gets the response string to be printed to the user after processing user input.","lastModifiedDate":"2023-09-04"},{"lineNumber":123,"author":{"gitId":"Chandan8186"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":124,"author":{"gitId":"Chandan8186"},"content":" * @param userInput User input.","lastModifiedDate":"2023-09-04"},{"lineNumber":125,"author":{"gitId":"Chandan8186"},"content":" * @return The response string.","lastModifiedDate":"2023-09-04"},{"lineNumber":126,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":127,"author":{"gitId":"Chandan8186"},"content":" protected String getResponse(String userInput) {","lastModifiedDate":"2023-09-04"},{"lineNumber":128,"author":{"gitId":"Chandan8186"},"content":" String output \u003d \"\";","lastModifiedDate":"2023-09-03"},{"lineNumber":129,"author":{"gitId":"Chandan8186"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":130,"author":{"gitId":"Chandan8186"},"content":" output \u003d Parser.parseUserInput(userInput, Duke.taskList.getSize());","lastModifiedDate":"2023-09-03"},{"lineNumber":131,"author":{"gitId":"Chandan8186"},"content":" } catch (RuntimeException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":132,"author":{"gitId":"Chandan8186"},"content":" output \u003d e.getMessage();","lastModifiedDate":"2023-09-03"},{"lineNumber":133,"author":{"gitId":"Chandan8186"},"content":" } finally {","lastModifiedDate":"2023-09-03"},{"lineNumber":134,"author":{"gitId":"Chandan8186"},"content":" return output;","lastModifiedDate":"2023-09-03"},{"lineNumber":135,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":136,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":137,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":138,"author":{"gitId":"Chandan8186"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"Chandan8186":138}},{"path":"src/main/java/duke/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Chandan8186"},"content":"package duke;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Chandan8186"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"Chandan8186"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"Chandan8186"},"content":" * A launcher class to workaround classpath issues.","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"Chandan8186"},"content":"public class Launcher {","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"Chandan8186"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"Chandan8186"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"Chandan8186"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"Chandan8186":12}},{"path":"src/main/java/duke/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Chandan8186"},"content":"package duke;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"Chandan8186"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"Chandan8186"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"Chandan8186"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"Chandan8186"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Chandan8186"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"Chandan8186"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"Chandan8186"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"Chandan8186"},"content":" * A GUI for Duke using FXML.","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"Chandan8186"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"Chandan8186"},"content":" private Duke duke \u003d new Duke();","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"Chandan8186"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"Chandan8186"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"Chandan8186"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"Chandan8186"},"content":" Storage storage \u003d new Storage(\"duke.txt\");","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"Chandan8186"},"content":" duke.storage \u003d storage;","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"Chandan8186"},"content":" duke.taskList \u003d storage.retrieveSavedData();","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"Chandan8186"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"Chandan8186"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"Chandan8186"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"Chandan8186"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"Chandan8186"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setDuke(duke);","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"Chandan8186"},"content":" stage.show();","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"Chandan8186"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"Chandan8186"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"Chandan8186"},"content":"}","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"Chandan8186":36}},{"path":"src/main/java/duke/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Chandan8186"},"content":"package duke;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"Chandan8186"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"Chandan8186"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"Chandan8186"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"Chandan8186"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"Chandan8186"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Chandan8186"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"Chandan8186"},"content":"import javafx.scene.layout.Region;","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"Chandan8186"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"Chandan8186"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"Chandan8186"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"Chandan8186"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"Chandan8186"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"Chandan8186"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"Chandan8186"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"Chandan8186"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"Chandan8186"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"Chandan8186"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"Chandan8186"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"Chandan8186"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"Chandan8186"},"content":" private Duke duke;","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"Chandan8186"},"content":" private Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/userAvatar.png\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"Chandan8186"},"content":" private Image dukeImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/dukeAvatar.png\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"Chandan8186"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"Chandan8186"},"content":" public void initialize() {","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"Chandan8186"},"content":" dialogContainer.getChildren().add(DialogBox.getDukeDialog(Ui.getIntroMessage(), dukeImage));","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"Chandan8186"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"Chandan8186"},"content":" public void setDuke(Duke d) {","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"Chandan8186"},"content":" duke \u003d d;","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"Chandan8186"},"content":" * Creates two dialog boxes, one echoing user input and the other containing Duke\u0027s reply and then appends them to","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"Chandan8186"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"Chandan8186"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"Chandan8186"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"Chandan8186"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"Chandan8186"},"content":" String response \u003d duke.getResponse(input);","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":49,"author":{"gitId":"Chandan8186"},"content":" DialogBox userDialog \u003d DialogBox.getUserDialog(input, userImage);","lastModifiedDate":"2023-09-06"},{"lineNumber":50,"author":{"gitId":"Chandan8186"},"content":" userDialog.setMinHeight(Region.USE_PREF_SIZE);","lastModifiedDate":"2023-09-06"},{"lineNumber":51,"author":{"gitId":"Chandan8186"},"content":" DialogBox dukeDialog \u003d DialogBox.getDukeDialog(response, dukeImage);","lastModifiedDate":"2023-09-06"},{"lineNumber":52,"author":{"gitId":"Chandan8186"},"content":" dukeDialog.setMinHeight(Region.USE_PREF_SIZE);","lastModifiedDate":"2023-09-06"},{"lineNumber":53,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":54,"author":{"gitId":"Chandan8186"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"Chandan8186"},"content":" userDialog,","lastModifiedDate":"2023-09-06"},{"lineNumber":56,"author":{"gitId":"Chandan8186"},"content":" dukeDialog","lastModifiedDate":"2023-09-06"},{"lineNumber":57,"author":{"gitId":"Chandan8186"},"content":" );","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"Chandan8186"},"content":" userInput.clear();","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"Chandan8186"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"Chandan8186":60}},{"path":"src/main/java/duke/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Chandan8186"},"content":"package duke;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Chandan8186"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"Chandan8186"},"content":"import exceptions.DukeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"Chandan8186"},"content":"import exceptions.InvalidDeadlineException;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"Chandan8186"},"content":"import exceptions.InvalidEventException;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"Chandan8186"},"content":"import exceptions.InvalidIndexException;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Chandan8186"},"content":"import exceptions.InvalidTodoException;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Chandan8186"},"content":"import exceptions.UnknownCommandException;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"Chandan8186"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"Chandan8186"},"content":" * Parses user input and instructs Duke to act on the relevant command.","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"Chandan8186"},"content":"public class Parser {","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"Chandan8186"},"content":" * Parses the user input and asks Duke to invoke the relevant functions.","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"Chandan8186"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"Chandan8186"},"content":" * @param userInput The command and argument that the user enters.","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"Chandan8186"},"content":" * @param taskListSize The current size of the task list.","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"Chandan8186"},"content":" * @return The command of the user input, if valid.","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"Chandan8186"},"content":" * @throws UnknownCommandException If the command doesn\u0027t match any of Duke\u0027s commands.","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"Chandan8186"},"content":" * @throws InvalidIndexException If the index provided is out of range, where relevant.","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"Chandan8186"},"content":" * @throws InvalidTodoException If the user input is invalid (e.g. no description).","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"Chandan8186"},"content":" * @throws InvalidDeadlineException If the user input is invalid (e.g. no deadline).","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"Chandan8186"},"content":" * @throws InvalidEventException If the user input is invalid (e.g. no start).","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"Chandan8186"},"content":" public static String parseUserInput(String userInput, int taskListSize)","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"Chandan8186"},"content":" throws UnknownCommandException,","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"Chandan8186"},"content":" InvalidIndexException,","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"Chandan8186"},"content":" InvalidTodoException,","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"Chandan8186"},"content":" InvalidDeadlineException,","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"Chandan8186"},"content":" InvalidEventException {","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"Chandan8186"},"content":" String[] inputArr \u003d userInput.trim().split(\" \");","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"Chandan8186"},"content":" if (inputArr.length \u003d\u003d 0) {","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"Chandan8186"},"content":" throw new UnknownCommandException();","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"Chandan8186"},"content":" String command \u003d inputArr[0];","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"Chandan8186"},"content":" switch(command) {","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"Chandan8186"},"content":" case \"list\":","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"Chandan8186"},"content":" return Duke.listTasks();","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"Chandan8186"},"content":" case \"find\":","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"Chandan8186"},"content":" return parseFilter(userInput);","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"Chandan8186"},"content":" case \"mark\":","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"Chandan8186"},"content":" return parseMark(userInput, taskListSize);","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"Chandan8186"},"content":" case \"unmark\":","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"Chandan8186"},"content":" return parseUnmark(userInput, taskListSize);","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"Chandan8186"},"content":" case \"delete\":","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"Chandan8186"},"content":" return parseDelete(userInput, taskListSize);","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"Chandan8186"},"content":" case \"todo\":","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"Chandan8186"},"content":" return parseTodo(userInput);","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"Chandan8186"},"content":" case \"deadline\":","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"Chandan8186"},"content":" return parseDeadline(userInput);","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"Chandan8186"},"content":" case \"event\":","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"Chandan8186"},"content":" return parseEvent(userInput);","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"Chandan8186"},"content":" case \"bye\":","lastModifiedDate":"2023-09-06"},{"lineNumber":60,"author":{"gitId":"Chandan8186"},"content":" return Ui.getOutroMessage();","lastModifiedDate":"2023-09-06"},{"lineNumber":61,"author":{"gitId":"Chandan8186"},"content":" default:","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"Chandan8186"},"content":" throw new UnknownCommandException();","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"Chandan8186"},"content":" private static String parseFilter(String userInput)","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"Chandan8186"},"content":" throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"Chandan8186"},"content":" String restOfInput \u003d userInput.trim().substring(4).trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"Chandan8186"},"content":" if (restOfInput.equals(\"\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"Chandan8186"},"content":" throw new DukeException(\"No keyword was provided, please enter again.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"Chandan8186"},"content":" return Duke.listFilteredTasks(restOfInput);","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"Chandan8186"},"content":" private static String parseMark(String userInput, int taskListSize)","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"Chandan8186"},"content":" throws InvalidIndexException {","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"Chandan8186"},"content":" String restOfInput \u003d userInput.trim().substring(4).trim();","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"Chandan8186"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":79,"author":{"gitId":"Chandan8186"},"content":" int taskNum \u003d Integer.parseInt(restOfInput);","lastModifiedDate":"2023-08-29"},{"lineNumber":80,"author":{"gitId":"Chandan8186"},"content":" return Duke.markTask(taskNum);","lastModifiedDate":"2023-09-04"},{"lineNumber":81,"author":{"gitId":"Chandan8186"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-06"},{"lineNumber":82,"author":{"gitId":"Chandan8186"},"content":" throw new InvalidIndexException(taskListSize);","lastModifiedDate":"2023-08-29"},{"lineNumber":83,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":84,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":85,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":86,"author":{"gitId":"Chandan8186"},"content":" private static String parseUnmark(String userInput, int taskListSize)","lastModifiedDate":"2023-09-03"},{"lineNumber":87,"author":{"gitId":"Chandan8186"},"content":" throws InvalidIndexException {","lastModifiedDate":"2023-08-29"},{"lineNumber":88,"author":{"gitId":"Chandan8186"},"content":" String restOfInput \u003d userInput.trim().substring(6).trim();","lastModifiedDate":"2023-08-29"},{"lineNumber":89,"author":{"gitId":"Chandan8186"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":90,"author":{"gitId":"Chandan8186"},"content":" int taskNum \u003d Integer.parseInt(restOfInput);","lastModifiedDate":"2023-08-29"},{"lineNumber":91,"author":{"gitId":"Chandan8186"},"content":" return Duke.unmarkTask(taskNum);","lastModifiedDate":"2023-09-04"},{"lineNumber":92,"author":{"gitId":"Chandan8186"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-06"},{"lineNumber":93,"author":{"gitId":"Chandan8186"},"content":" throw new InvalidIndexException(taskListSize);","lastModifiedDate":"2023-08-29"},{"lineNumber":94,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":95,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":96,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":97,"author":{"gitId":"Chandan8186"},"content":" private static String parseDelete(String userInput, int taskListSize)","lastModifiedDate":"2023-09-03"},{"lineNumber":98,"author":{"gitId":"Chandan8186"},"content":" throws InvalidIndexException {","lastModifiedDate":"2023-08-29"},{"lineNumber":99,"author":{"gitId":"Chandan8186"},"content":" String restOfInput \u003d userInput.trim().substring(6).trim();","lastModifiedDate":"2023-08-29"},{"lineNumber":100,"author":{"gitId":"Chandan8186"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":101,"author":{"gitId":"Chandan8186"},"content":" int taskNum \u003d Integer.parseInt(restOfInput);","lastModifiedDate":"2023-08-29"},{"lineNumber":102,"author":{"gitId":"Chandan8186"},"content":" return Duke.deleteTask(taskNum);","lastModifiedDate":"2023-09-03"},{"lineNumber":103,"author":{"gitId":"Chandan8186"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-06"},{"lineNumber":104,"author":{"gitId":"Chandan8186"},"content":" throw new InvalidIndexException(taskListSize);","lastModifiedDate":"2023-08-29"},{"lineNumber":105,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":106,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":107,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":108,"author":{"gitId":"Chandan8186"},"content":" private static String parseTodo(String userInput)","lastModifiedDate":"2023-09-03"},{"lineNumber":109,"author":{"gitId":"Chandan8186"},"content":" throws InvalidTodoException {","lastModifiedDate":"2023-08-29"},{"lineNumber":110,"author":{"gitId":"Chandan8186"},"content":" String restOfInput \u003d userInput.trim().substring(4).trim();","lastModifiedDate":"2023-08-29"},{"lineNumber":111,"author":{"gitId":"Chandan8186"},"content":" if (restOfInput.equals(\"\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":112,"author":{"gitId":"Chandan8186"},"content":" throw new InvalidTodoException();","lastModifiedDate":"2023-08-29"},{"lineNumber":113,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":114,"author":{"gitId":"Chandan8186"},"content":" return Duke.createTodo(restOfInput);","lastModifiedDate":"2023-09-03"},{"lineNumber":115,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":116,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":117,"author":{"gitId":"Chandan8186"},"content":" private static String parseDeadline(String userInput)","lastModifiedDate":"2023-09-03"},{"lineNumber":118,"author":{"gitId":"Chandan8186"},"content":" throws InvalidDeadlineException {","lastModifiedDate":"2023-08-29"},{"lineNumber":119,"author":{"gitId":"Chandan8186"},"content":" String restOfInput \u003d userInput.trim().substring(8).trim();","lastModifiedDate":"2023-08-29"},{"lineNumber":120,"author":{"gitId":"Chandan8186"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":121,"author":{"gitId":"Chandan8186"},"content":" if (!restOfInput.contains(\"/by\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":122,"author":{"gitId":"Chandan8186"},"content":" throw new InvalidDeadlineException();","lastModifiedDate":"2023-08-29"},{"lineNumber":123,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":124,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":125,"author":{"gitId":"Chandan8186"},"content":" String[] arr \u003d restOfInput.split(\"/by\");","lastModifiedDate":"2023-08-29"},{"lineNumber":126,"author":{"gitId":"Chandan8186"},"content":" if (arr.length \u003c 2) {","lastModifiedDate":"2023-08-29"},{"lineNumber":127,"author":{"gitId":"Chandan8186"},"content":" throw new InvalidDeadlineException();","lastModifiedDate":"2023-08-29"},{"lineNumber":128,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":129,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":130,"author":{"gitId":"Chandan8186"},"content":" String desc \u003d arr[0].trim();","lastModifiedDate":"2023-08-29"},{"lineNumber":131,"author":{"gitId":"Chandan8186"},"content":" String deadline \u003d arr[1].trim();","lastModifiedDate":"2023-08-29"},{"lineNumber":132,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":133,"author":{"gitId":"Chandan8186"},"content":" if (desc.equals(\"\") || deadline.equals(\"\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":134,"author":{"gitId":"Chandan8186"},"content":" throw new InvalidDeadlineException();","lastModifiedDate":"2023-08-29"},{"lineNumber":135,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":136,"author":{"gitId":"Chandan8186"},"content":" return Duke.createDeadline(desc, deadline);","lastModifiedDate":"2023-09-03"},{"lineNumber":137,"author":{"gitId":"Chandan8186"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":138,"author":{"gitId":"Chandan8186"},"content":" throw new InvalidDeadlineException();","lastModifiedDate":"2023-08-29"},{"lineNumber":139,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":140,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":141,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":142,"author":{"gitId":"Chandan8186"},"content":" private static String parseEvent(String userInput)","lastModifiedDate":"2023-09-03"},{"lineNumber":143,"author":{"gitId":"Chandan8186"},"content":" throws InvalidEventException {","lastModifiedDate":"2023-08-29"},{"lineNumber":144,"author":{"gitId":"Chandan8186"},"content":" String restOfInput \u003d userInput.trim().substring(5).trim();","lastModifiedDate":"2023-08-29"},{"lineNumber":145,"author":{"gitId":"Chandan8186"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":146,"author":{"gitId":"Chandan8186"},"content":" if (!restOfInput.contains(\"/from\") || !restOfInput.contains(\"/to\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":147,"author":{"gitId":"Chandan8186"},"content":" throw new InvalidEventException();","lastModifiedDate":"2023-08-29"},{"lineNumber":148,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":149,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":150,"author":{"gitId":"Chandan8186"},"content":" String[] arr \u003d restOfInput.split(\"/from|/to\");","lastModifiedDate":"2023-08-29"},{"lineNumber":151,"author":{"gitId":"Chandan8186"},"content":" if (arr.length \u003c 3) {","lastModifiedDate":"2023-08-29"},{"lineNumber":152,"author":{"gitId":"Chandan8186"},"content":" throw new InvalidEventException();","lastModifiedDate":"2023-08-29"},{"lineNumber":153,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":154,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":155,"author":{"gitId":"Chandan8186"},"content":" String desc \u003d arr[0].trim();","lastModifiedDate":"2023-08-29"},{"lineNumber":156,"author":{"gitId":"Chandan8186"},"content":" String start \u003d arr[1].trim();","lastModifiedDate":"2023-08-29"},{"lineNumber":157,"author":{"gitId":"Chandan8186"},"content":" String end \u003d arr[2].trim();","lastModifiedDate":"2023-08-29"},{"lineNumber":158,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":159,"author":{"gitId":"Chandan8186"},"content":" if (desc.equals(\"\") || start.equals(\"\") || end.equals(\"\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":160,"author":{"gitId":"Chandan8186"},"content":" throw new InvalidEventException();","lastModifiedDate":"2023-08-29"},{"lineNumber":161,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":162,"author":{"gitId":"Chandan8186"},"content":" return Duke.createEvent(desc, start, end);","lastModifiedDate":"2023-09-03"},{"lineNumber":163,"author":{"gitId":"Chandan8186"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":164,"author":{"gitId":"Chandan8186"},"content":" throw new InvalidEventException();","lastModifiedDate":"2023-08-29"},{"lineNumber":165,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":166,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":167,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":168,"author":{"gitId":"Chandan8186"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"Chandan8186":168}},{"path":"src/main/java/duke/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Chandan8186"},"content":"package duke;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Chandan8186"},"content":"import java.io.File;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"Chandan8186"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"Chandan8186"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"Chandan8186"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"Chandan8186"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"Chandan8186"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"Chandan8186"},"content":"import tasks.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"Chandan8186"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"Chandan8186"},"content":" * Saves and retrieves tasks created by the user.","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"Chandan8186"},"content":"public class Storage {","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"Chandan8186"},"content":" private final String FILENAME;","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"Chandan8186"},"content":" * Constructor, initializes the file name indicated by the user.","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"Chandan8186"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"Chandan8186"},"content":" * @param filename Name of file to read or write task data to or from.","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"Chandan8186"},"content":" public Storage(String filename) {","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"Chandan8186"},"content":" this.FILENAME \u003d filename;","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"Chandan8186"},"content":" * Obtains saved task data from data file and updates Duke with it.","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"Chandan8186"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"Chandan8186"},"content":" * @return A TaskList containing all the previously saved tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"Chandan8186"},"content":" public TaskList retrieveSavedData() {","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"Chandan8186"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"Chandan8186"},"content":" ArrayList\u003cString\u003e arr \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"Chandan8186"},"content":" File f \u003d new File(\"data/\" + FILENAME);","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"Chandan8186"},"content":" if (!f.exists()) {","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"Chandan8186"},"content":" return new TaskList();","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"Chandan8186"},"content":" Scanner s \u003d new Scanner(f);","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"Chandan8186"},"content":" while (s.hasNext()) {","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"Chandan8186"},"content":" String str \u003d s.nextLine();","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"Chandan8186"},"content":" arr.add(str);","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"Chandan8186"},"content":" s.close();","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"Chandan8186"},"content":" return populate(arr);","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"Chandan8186"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"Chandan8186"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"Chandan8186"},"content":" return new TaskList();","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"Chandan8186"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-06"},{"lineNumber":54,"author":{"gitId":"Chandan8186"},"content":" System.out.println(\"There was an error parsing the data in the data file; \"","lastModifiedDate":"2023-09-06"},{"lineNumber":55,"author":{"gitId":"Chandan8186"},"content":" + \"the file might have been tampered with externally.\");","lastModifiedDate":"2023-09-06"},{"lineNumber":56,"author":{"gitId":"Chandan8186"},"content":" System.out.println(\"Hence, the data will be cleared.\");","lastModifiedDate":"2023-09-06"},{"lineNumber":57,"author":{"gitId":"Chandan8186"},"content":" return new TaskList();","lastModifiedDate":"2023-09-06"},{"lineNumber":58,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":59,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":60,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":61,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"Chandan8186"},"content":" * Parses stored task data and populates a TaskList with it.","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"Chandan8186"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"Chandan8186"},"content":" * @param arr An array of tasks in the stored string format.","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"Chandan8186"},"content":" * @return A TaskList of the said tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"Chandan8186"},"content":" private TaskList populate(ArrayList\u003cString\u003e arr) {","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"Chandan8186"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-08-28"},{"lineNumber":69,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":70,"author":{"gitId":"Chandan8186"},"content":" for (String str : arr) {","lastModifiedDate":"2023-08-28"},{"lineNumber":71,"author":{"gitId":"Chandan8186"},"content":" String[] segmented \u003d str.split(\"\\\\|\");","lastModifiedDate":"2023-08-28"},{"lineNumber":72,"author":{"gitId":"Chandan8186"},"content":" String taskType \u003d segmented[0];","lastModifiedDate":"2023-08-28"},{"lineNumber":73,"author":{"gitId":"Chandan8186"},"content":" int isMarked \u003d Integer.parseInt(segmented[1]);","lastModifiedDate":"2023-08-28"},{"lineNumber":74,"author":{"gitId":"Chandan8186"},"content":" String desc \u003d segmented[2];","lastModifiedDate":"2023-08-28"},{"lineNumber":75,"author":{"gitId":"Chandan8186"},"content":" String end;","lastModifiedDate":"2023-08-28"},{"lineNumber":76,"author":{"gitId":"Chandan8186"},"content":" String start;","lastModifiedDate":"2023-08-28"},{"lineNumber":77,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":78,"author":{"gitId":"Chandan8186"},"content":" switch (taskType) {","lastModifiedDate":"2023-08-28"},{"lineNumber":79,"author":{"gitId":"Chandan8186"},"content":" case \"T\":","lastModifiedDate":"2023-08-28"},{"lineNumber":80,"author":{"gitId":"Chandan8186"},"content":" taskList.addTodo(desc, isMarked);","lastModifiedDate":"2023-08-28"},{"lineNumber":81,"author":{"gitId":"Chandan8186"},"content":" break;","lastModifiedDate":"2023-08-28"},{"lineNumber":82,"author":{"gitId":"Chandan8186"},"content":" case \"D\":","lastModifiedDate":"2023-08-28"},{"lineNumber":83,"author":{"gitId":"Chandan8186"},"content":" end \u003d segmented[3];","lastModifiedDate":"2023-08-28"},{"lineNumber":84,"author":{"gitId":"Chandan8186"},"content":" taskList.addDeadline(desc, end, isMarked);","lastModifiedDate":"2023-08-28"},{"lineNumber":85,"author":{"gitId":"Chandan8186"},"content":" break;","lastModifiedDate":"2023-08-28"},{"lineNumber":86,"author":{"gitId":"Chandan8186"},"content":" case \"E\":","lastModifiedDate":"2023-08-28"},{"lineNumber":87,"author":{"gitId":"Chandan8186"},"content":" end \u003d segmented[3];","lastModifiedDate":"2023-08-28"},{"lineNumber":88,"author":{"gitId":"Chandan8186"},"content":" start \u003d segmented[4];","lastModifiedDate":"2023-08-28"},{"lineNumber":89,"author":{"gitId":"Chandan8186"},"content":" taskList.addEvent(desc, start, end, isMarked);","lastModifiedDate":"2023-08-28"},{"lineNumber":90,"author":{"gitId":"Chandan8186"},"content":" break;","lastModifiedDate":"2023-08-28"},{"lineNumber":91,"author":{"gitId":"Chandan8186"},"content":" default:","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"Chandan8186"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":94,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":95,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":96,"author":{"gitId":"Chandan8186"},"content":" return taskList;","lastModifiedDate":"2023-08-28"},{"lineNumber":97,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":98,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":99,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":100,"author":{"gitId":"Chandan8186"},"content":" * Creates a new data file or opens the existing one to update it with the latest tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":101,"author":{"gitId":"Chandan8186"},"content":" * The format of the task string is \"~tasktype~|~isMarked~|~desc~|~end~|~start~\".","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"Chandan8186"},"content":" * Task type is T/D/E and isMarked is 0 for false and 1 for true.","lastModifiedDate":"2023-08-29"},{"lineNumber":103,"author":{"gitId":"Chandan8186"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":104,"author":{"gitId":"Chandan8186"},"content":" * @param taskList The TaskList containing the latest tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":105,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":106,"author":{"gitId":"Chandan8186"},"content":" public void saveChanges(TaskList taskList) {","lastModifiedDate":"2023-08-29"},{"lineNumber":107,"author":{"gitId":"Chandan8186"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":108,"author":{"gitId":"Chandan8186"},"content":" File directory \u003d new File(\"data\");","lastModifiedDate":"2023-08-28"},{"lineNumber":109,"author":{"gitId":"Chandan8186"},"content":" if (!directory.exists()) {","lastModifiedDate":"2023-08-28"},{"lineNumber":110,"author":{"gitId":"Chandan8186"},"content":" directory.mkdirs();","lastModifiedDate":"2023-08-28"},{"lineNumber":111,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":112,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":113,"author":{"gitId":"Chandan8186"},"content":" FileWriter fileWriter \u003d new FileWriter(\"data/\" + FILENAME);","lastModifiedDate":"2023-08-29"},{"lineNumber":114,"author":{"gitId":"Chandan8186"},"content":" fileWriter.write(\"\");","lastModifiedDate":"2023-08-28"},{"lineNumber":115,"author":{"gitId":"Chandan8186"},"content":" fileWriter.append(taskList.getTextFormattedString());","lastModifiedDate":"2023-08-28"},{"lineNumber":116,"author":{"gitId":"Chandan8186"},"content":" fileWriter.close();","lastModifiedDate":"2023-08-28"},{"lineNumber":117,"author":{"gitId":"Chandan8186"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":118,"author":{"gitId":"Chandan8186"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-04"},{"lineNumber":119,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":120,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":121,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":122,"author":{"gitId":"Chandan8186"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"Chandan8186":122}},{"path":"src/main/java/duke/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Chandan8186"},"content":"package duke;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Chandan8186"},"content":"import tasks.Task;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"Chandan8186"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"Chandan8186"},"content":" * Provides formatted string outputs to be shown to user.","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"Chandan8186"},"content":"public class Ui {","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"Chandan8186"},"content":" private static final String INTRO_MESSAGE \u003d \"Hello! I\u0027m ChatALot.\\n\"","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"Chandan8186"},"content":" + \"What can I do for you?\\n\";","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"Chandan8186"},"content":" private static final String OUTRO_MESSAGE \u003d","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"Chandan8186"},"content":" \"Bye. Hope to see you again soon!\\n\"","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"Chandan8186"},"content":" + \"You may close the window to end the chat.\\n\";","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"Chandan8186"},"content":" public static String getIntroMessage() {","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"Chandan8186"},"content":" return INTRO_MESSAGE;","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"Chandan8186"},"content":" public static String getOutroMessage() {","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"Chandan8186"},"content":" return OUTRO_MESSAGE;","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"Chandan8186"},"content":" * Gives the formatted output for when a task is added.","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"Chandan8186"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"Chandan8186"},"content":" * @param task The task that was added.","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"Chandan8186"},"content":" * @param taskListSize The task list size after the task was added.","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"Chandan8186"},"content":" * @return The formatted output for when a task is added","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"Chandan8186"},"content":" public static String getTaskAddingMessage(Task task, int taskListSize) {","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"Chandan8186"},"content":" return \"Got it. I\u0027ve added this task:\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"Chandan8186"},"content":" + \" \"","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"Chandan8186"},"content":" + task","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"Chandan8186"},"content":" + \"\\nNow you have \"","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"Chandan8186"},"content":" + taskListSize","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"Chandan8186"},"content":" + \" tasks in the list.\";","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"Chandan8186"},"content":" * Gives the formatted output for when a task is deleted.","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"Chandan8186"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"Chandan8186"},"content":" * @param task The task that was deleted.","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"Chandan8186"},"content":" * @param taskListSize The task list size after the task was deleted.","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"Chandan8186"},"content":" * @return The formatted output for when a task is deleted.","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"Chandan8186"},"content":" public static String getTaskDeletingMessage(Task task, int taskListSize) {","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"Chandan8186"},"content":" return String.format(\"Noted. I\u0027ve removed this task:\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"Chandan8186"},"content":" + \" \"","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"Chandan8186"},"content":" + task","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"Chandan8186"},"content":" + \"\\nNow you have %d tasks in the list.\", taskListSize);","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"Chandan8186"},"content":" * Gives the formatted output for when a task is marked complete.","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"Chandan8186"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"Chandan8186"},"content":" * @param task Task that was marked complete.","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"Chandan8186"},"content":" * @return The formatted output for when a task is marked complete.","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"Chandan8186"},"content":" public static String getTaskMarkingMessage(Task task) {","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"Chandan8186"},"content":" return \"Nice! I\u0027ve marked this task as done:\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"Chandan8186"},"content":" + \" \"","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"Chandan8186"},"content":" + task;","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":65,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":66,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"Chandan8186"},"content":" * Gives the formatted output for when a task is marked incomplete.","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"Chandan8186"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"Chandan8186"},"content":" * @param task Task that was marked incomplete.","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"Chandan8186"},"content":" * @return The formatted output for when a task is marked incomplete.","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"Chandan8186"},"content":" public static String getTaskUnmarkingMessage(Task task) {","lastModifiedDate":"2023-09-04"},{"lineNumber":73,"author":{"gitId":"Chandan8186"},"content":" return \"OK, I\u0027ve marked this task as not done yet:\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"Chandan8186"},"content":" + \" \"","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"Chandan8186"},"content":" + task;","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":77,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":78,"author":{"gitId":"Chandan8186"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"Chandan8186":78}},{"path":"src/main/java/exceptions/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Chandan8186"},"content":"package exceptions;","lastModifiedDate":"2023-08-22"},{"lineNumber":2,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":3,"author":{"gitId":"Chandan8186"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Chandan8186"},"content":" * A runtime exception thrown by Duke chatbot.","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"Chandan8186"},"content":" * All other duke-specific exceptions will extend DukeException.","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"Chandan8186"},"content":"public class DukeException extends RuntimeException {","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Chandan8186"},"content":" * Constructor, initialises the error message.","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Chandan8186"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"Chandan8186"},"content":" * @param errorMessage Error message to be shown.","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"Chandan8186"},"content":" public DukeException(String errorMessage) {","lastModifiedDate":"2023-08-22"},{"lineNumber":15,"author":{"gitId":"Chandan8186"},"content":" super(errorMessage);","lastModifiedDate":"2023-08-22"},{"lineNumber":16,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":17,"author":{"gitId":"Chandan8186"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"Chandan8186":17}},{"path":"src/main/java/exceptions/InvalidDeadlineException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Chandan8186"},"content":"package exceptions;","lastModifiedDate":"2023-08-22"},{"lineNumber":2,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":3,"author":{"gitId":"Chandan8186"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Chandan8186"},"content":" * A DukeException for invalid deadline task command.","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"Chandan8186"},"content":"public class InvalidDeadlineException extends DukeException {","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Chandan8186"},"content":" * Constructor, initializes the error message.","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Chandan8186"},"content":" public InvalidDeadlineException() {","lastModifiedDate":"2023-08-22"},{"lineNumber":12,"author":{"gitId":"Chandan8186"},"content":" super(\"Missing description/end for deadline task.\\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Chandan8186"},"content":" + \"Format should be: deadline \u003ctask description\u003e /by \u003cyyyy-MM-dd HHmm\u003e\");","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":15,"author":{"gitId":"Chandan8186"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"Chandan8186":15}},{"path":"src/main/java/exceptions/InvalidEventException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Chandan8186"},"content":"package exceptions;","lastModifiedDate":"2023-08-22"},{"lineNumber":2,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":3,"author":{"gitId":"Chandan8186"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Chandan8186"},"content":" * A DukeException for invalid event task command.","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"Chandan8186"},"content":"public class InvalidEventException extends DukeException {","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Chandan8186"},"content":" * Constructor, initializes the error message.","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Chandan8186"},"content":" public InvalidEventException() {","lastModifiedDate":"2023-08-22"},{"lineNumber":12,"author":{"gitId":"Chandan8186"},"content":" super(\"Missing description/start/end for event task.\\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Chandan8186"},"content":" + \"Format should be: event \u003ctask description\u003e \"","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Chandan8186"},"content":" + \"/from \u003cyyyy-MM-dd HHmm\u003e /to \u003cyyyy-MM-dd HHmm\u003e\");","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":16,"author":{"gitId":"Chandan8186"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"Chandan8186":16}},{"path":"src/main/java/exceptions/InvalidIndexException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Chandan8186"},"content":"package exceptions;","lastModifiedDate":"2023-08-22"},{"lineNumber":2,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":3,"author":{"gitId":"Chandan8186"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Chandan8186"},"content":" * A DukeException for invalid index when marking, unmarking or deleting task.","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"Chandan8186"},"content":"public class InvalidIndexException extends DukeException {","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Chandan8186"},"content":" * Constructor, initializes the error message.","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Chandan8186"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Chandan8186"},"content":" * @param listSize The size of the current task list.","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"Chandan8186"},"content":" public InvalidIndexException(int listSize) {","lastModifiedDate":"2023-08-22"},{"lineNumber":14,"author":{"gitId":"Chandan8186"},"content":" super(String.format(\"Invalid index format.\\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Chandan8186"},"content":" + \"Format should be: mark \u003ctask index\u003e OR unmark \u003ctask index\u003e \"","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Chandan8186"},"content":" + \"OR delete \u003ctask index\u003e\\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Chandan8186"},"content":" + \"where index is from 1 to %d.\", listSize));","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":19,"author":{"gitId":"Chandan8186"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"Chandan8186":19}},{"path":"src/main/java/exceptions/InvalidTodoException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Chandan8186"},"content":"package exceptions;","lastModifiedDate":"2023-08-22"},{"lineNumber":2,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":3,"author":{"gitId":"Chandan8186"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Chandan8186"},"content":" * A DukeException for invalid event task command.","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"Chandan8186"},"content":"public class InvalidTodoException extends DukeException {","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Chandan8186"},"content":" * Constructor, initializes the error message.","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Chandan8186"},"content":" public InvalidTodoException() {","lastModifiedDate":"2023-08-22"},{"lineNumber":12,"author":{"gitId":"Chandan8186"},"content":" super(\"Missing description for todo task.\\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Chandan8186"},"content":" + \"Format should be: todo \u003ctask description\u003e\");","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":15,"author":{"gitId":"Chandan8186"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"Chandan8186":15}},{"path":"src/main/java/exceptions/UnknownCommandException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Chandan8186"},"content":"package exceptions;","lastModifiedDate":"2023-08-22"},{"lineNumber":2,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":3,"author":{"gitId":"Chandan8186"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Chandan8186"},"content":" * A DukeException for an unknown command by the user.","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"Chandan8186"},"content":"public class UnknownCommandException extends DukeException {","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Chandan8186"},"content":" * Constructor, initializes the error message.","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Chandan8186"},"content":" public UnknownCommandException() {","lastModifiedDate":"2023-08-22"},{"lineNumber":12,"author":{"gitId":"Chandan8186"},"content":" super(\"OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-08-22"},{"lineNumber":13,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":14,"author":{"gitId":"Chandan8186"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"Chandan8186":14}},{"path":"src/main/java/tasks/DeadlineTask.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Chandan8186"},"content":"package tasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":3,"author":{"gitId":"Chandan8186"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Chandan8186"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":6,"author":{"gitId":"Chandan8186"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"Chandan8186"},"content":" * A deadline task.","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Chandan8186"},"content":"public class DeadlineTask extends Task {","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":11,"author":{"gitId":"Chandan8186"},"content":" private static final DateTimeFormatter INPUT_FORMAT \u003d","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"Chandan8186"},"content":" DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\");","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"Chandan8186"},"content":" private static final DateTimeFormatter DISPLAY_FORMAT \u003d","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"Chandan8186"},"content":" DateTimeFormatter.ofPattern(\"dd-MMM-yyyy HHmm\");","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"Chandan8186"},"content":" private final LocalDateTime deadline;","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":17,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"Chandan8186"},"content":" * Constructor, initializes task description, deadline and isMarked.","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"Chandan8186"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"Chandan8186"},"content":" * @param desc Task description.","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"Chandan8186"},"content":" * @param deadline Deadline date/time of task.","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"Chandan8186"},"content":" * @param isMarked 1 if is marked, 0 otherwise.","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"Chandan8186"},"content":" public DeadlineTask(String desc, LocalDateTime deadline, int isMarked) {","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"Chandan8186"},"content":" super(desc);","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"Chandan8186"},"content":" this.deadline \u003d deadline;","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"Chandan8186"},"content":" if (isMarked \u003d\u003d 1) {","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"Chandan8186"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"Chandan8186"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"Chandan8186"},"content":" protected String getTextFormattedString() {","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"Chandan8186"},"content":" return String.format(\"D|%d|%s|%s\", this.isDone ? 1 : 0,","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"Chandan8186"},"content":" this.desc, this.deadline.format(INPUT_FORMAT));","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"Chandan8186"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":39,"author":{"gitId":"Chandan8186"},"content":" public String toString() {","lastModifiedDate":"2023-08-20"},{"lineNumber":40,"author":{"gitId":"Chandan8186"},"content":" return String.format(\"[D]%s (by: %s)\",","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"Chandan8186"},"content":" super.toString(),","lastModifiedDate":"2023-08-20"},{"lineNumber":42,"author":{"gitId":"Chandan8186"},"content":" this.deadline.format(DISPLAY_FORMAT));","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":44,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":45,"author":{"gitId":"Chandan8186"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"Chandan8186":45}},{"path":"src/main/java/tasks/EventTask.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Chandan8186"},"content":"package tasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":3,"author":{"gitId":"Chandan8186"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Chandan8186"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"Chandan8186"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"Chandan8186"},"content":" * An event task.","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Chandan8186"},"content":"public class EventTask extends Task {","lastModifiedDate":"2023-08-20"},{"lineNumber":10,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":11,"author":{"gitId":"Chandan8186"},"content":" private static final DateTimeFormatter INPUT_FORMAT \u003d","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"Chandan8186"},"content":" DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\");","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"Chandan8186"},"content":" private static final DateTimeFormatter DISPLAY_FORMAT \u003d","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"Chandan8186"},"content":" DateTimeFormatter.ofPattern(\"dd-MMM-yyyy HHmm\");","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":16,"author":{"gitId":"Chandan8186"},"content":" private final LocalDateTime start;","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"Chandan8186"},"content":" private final LocalDateTime end;","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":19,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"Chandan8186"},"content":" * Constructor, initializes task description, start, end and isMarked.","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"Chandan8186"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"Chandan8186"},"content":" * @param desc Task description.","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"Chandan8186"},"content":" * @param start Start date/time of task.","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"Chandan8186"},"content":" * @param end End date/time of task.","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"Chandan8186"},"content":" * @param isMarked 1 if is marked, 0 otherwise.","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"Chandan8186"},"content":" public EventTask(String desc, LocalDateTime start, LocalDateTime end, int isMarked) {","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"Chandan8186"},"content":" super(desc);","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"Chandan8186"},"content":" this.start \u003d start;","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"Chandan8186"},"content":" this.end \u003d end;","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"Chandan8186"},"content":" if (isMarked \u003d\u003d 1) {","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"Chandan8186"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"Chandan8186"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"Chandan8186"},"content":" protected String getTextFormattedString() {","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"Chandan8186"},"content":" return String.format(\"E|%d|%s|%s|%s\", this.isDone ? 1 : 0, this.desc,","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"Chandan8186"},"content":" this.end.format(INPUT_FORMAT),","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"Chandan8186"},"content":" this.start.format(INPUT_FORMAT));","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"Chandan8186"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":44,"author":{"gitId":"Chandan8186"},"content":" public String toString() {","lastModifiedDate":"2023-08-20"},{"lineNumber":45,"author":{"gitId":"Chandan8186"},"content":" return String.format(\"[E]%s (from: %s to: %s)\",","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"Chandan8186"},"content":" super.toString(),","lastModifiedDate":"2023-08-20"},{"lineNumber":47,"author":{"gitId":"Chandan8186"},"content":" this.start.format(DISPLAY_FORMAT),","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"Chandan8186"},"content":" this.end.format(DISPLAY_FORMAT));","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":50,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":51,"author":{"gitId":"Chandan8186"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"Chandan8186":51}},{"path":"src/main/java/tasks/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Chandan8186"},"content":"package tasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":3,"author":{"gitId":"Chandan8186"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Chandan8186"},"content":" * Abstract class representing a task.","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"Chandan8186"},"content":" * All specific tasks will be its child classes.","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"Chandan8186"},"content":"public abstract class Task {","lastModifiedDate":"2023-08-20"},{"lineNumber":8,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Chandan8186"},"content":" /** The task description */","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Chandan8186"},"content":" protected String desc;","lastModifiedDate":"2023-08-20"},{"lineNumber":11,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"Chandan8186"},"content":" /** Boolean indicating completion status */","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"Chandan8186"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-20"},{"lineNumber":14,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":15,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"Chandan8186"},"content":" * Constructor, initializes task description.","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"Chandan8186"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"Chandan8186"},"content":" * @param desc Task Description.","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"Chandan8186"},"content":" public Task(String desc) {","lastModifiedDate":"2023-08-20"},{"lineNumber":21,"author":{"gitId":"Chandan8186"},"content":" this.desc \u003d desc;","lastModifiedDate":"2023-08-20"},{"lineNumber":22,"author":{"gitId":"Chandan8186"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-20"},{"lineNumber":23,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":24,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":25,"author":{"gitId":"Chandan8186"},"content":" /** Method signature for abstract method getTextFormattedString */","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"Chandan8186"},"content":" protected abstract String getTextFormattedString();","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"Chandan8186"},"content":" * Returns string representation of completion status.","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"Chandan8186"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"Chandan8186"},"content":" * @return String representation of completion status.","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"Chandan8186"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-20"},{"lineNumber":34,"author":{"gitId":"Chandan8186"},"content":" return (isDone ? \"X\" : \" \");","lastModifiedDate":"2023-08-20"},{"lineNumber":35,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":36,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":37,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"Chandan8186"},"content":" * Marks task as done.","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"Chandan8186"},"content":" protected void markAsDone() {","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"Chandan8186"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-20"},{"lineNumber":42,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":43,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":44,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"Chandan8186"},"content":" * Marks task as not done.","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"Chandan8186"},"content":" protected void unmark() {","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"Chandan8186"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-20"},{"lineNumber":49,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":50,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":51,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"Chandan8186"},"content":" * Returns string representation of task.","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"Chandan8186"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"Chandan8186"},"content":" * @return String representation of task.","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"Chandan8186"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":57,"author":{"gitId":"Chandan8186"},"content":" public String toString() {","lastModifiedDate":"2023-08-20"},{"lineNumber":58,"author":{"gitId":"Chandan8186"},"content":" return String.format(\"[%s] %s\", getStatusIcon(), this.desc);","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":60,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":61,"author":{"gitId":"Chandan8186"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"Chandan8186":61}},{"path":"src/main/java/tasks/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Chandan8186"},"content":"package tasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":3,"author":{"gitId":"Chandan8186"},"content":"import java.lang.StringBuilder;","lastModifiedDate":"2023-08-20"},{"lineNumber":4,"author":{"gitId":"Chandan8186"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"Chandan8186"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"Chandan8186"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"Chandan8186"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":9,"author":{"gitId":"Chandan8186"},"content":"import exceptions.DukeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Chandan8186"},"content":"import exceptions.InvalidIndexException;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"Chandan8186"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"Chandan8186"},"content":" * Represents a list of all user tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"Chandan8186"},"content":"public class TaskList {","lastModifiedDate":"2023-08-20"},{"lineNumber":16,"author":{"gitId":"Chandan8186"},"content":" protected static final DateTimeFormatter DATETIME_FORMAT \u003d","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"Chandan8186"},"content":" DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\");","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"Chandan8186"},"content":" protected ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":20,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"Chandan8186"},"content":" * Constructor, initializes array list.","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"Chandan8186"},"content":" public TaskList() {","lastModifiedDate":"2023-08-20"},{"lineNumber":24,"author":{"gitId":"Chandan8186"},"content":" this.tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":26,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":27,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"Chandan8186"},"content":" * Creates a todo task.","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"Chandan8186"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"Chandan8186"},"content":" * @param desc Description of task.","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"Chandan8186"},"content":" * @param isMarked If task is marked, 1, else, 0.","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"Chandan8186"},"content":" * @return A todo task.","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"Chandan8186"},"content":" public Task addTodo(String desc, int isMarked) {","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"Chandan8186"},"content":" Task task \u003d new TodoTask(desc, isMarked);","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"Chandan8186"},"content":" this.tasks.add(task);","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"Chandan8186"},"content":" return task;","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"Chandan8186"},"content":" * Creates a deadline task.","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"Chandan8186"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"Chandan8186"},"content":" * @param desc Description of task.","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"Chandan8186"},"content":" * @param deadline Deadline date/time of task.","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"Chandan8186"},"content":" * @param isMarked If task is marked, 1, else, 0.","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"Chandan8186"},"content":" * @return A deadline task.","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"Chandan8186"},"content":" * @throws DateTimeParseException If deadline doesn\u0027t have format \"yyyy-MM-dd HHmm\".","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"Chandan8186"},"content":" public Task addDeadline(String desc, String deadline, int isMarked)","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"Chandan8186"},"content":" throws DateTimeParseException {","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"Chandan8186"},"content":" LocalDateTime dateTime \u003d LocalDateTime.parse(deadline, DATETIME_FORMAT);","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"Chandan8186"},"content":" Task task \u003d new DeadlineTask(desc, dateTime, isMarked);","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"Chandan8186"},"content":" this.tasks.add(task);","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"Chandan8186"},"content":" return task;","lastModifiedDate":"2023-08-20"},{"lineNumber":55,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":56,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":57,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"Chandan8186"},"content":" * Creates an event task.","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"Chandan8186"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"Chandan8186"},"content":" * @param desc Description of task.","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"Chandan8186"},"content":" * @param start Start date/time of task.","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"Chandan8186"},"content":" * @param end End date/time of task.","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"Chandan8186"},"content":" * @param isMarked If task is marked, 1, else, 0.","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"Chandan8186"},"content":" * @return An event task.","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"Chandan8186"},"content":" * @throws DateTimeParseException If start/end doesn\u0027t have format \"yyyy-MM-dd HHmm\".","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"Chandan8186"},"content":" public Task addEvent(String desc, String start, String end, int isMarked)","lastModifiedDate":"2023-08-28"},{"lineNumber":68,"author":{"gitId":"Chandan8186"},"content":" throws DateTimeParseException {","lastModifiedDate":"2023-08-28"},{"lineNumber":69,"author":{"gitId":"Chandan8186"},"content":" LocalDateTime dateTimeStart \u003d LocalDateTime.parse(start, DATETIME_FORMAT);","lastModifiedDate":"2023-08-28"},{"lineNumber":70,"author":{"gitId":"Chandan8186"},"content":" LocalDateTime dateTimeEnd \u003d LocalDateTime.parse(end, DATETIME_FORMAT);","lastModifiedDate":"2023-08-28"},{"lineNumber":71,"author":{"gitId":"Chandan8186"},"content":" Task task \u003d new EventTask(desc, dateTimeStart, dateTimeEnd, isMarked);","lastModifiedDate":"2023-08-28"},{"lineNumber":72,"author":{"gitId":"Chandan8186"},"content":" this.tasks.add(task);","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"Chandan8186"},"content":" return task;","lastModifiedDate":"2023-08-27"},{"lineNumber":74,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":75,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":76,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"Chandan8186"},"content":" * Marks task as done.","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"Chandan8186"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":79,"author":{"gitId":"Chandan8186"},"content":" * @param i Index of task to be marked done.","lastModifiedDate":"2023-08-29"},{"lineNumber":80,"author":{"gitId":"Chandan8186"},"content":" * @return Task which was marked done.","lastModifiedDate":"2023-08-29"},{"lineNumber":81,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":82,"author":{"gitId":"Chandan8186"},"content":" public Task markTaskAsDone(int i) {","lastModifiedDate":"2023-08-20"},{"lineNumber":83,"author":{"gitId":"Chandan8186"},"content":" if (this.tasks.size() \u003c 1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"Chandan8186"},"content":" throw new DukeException(\"The task list is empty.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":85,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":86,"author":{"gitId":"Chandan8186"},"content":" if (i \u003c 1 || i \u003e this.tasks.size()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"Chandan8186"},"content":" throw new InvalidIndexException(this.tasks.size());","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":89,"author":{"gitId":"Chandan8186"},"content":" Task task \u003d this.tasks.get(i - 1);","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"Chandan8186"},"content":" task.markAsDone();","lastModifiedDate":"2023-08-20"},{"lineNumber":91,"author":{"gitId":"Chandan8186"},"content":" return task;","lastModifiedDate":"2023-08-20"},{"lineNumber":92,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":93,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":94,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":95,"author":{"gitId":"Chandan8186"},"content":" * Marks task as not done.","lastModifiedDate":"2023-08-29"},{"lineNumber":96,"author":{"gitId":"Chandan8186"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":97,"author":{"gitId":"Chandan8186"},"content":" * @param i Index of task to be marked not done.","lastModifiedDate":"2023-08-29"},{"lineNumber":98,"author":{"gitId":"Chandan8186"},"content":" * @return Task which was marked not done.","lastModifiedDate":"2023-08-29"},{"lineNumber":99,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":100,"author":{"gitId":"Chandan8186"},"content":" public Task unmarkTask(int i) {","lastModifiedDate":"2023-08-20"},{"lineNumber":101,"author":{"gitId":"Chandan8186"},"content":" if (this.tasks.size() \u003c 1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"Chandan8186"},"content":" throw new DukeException(\"The task list is empty.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":103,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":104,"author":{"gitId":"Chandan8186"},"content":" if (i \u003c 1 || i \u003e this.tasks.size()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"Chandan8186"},"content":" throw new InvalidIndexException(this.tasks.size());","lastModifiedDate":"2023-08-30"},{"lineNumber":106,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":107,"author":{"gitId":"Chandan8186"},"content":" Task task \u003d this.tasks.get(i - 1);","lastModifiedDate":"2023-08-30"},{"lineNumber":108,"author":{"gitId":"Chandan8186"},"content":" task.unmark();","lastModifiedDate":"2023-08-20"},{"lineNumber":109,"author":{"gitId":"Chandan8186"},"content":" return task;","lastModifiedDate":"2023-08-20"},{"lineNumber":110,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":111,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":112,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":113,"author":{"gitId":"Chandan8186"},"content":" * Deletes a task.","lastModifiedDate":"2023-08-29"},{"lineNumber":114,"author":{"gitId":"Chandan8186"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":115,"author":{"gitId":"Chandan8186"},"content":" * @param i Index of task to be deleted.","lastModifiedDate":"2023-08-29"},{"lineNumber":116,"author":{"gitId":"Chandan8186"},"content":" * @return The deleted task.","lastModifiedDate":"2023-08-29"},{"lineNumber":117,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":118,"author":{"gitId":"Chandan8186"},"content":" public Task deleteTask(int i) {","lastModifiedDate":"2023-08-22"},{"lineNumber":119,"author":{"gitId":"Chandan8186"},"content":" if (this.tasks.size() \u003c 1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":120,"author":{"gitId":"Chandan8186"},"content":" throw new DukeException(\"The task list is empty.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":121,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":122,"author":{"gitId":"Chandan8186"},"content":" if (i \u003c 1 || i \u003e this.tasks.size()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":123,"author":{"gitId":"Chandan8186"},"content":" throw new InvalidIndexException(this.tasks.size());","lastModifiedDate":"2023-08-30"},{"lineNumber":124,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":125,"author":{"gitId":"Chandan8186"},"content":" return this.tasks.remove(i - 1);","lastModifiedDate":"2023-09-02"},{"lineNumber":126,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":127,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":128,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":129,"author":{"gitId":"Chandan8186"},"content":" * Returns size of task list.","lastModifiedDate":"2023-08-29"},{"lineNumber":130,"author":{"gitId":"Chandan8186"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":131,"author":{"gitId":"Chandan8186"},"content":" * @return Size of task list.","lastModifiedDate":"2023-08-29"},{"lineNumber":132,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":133,"author":{"gitId":"Chandan8186"},"content":" public int getSize() {","lastModifiedDate":"2023-08-20"},{"lineNumber":134,"author":{"gitId":"Chandan8186"},"content":" return this.tasks.size();","lastModifiedDate":"2023-08-30"},{"lineNumber":135,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":136,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":137,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":138,"author":{"gitId":"Chandan8186"},"content":" * Returns the task list in the relevant format for storing in data file.","lastModifiedDate":"2023-08-29"},{"lineNumber":139,"author":{"gitId":"Chandan8186"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":140,"author":{"gitId":"Chandan8186"},"content":" * @return The task list string with the relevant format.","lastModifiedDate":"2023-08-29"},{"lineNumber":141,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":142,"author":{"gitId":"Chandan8186"},"content":" public String getTextFormattedString() {","lastModifiedDate":"2023-08-27"},{"lineNumber":143,"author":{"gitId":"Chandan8186"},"content":" StringBuilder str \u003d new StringBuilder();","lastModifiedDate":"2023-08-27"},{"lineNumber":144,"author":{"gitId":"Chandan8186"},"content":" for (Task task : this.tasks) {","lastModifiedDate":"2023-08-30"},{"lineNumber":145,"author":{"gitId":"Chandan8186"},"content":" str.append(task.getTextFormattedString() + \"\\n\");","lastModifiedDate":"2023-08-27"},{"lineNumber":146,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":147,"author":{"gitId":"Chandan8186"},"content":" return str.toString();","lastModifiedDate":"2023-08-27"},{"lineNumber":148,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":149,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":150,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":151,"author":{"gitId":"Chandan8186"},"content":" * Returns string representation of filtered task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":152,"author":{"gitId":"Chandan8186"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":153,"author":{"gitId":"Chandan8186"},"content":" * @return String representation of filtered task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":154,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":155,"author":{"gitId":"Chandan8186"},"content":" public String getMatchingTasks(String keyword) {","lastModifiedDate":"2023-08-30"},{"lineNumber":156,"author":{"gitId":"Chandan8186"},"content":" ArrayList\u003cTask\u003e filteredTasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":157,"author":{"gitId":"Chandan8186"},"content":" for (Task task : this.tasks) {","lastModifiedDate":"2023-08-30"},{"lineNumber":158,"author":{"gitId":"Chandan8186"},"content":" if (task.desc.contains(keyword)) {","lastModifiedDate":"2023-08-30"},{"lineNumber":159,"author":{"gitId":"Chandan8186"},"content":" filteredTasks.add(task);","lastModifiedDate":"2023-08-30"},{"lineNumber":160,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":161,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":162,"author":{"gitId":"Chandan8186"},"content":" if (filteredTasks.size() \u003d\u003d 0) {","lastModifiedDate":"2023-08-30"},{"lineNumber":163,"author":{"gitId":"Chandan8186"},"content":" return \"No task matches the given keyword.\";","lastModifiedDate":"2023-08-30"},{"lineNumber":164,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":165,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":166,"author":{"gitId":"Chandan8186"},"content":" StringBuilder str \u003d new StringBuilder(\"Here are the matching tasks in your list:\\n\");","lastModifiedDate":"2023-08-30"},{"lineNumber":167,"author":{"gitId":"Chandan8186"},"content":" for (int i \u003d 1; i \u003c\u003d filteredTasks.size(); i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":168,"author":{"gitId":"Chandan8186"},"content":" str.append(i + \". \" + filteredTasks.get(i - 1).toString() + \"\\n\");","lastModifiedDate":"2023-08-30"},{"lineNumber":169,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":170,"author":{"gitId":"Chandan8186"},"content":" return str.toString();","lastModifiedDate":"2023-08-30"},{"lineNumber":171,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":172,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":173,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":174,"author":{"gitId":"Chandan8186"},"content":" * Returns string representation of task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":175,"author":{"gitId":"Chandan8186"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":176,"author":{"gitId":"Chandan8186"},"content":" * @return String representation of task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":177,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":178,"author":{"gitId":"Chandan8186"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":179,"author":{"gitId":"Chandan8186"},"content":" public String toString() {","lastModifiedDate":"2023-08-20"},{"lineNumber":180,"author":{"gitId":"Chandan8186"},"content":" StringBuilder str \u003d new StringBuilder();","lastModifiedDate":"2023-08-20"},{"lineNumber":181,"author":{"gitId":"Chandan8186"},"content":" int len \u003d this.tasks.size();","lastModifiedDate":"2023-08-30"},{"lineNumber":182,"author":{"gitId":"Chandan8186"},"content":" if (len \u003d\u003d 0) {","lastModifiedDate":"2023-08-20"},{"lineNumber":183,"author":{"gitId":"Chandan8186"},"content":" return \"The task list is empty.\";","lastModifiedDate":"2023-08-20"},{"lineNumber":184,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":185,"author":{"gitId":"Chandan8186"},"content":" str.append(\"Here are the tasks in your list:\\n\");","lastModifiedDate":"2023-08-20"},{"lineNumber":186,"author":{"gitId":"Chandan8186"},"content":" for (int i \u003d 1; i \u003c len; i++) {","lastModifiedDate":"2023-08-20"},{"lineNumber":187,"author":{"gitId":"Chandan8186"},"content":" str.append(i + \". \" + this.tasks.get(i - 1) + \"\\n\");","lastModifiedDate":"2023-08-30"},{"lineNumber":188,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":189,"author":{"gitId":"Chandan8186"},"content":" str.append(len + \". \" + this.tasks.get(len - 1));","lastModifiedDate":"2023-08-30"},{"lineNumber":190,"author":{"gitId":"Chandan8186"},"content":" return str.toString();","lastModifiedDate":"2023-08-20"},{"lineNumber":191,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":192,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":193,"author":{"gitId":"Chandan8186"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"Chandan8186":193}},{"path":"src/main/java/tasks/TodoTask.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Chandan8186"},"content":"package tasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":3,"author":{"gitId":"Chandan8186"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Chandan8186"},"content":" * A todo task.","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"Chandan8186"},"content":"public class TodoTask extends Task {","lastModifiedDate":"2023-08-20"},{"lineNumber":7,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":8,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"Chandan8186"},"content":" * Constructor, initializes task description and isMarked.","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"Chandan8186"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"Chandan8186"},"content":" * @param desc Task description.","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"Chandan8186"},"content":" * @param isMarked 1 if is marked, 0 otherwise.","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"Chandan8186"},"content":" public TodoTask(String desc, int isMarked) {","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"Chandan8186"},"content":" super(desc);","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"Chandan8186"},"content":" if (isMarked \u003d\u003d 1) {","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"Chandan8186"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"Chandan8186"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"Chandan8186"},"content":" protected String getTextFormattedString() {","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"Chandan8186"},"content":" return String.format(\"T|%d|%s\", this.isDone ? 1 : 0, this.desc);","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"Chandan8186"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":27,"author":{"gitId":"Chandan8186"},"content":" public String toString() {","lastModifiedDate":"2023-08-20"},{"lineNumber":28,"author":{"gitId":"Chandan8186"},"content":" return String.format(\"[T]%s\", super.toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":30,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":31,"author":{"gitId":"Chandan8186"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"Chandan8186":31}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"Chandan8186"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"Chandan8186"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"Chandan8186"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"Chandan8186"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"Chandan8186"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Chandan8186"},"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-04"},{"lineNumber":9,"author":{"gitId":"Chandan8186"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"Chandan8186"},"content":" \u003cLabel fx:id\u003d\"dialog\" text\u003d\"Label\" wrapText\u003d\"true\"","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"Chandan8186"},"content":" style\u003d\"-fx-background-color: #CCEBF5 ; -fx-background-radius: 12px; -fx-border-color: black; -fx-border-radius: 12px;\"\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"Chandan8186"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"Chandan8186"},"content":" \u003cInsets bottom\u003d\"10.0\" left\u003d\"10.0\" right\u003d\"10.0\" top\u003d\"10.0\"/\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"Chandan8186"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"Chandan8186"},"content":" \u003cHBox.margin\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"Chandan8186"},"content":" \u003cInsets bottom\u003d\"6.0\" left\u003d\"6.0\" right\u003d\"6.0\" top\u003d\"6.0\"/\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"Chandan8186"},"content":" \u003c/HBox.margin\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"Chandan8186"},"content":" \u003c/Label\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"Chandan8186"},"content":" \u003cImageView fx:id\u003d\"displayPicture\" fitHeight\u003d\"99.0\" fitWidth\u003d\"99.0\" pickOnBounds\u003d\"true\" preserveRatio\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"Chandan8186"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"Chandan8186"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"Chandan8186"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"Chandan8186"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"Chandan8186"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"Chandan8186":24}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"Chandan8186"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"Chandan8186"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"Chandan8186"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"Chandan8186"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"Chandan8186"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"Chandan8186"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"Chandan8186"},"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-04"},{"lineNumber":10,"author":{"gitId":"Chandan8186"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"Chandan8186"},"content":" \u003cTextField fx:id\u003d\"userInput\" layoutY\u003d\"558.0\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"41.0\" prefWidth\u003d\"324.0\" style\u003d\"-fx-border-radius: 20px; -fx-background-radius: 20px;\" AnchorPane.bottomAnchor\u003d\"1.0\" /\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"Chandan8186"},"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\" style\u003d\"-fx-border-radius: 20px; -fx-background-radius: 20px;\" text\u003d\"Send\" /\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"Chandan8186"},"content":" \u003cScrollPane fx:id\u003d\"scrollPane\" hbarPolicy\u003d\"NEVER\" hvalue\u003d\"1.0\" maxHeight\u003d\"1.7976931348623157E308\" prefHeight\u003d\"557.0\" prefWidth\u003d\"400.0\" vbarPolicy\u003d\"ALWAYS\" vvalue\u003d\"1.0\"\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"Chandan8186"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"Chandan8186"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"552.0\" prefWidth\u003d\"388.0\" /\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"Chandan8186"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"Chandan8186"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"Chandan8186"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"Chandan8186"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"Chandan8186":19}},{"path":"src/test/java/tasks/TaskListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Chandan8186"},"content":"package tasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Chandan8186"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Chandan8186"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"Chandan8186"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"Chandan8186"},"content":"public class TaskListTest {","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Chandan8186"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Chandan8186"},"content":" public void testTodoTask_validInput_expectedOutcome() {","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Chandan8186"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"Chandan8186"},"content":" Task todoTask \u003d taskList.addTodo(\"some todo\", 0);","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"Chandan8186"},"content":" assertEquals(\"[T][ ] some todo\", todoTask.toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"Chandan8186"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"Chandan8186"},"content":" public void testDeadlineTask_validInput_expectedOutcome() {","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"Chandan8186"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"Chandan8186"},"content":" Task deadlineTask \u003d taskList.addDeadline(\"some deadline\",","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"Chandan8186"},"content":" \"2023-01-01 1500\",","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"Chandan8186"},"content":" 0);","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"Chandan8186"},"content":" String expected \u003d \"[D][ ] some deadline (by: 01-Jan-2023 1500)\";","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"Chandan8186"},"content":" assertEquals(expected, deadlineTask.toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"Chandan8186"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"Chandan8186"},"content":" public void testDeadlineTask_invalidDatetime_exceptionThrown() {","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"Chandan8186"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"Chandan8186"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"Chandan8186"},"content":" taskList.addDeadline(\"some deadline\",","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"Chandan8186"},"content":" \"2023-01-01 later\",","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"Chandan8186"},"content":" 0);","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"Chandan8186"},"content":" fail();","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"Chandan8186"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"Chandan8186"},"content":" String expected \u003d \"Text \u00272023-01-01 later\u0027 could not be parsed at index 11\";","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"Chandan8186"},"content":" assertEquals(expected, e.getMessage());","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"Chandan8186"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"Chandan8186"},"content":" public void testEventTask_validInput_expectedOutcome() {","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"Chandan8186"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"Chandan8186"},"content":" Task eventTask \u003d taskList.addEvent(\"some event\",","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"Chandan8186"},"content":" \"2023-01-01 1530\",","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"Chandan8186"},"content":" \"2023-01-01 1600\",","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"Chandan8186"},"content":" 0);","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"Chandan8186"},"content":" String expected \u003d \"[E][ ] some event (from: 01-Jan-2023 1530 to: 01-Jan-2023 1600)\";","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"Chandan8186"},"content":" assertEquals(expected, eventTask.toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"Chandan8186"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"Chandan8186"},"content":" public void testEventTask_invalidDatetime_exceptionThrown() {","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"Chandan8186"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"Chandan8186"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"Chandan8186"},"content":" taskList.addEvent(\"some deadline\",","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"Chandan8186"},"content":" \"today\",","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"Chandan8186"},"content":" \"tomorrow\",","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"Chandan8186"},"content":" 0);","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"Chandan8186"},"content":" fail();","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"Chandan8186"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"Chandan8186"},"content":" String expected \u003d \"Text \u0027today\u0027 could not be parsed at index 0\";","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"Chandan8186"},"content":" assertEquals(expected, e.getMessage());","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"Chandan8186"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"Chandan8186"},"content":" public void testMarkTask_validIndex_expectedOutcome() {","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"Chandan8186"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"Chandan8186"},"content":" Task todoTask \u003d taskList.addTodo(\"A todo task.\", 0);","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"Chandan8186"},"content":" assertEquals(\"[T][ ] A todo task.\", todoTask.toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"Chandan8186"},"content":" taskList.markTaskAsDone(1);","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"Chandan8186"},"content":" assertEquals(\"[T][X] A todo task.\", todoTask.toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":75,"author":{"gitId":"Chandan8186"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"Chandan8186"},"content":" public void testMarkTask_invalidIndex_exceptionThrown() {","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"Chandan8186"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"Chandan8186"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-08-29"},{"lineNumber":79,"author":{"gitId":"Chandan8186"},"content":" taskList.addTodo(\"A todo task.\", 0);","lastModifiedDate":"2023-08-29"},{"lineNumber":80,"author":{"gitId":"Chandan8186"},"content":" taskList.markTaskAsDone(3);","lastModifiedDate":"2023-08-29"},{"lineNumber":81,"author":{"gitId":"Chandan8186"},"content":" fail();","lastModifiedDate":"2023-08-29"},{"lineNumber":82,"author":{"gitId":"Chandan8186"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":83,"author":{"gitId":"Chandan8186"},"content":" String expected \u003d \"Invalid index format.\\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"Chandan8186"},"content":" + \"Format should be: mark \u003ctask index\u003e OR unmark \u003ctask index\u003e \"","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"Chandan8186"},"content":" + \"OR delete \u003ctask index\u003e\\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"Chandan8186"},"content":" + \"where index is from 1 to 1.\";","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"Chandan8186"},"content":" assertEquals(expected, e.getMessage());","lastModifiedDate":"2023-08-29"},{"lineNumber":88,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":89,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":90,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":91,"author":{"gitId":"Chandan8186"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":92,"author":{"gitId":"Chandan8186"},"content":" public void testUnmarkTask_validIndex_expectedOutcome() {","lastModifiedDate":"2023-08-29"},{"lineNumber":93,"author":{"gitId":"Chandan8186"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-08-29"},{"lineNumber":94,"author":{"gitId":"Chandan8186"},"content":" Task todoTask \u003d taskList.addTodo(\"Another todo task.\", 1);","lastModifiedDate":"2023-08-29"},{"lineNumber":95,"author":{"gitId":"Chandan8186"},"content":" assertEquals(\"[T][X] Another todo task.\", todoTask.toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":96,"author":{"gitId":"Chandan8186"},"content":" taskList.unmarkTask(1);","lastModifiedDate":"2023-08-29"},{"lineNumber":97,"author":{"gitId":"Chandan8186"},"content":" assertEquals(\"[T][ ] Another todo task.\", todoTask.toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":98,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":99,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":100,"author":{"gitId":"Chandan8186"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"Chandan8186":100}},{"path":"src/test/java/tasks/TodoTaskTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Chandan8186"},"content":"package tasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Chandan8186"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"Chandan8186"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"Chandan8186"},"content":"public class TodoTaskTest {","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Chandan8186"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Chandan8186"},"content":" public void testTodoTaskFormat_validInput_expectedOutcome() {","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Chandan8186"},"content":" Task task \u003d new TodoTask(\"A todo task\", 0);","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"Chandan8186"},"content":" assertEquals(\"T|0|A todo task\", task.getTextFormattedString());","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"Chandan8186"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"Chandan8186"},"content":" public void testTodoTaskSaveFormat_validInput_expectedOutcome() {","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"Chandan8186"},"content":" Task task \u003d new TodoTask(\"A todo task\", 0);","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"Chandan8186"},"content":" assertEquals(\"[T][ ] A todo task\", task.toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"Chandan8186"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"Chandan8186":21}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"Chandan8186"},"content":"list","lastModifiedDate":"2023-08-21"},{"lineNumber":2,"author":{"gitId":"Chandan8186"},"content":"todo Assignment 1","lastModifiedDate":"2023-08-21"},{"lineNumber":3,"author":{"gitId":"Chandan8186"},"content":"deadline Assignment 2 /by 2023-01-01 1245","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"Chandan8186"},"content":"event exam /from 2023-01-01 1245 /to 2023-01-01 1300","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"Chandan8186"},"content":"mark 1","lastModifiedDate":"2023-08-21"},{"lineNumber":6,"author":{"gitId":"Chandan8186"},"content":"unmark 1","lastModifiedDate":"2023-08-21"},{"lineNumber":7,"author":{"gitId":"Chandan8186"},"content":"delete 2","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"Chandan8186"},"content":"list","lastModifiedDate":"2023-08-21"},{"lineNumber":9,"author":{"gitId":"Chandan8186"},"content":"unknown command","lastModifiedDate":"2023-08-21"},{"lineNumber":10,"author":{"gitId":"Chandan8186"},"content":"todo","lastModifiedDate":"2023-08-22"},{"lineNumber":11,"author":{"gitId":"Chandan8186"},"content":"deadline /by","lastModifiedDate":"2023-08-22"},{"lineNumber":12,"author":{"gitId":"Chandan8186"},"content":"event something /from /to tomorrow","lastModifiedDate":"2023-08-22"},{"lineNumber":13,"author":{"gitId":"Chandan8186"},"content":"deadline a /by b","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"Chandan8186"},"content":"event a /from b /to c","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"Chandan8186"},"content":"mark 0","lastModifiedDate":"2023-08-22"},{"lineNumber":16,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":17,"author":{"gitId":"Chandan8186"},"content":"bye","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"Chandan8186":17}},{"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":"Chandan8186"},"content":"java -classpath ..\\bin duke.Duke \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-08-29"},{"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":{"Chandan8186":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":"Chandan8186"},"content":"if ! javac -cp ../src/main/java -Xlint:none -d ../bin ../src/main/java/Duke/*.java","lastModifiedDate":"2023-08-29"},{"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":"-"},"content":"java -classpath ../bin Duke \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"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":{"Chandan8186":1,"-":37}}] +[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"Chandan8186"},"content":"# duke.Duke project template","lastModifiedDate":"2023-08-29"},{"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":"Chandan8186"},"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-08-29"},{"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":{"Chandan8186":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":"-"},"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":"Chandan8186"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"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":"Chandan8186"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"Chandan8186"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"Chandan8186"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"Chandan8186"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"Chandan8186"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"Chandan8186"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"Chandan8186"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"Chandan8186"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"Chandan8186"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"Chandan8186"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"Chandan8186"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"Chandan8186"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"Chandan8186"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"Chandan8186"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","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":"","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":47,"author":{"gitId":"Chandan8186"},"content":" mainClass.set(\"duke.Launcher\")","lastModifiedDate":"2023-09-03"},{"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":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":52,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":53,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":54,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":55,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":56,"author":{"gitId":"-"},"content":"run {","lastModifiedDate":"2020-05-25"},{"lineNumber":57,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":58,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":59,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"Chandan8186"},"content":"checkstyle {","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"Chandan8186"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"Chandan8186"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"Chandan8186":21,"-":41}},{"path":"src/main/java/duke/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Chandan8186"},"content":"package duke;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Chandan8186"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"Chandan8186"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"Chandan8186"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"Chandan8186"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"Chandan8186"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"Chandan8186"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"Chandan8186"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"Chandan8186"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"Chandan8186"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"Chandan8186"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"Chandan8186"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"Chandan8186"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"Chandan8186"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"Chandan8186"},"content":" * An example of a custom control using FXML.","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"Chandan8186"},"content":" * This control represents a dialog box consisting of an ImageView to represent the speaker\u0027s face and a label","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"Chandan8186"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"Chandan8186"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"Chandan8186"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"Chandan8186"},"content":" private Label dialog;","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"Chandan8186"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"Chandan8186"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"Chandan8186"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"Chandan8186"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"Chandan8186"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"Chandan8186"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"Chandan8186"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"Chandan8186"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"Chandan8186"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"Chandan8186"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"Chandan8186"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"Chandan8186"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"Chandan8186"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"Chandan8186"},"content":" private void flip() {","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"Chandan8186"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"Chandan8186"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"Chandan8186"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"Chandan8186"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"Chandan8186"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"Chandan8186"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"Chandan8186"},"content":" public static DialogBox getDukeDialog(String text, Image img) {","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"Chandan8186"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"Chandan8186"},"content":" db.flip();","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"Chandan8186"},"content":" return db;","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"Chandan8186"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"Chandan8186":61}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Chandan8186"},"content":"package duke;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Chandan8186"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":5,"author":{"gitId":"Chandan8186"},"content":"import exceptions.DukeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"Chandan8186"},"content":"import tasks.Task;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"Chandan8186"},"content":"import tasks.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"Chandan8186"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Chandan8186"},"content":" * Duke is a chatbot that allows users to manage tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Chandan8186"},"content":"public class Duke {","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":14,"author":{"gitId":"Chandan8186"},"content":" protected static TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"Chandan8186"},"content":" protected static Storage storage;","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Chandan8186"},"content":" * Marks task as done.","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Chandan8186"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Chandan8186"},"content":" * @param index Index of task.","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Chandan8186"},"content":" * @return String to be shown to user.","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"Chandan8186"},"content":" * @throws DukeException If index is out of range.","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Chandan8186"},"content":" public static String markTask(int index)","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"Chandan8186"},"content":" throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"Chandan8186"},"content":" Task task \u003d Duke.taskList.markTaskAsDone(index);","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"Chandan8186"},"content":" storage.saveChanges(Duke.taskList);","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"Chandan8186"},"content":" return Ui.getTaskMarkingMessage(task);","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":30,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":31,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Chandan8186"},"content":" * Marks task as not done.","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Chandan8186"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"Chandan8186"},"content":" * @param index Index of task.","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"Chandan8186"},"content":" * @return String to be shown to user.","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"Chandan8186"},"content":" * @throws DukeException If index is out of range.","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"Chandan8186"},"content":" public static String unmarkTask(int index)","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"Chandan8186"},"content":" throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"Chandan8186"},"content":" Task task \u003d Duke.taskList.unmarkTask(index);","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"Chandan8186"},"content":" storage.saveChanges(Duke.taskList);","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"Chandan8186"},"content":" return Ui.getTaskUnmarkingMessage(task);","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":44,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":45,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"Chandan8186"},"content":" * Deletes task.","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"Chandan8186"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"Chandan8186"},"content":" * @param index Index of task.","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"Chandan8186"},"content":" * @return String to be shown to user.","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"Chandan8186"},"content":" * @throws DukeException If index is out of range.","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"Chandan8186"},"content":" public static String deleteTask(int index)","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"Chandan8186"},"content":" throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"Chandan8186"},"content":" Task task \u003d Duke.taskList.deleteTask(index);","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"Chandan8186"},"content":" storage.saveChanges(Duke.taskList);","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"Chandan8186"},"content":" return Ui.getTaskDeletingMessage(task, Duke.taskList.getSize());","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":58,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":59,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"Chandan8186"},"content":" * Creates todo task.","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"Chandan8186"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"Chandan8186"},"content":" * @param desc Description of task.","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"Chandan8186"},"content":" * @return Message to be shown after task is created.","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"Chandan8186"},"content":" public static String createTodo(String desc) {","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"Chandan8186"},"content":" Task task \u003d Duke.taskList.addTodo(desc, 0);","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"Chandan8186"},"content":" storage.saveChanges(Duke.taskList);","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"Chandan8186"},"content":" return Ui.getTaskAddingMessage(task, Duke.taskList.getSize());","lastModifiedDate":"2023-09-04"},{"lineNumber":69,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":70,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":71,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"Chandan8186"},"content":" * Creates deadline task.","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"Chandan8186"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"Chandan8186"},"content":" * @param desc Description of task.","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"Chandan8186"},"content":" * @param deadline Deadline date/time.","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"Chandan8186"},"content":" * @return Message to be shown after task is created.","lastModifiedDate":"2023-09-04"},{"lineNumber":77,"author":{"gitId":"Chandan8186"},"content":" * @throws DateTimeParseException If deadline doesn\u0027t match format \"yyyy-MM-dd HHmm\".","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"Chandan8186"},"content":" public static String createDeadline(String desc, String deadline)","lastModifiedDate":"2023-09-03"},{"lineNumber":80,"author":{"gitId":"Chandan8186"},"content":" throws DateTimeParseException {","lastModifiedDate":"2023-08-29"},{"lineNumber":81,"author":{"gitId":"Chandan8186"},"content":" Task task \u003d Duke.taskList.addDeadline(desc, deadline, 0);","lastModifiedDate":"2023-08-29"},{"lineNumber":82,"author":{"gitId":"Chandan8186"},"content":" storage.saveChanges(Duke.taskList);","lastModifiedDate":"2023-08-29"},{"lineNumber":83,"author":{"gitId":"Chandan8186"},"content":" return Ui.getTaskAddingMessage(task, Duke.taskList.getSize());","lastModifiedDate":"2023-09-04"},{"lineNumber":84,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":85,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":86,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"Chandan8186"},"content":" * Creates event task.","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"Chandan8186"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"Chandan8186"},"content":" * @param desc Description of task.","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"Chandan8186"},"content":" * @param start Start date/time.","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"Chandan8186"},"content":" * @param end End date/time.","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"Chandan8186"},"content":" * @return Message to be shown after task is created.","lastModifiedDate":"2023-09-04"},{"lineNumber":93,"author":{"gitId":"Chandan8186"},"content":" * @throws DateTimeParseException If start/end don\u0027t match format \"yyyy-MM-dd HHmm\".","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"Chandan8186"},"content":" public static String createEvent(String desc, String start, String end)","lastModifiedDate":"2023-09-03"},{"lineNumber":96,"author":{"gitId":"Chandan8186"},"content":" throws DateTimeParseException {","lastModifiedDate":"2023-08-29"},{"lineNumber":97,"author":{"gitId":"Chandan8186"},"content":" Task task \u003d Duke.taskList.addEvent(desc, start, end, 0);","lastModifiedDate":"2023-08-29"},{"lineNumber":98,"author":{"gitId":"Chandan8186"},"content":" storage.saveChanges(Duke.taskList);","lastModifiedDate":"2023-08-29"},{"lineNumber":99,"author":{"gitId":"Chandan8186"},"content":" return Ui.getTaskAddingMessage(task, Duke.taskList.getSize());","lastModifiedDate":"2023-09-04"},{"lineNumber":100,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":101,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":102,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"Chandan8186"},"content":" * Gives list of current tasks in output message format.","lastModifiedDate":"2023-09-04"},{"lineNumber":104,"author":{"gitId":"Chandan8186"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":105,"author":{"gitId":"Chandan8186"},"content":" * @return Message to be shown to user.","lastModifiedDate":"2023-09-04"},{"lineNumber":106,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"Chandan8186"},"content":" public static String listTasks() {","lastModifiedDate":"2023-09-03"},{"lineNumber":108,"author":{"gitId":"Chandan8186"},"content":" return Duke.taskList.toString();","lastModifiedDate":"2023-09-04"},{"lineNumber":109,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":110,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":111,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":112,"author":{"gitId":"Chandan8186"},"content":" * Gives list of current tasks in output message format.","lastModifiedDate":"2023-09-04"},{"lineNumber":113,"author":{"gitId":"Chandan8186"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":114,"author":{"gitId":"Chandan8186"},"content":" * @param keyword String of keyword.","lastModifiedDate":"2023-09-04"},{"lineNumber":115,"author":{"gitId":"Chandan8186"},"content":" * @return Message to be shown to user.","lastModifiedDate":"2023-09-04"},{"lineNumber":116,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":117,"author":{"gitId":"Chandan8186"},"content":" public static String listFilteredTasks(String keyword) {","lastModifiedDate":"2023-09-03"},{"lineNumber":118,"author":{"gitId":"Chandan8186"},"content":" return Duke.taskList.getMatchingTasks(keyword);","lastModifiedDate":"2023-09-03"},{"lineNumber":119,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":120,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":121,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":122,"author":{"gitId":"Chandan8186"},"content":" * Gives statistics of tasks in task list.","lastModifiedDate":"2023-09-10"},{"lineNumber":123,"author":{"gitId":"Chandan8186"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":124,"author":{"gitId":"Chandan8186"},"content":" * @return String of statistics of tasks in task list.","lastModifiedDate":"2023-09-10"},{"lineNumber":125,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":126,"author":{"gitId":"Chandan8186"},"content":" public static String getTaskStats() {","lastModifiedDate":"2023-09-10"},{"lineNumber":127,"author":{"gitId":"Chandan8186"},"content":" return Duke.taskList.getTaskStats();","lastModifiedDate":"2023-09-10"},{"lineNumber":128,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":129,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":130,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":131,"author":{"gitId":"Chandan8186"},"content":" * Gets the response string to be printed to the user after processing user input.","lastModifiedDate":"2023-09-04"},{"lineNumber":132,"author":{"gitId":"Chandan8186"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":133,"author":{"gitId":"Chandan8186"},"content":" * @param userInput User input.","lastModifiedDate":"2023-09-04"},{"lineNumber":134,"author":{"gitId":"Chandan8186"},"content":" * @return The response string.","lastModifiedDate":"2023-09-04"},{"lineNumber":135,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":136,"author":{"gitId":"Chandan8186"},"content":" protected String getResponse(String userInput) {","lastModifiedDate":"2023-09-04"},{"lineNumber":137,"author":{"gitId":"Chandan8186"},"content":" String output \u003d \"\";","lastModifiedDate":"2023-09-03"},{"lineNumber":138,"author":{"gitId":"Chandan8186"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":139,"author":{"gitId":"Chandan8186"},"content":" output \u003d Parser.parseUserInput(userInput, Duke.taskList.getSize());","lastModifiedDate":"2023-09-03"},{"lineNumber":140,"author":{"gitId":"Chandan8186"},"content":" } catch (RuntimeException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":141,"author":{"gitId":"Chandan8186"},"content":" output \u003d e.getMessage();","lastModifiedDate":"2023-09-03"},{"lineNumber":142,"author":{"gitId":"Chandan8186"},"content":" } finally {","lastModifiedDate":"2023-09-03"},{"lineNumber":143,"author":{"gitId":"Chandan8186"},"content":" return output;","lastModifiedDate":"2023-09-03"},{"lineNumber":144,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":145,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":146,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":147,"author":{"gitId":"Chandan8186"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"Chandan8186":147}},{"path":"src/main/java/duke/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Chandan8186"},"content":"package duke;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Chandan8186"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"Chandan8186"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"Chandan8186"},"content":" * A launcher class to workaround classpath issues.","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"Chandan8186"},"content":"public class Launcher {","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"Chandan8186"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"Chandan8186"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"Chandan8186"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"Chandan8186":12}},{"path":"src/main/java/duke/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Chandan8186"},"content":"package duke;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"Chandan8186"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"Chandan8186"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"Chandan8186"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"Chandan8186"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Chandan8186"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"Chandan8186"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"Chandan8186"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"Chandan8186"},"content":" * A GUI for Duke using FXML.","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"Chandan8186"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"Chandan8186"},"content":" private Duke duke \u003d new Duke();","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"Chandan8186"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"Chandan8186"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"Chandan8186"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"Chandan8186"},"content":" Storage storage \u003d new Storage(\"duke.txt\");","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"Chandan8186"},"content":" duke.storage \u003d storage;","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"Chandan8186"},"content":" duke.taskList \u003d storage.retrieveSavedData();","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"Chandan8186"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"Chandan8186"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"Chandan8186"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"Chandan8186"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"Chandan8186"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setDuke(duke);","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"Chandan8186"},"content":" stage.show();","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"Chandan8186"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"Chandan8186"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"Chandan8186"},"content":"}","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"Chandan8186":36}},{"path":"src/main/java/duke/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Chandan8186"},"content":"package duke;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"Chandan8186"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"Chandan8186"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"Chandan8186"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"Chandan8186"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"Chandan8186"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Chandan8186"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"Chandan8186"},"content":"import javafx.scene.layout.Region;","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"Chandan8186"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"Chandan8186"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"Chandan8186"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"Chandan8186"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"Chandan8186"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"Chandan8186"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"Chandan8186"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"Chandan8186"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"Chandan8186"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"Chandan8186"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"Chandan8186"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"Chandan8186"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"Chandan8186"},"content":" private Duke duke;","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"Chandan8186"},"content":" private Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/userAvatar.png\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"Chandan8186"},"content":" private Image dukeImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/dukeAvatar.png\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"Chandan8186"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"Chandan8186"},"content":" public void initialize() {","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"Chandan8186"},"content":" dialogContainer.getChildren().add(DialogBox.getDukeDialog(Ui.getIntroMessage(), dukeImage));","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"Chandan8186"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"Chandan8186"},"content":" public void setDuke(Duke d) {","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"Chandan8186"},"content":" duke \u003d d;","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"Chandan8186"},"content":" * Creates two dialog boxes, one echoing user input and the other containing Duke\u0027s reply and then appends them to","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"Chandan8186"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"Chandan8186"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"Chandan8186"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"Chandan8186"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"Chandan8186"},"content":" String response \u003d duke.getResponse(input);","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":49,"author":{"gitId":"Chandan8186"},"content":" DialogBox userDialog \u003d DialogBox.getUserDialog(input, userImage);","lastModifiedDate":"2023-09-06"},{"lineNumber":50,"author":{"gitId":"Chandan8186"},"content":" userDialog.setMinHeight(Region.USE_PREF_SIZE);","lastModifiedDate":"2023-09-06"},{"lineNumber":51,"author":{"gitId":"Chandan8186"},"content":" DialogBox dukeDialog \u003d DialogBox.getDukeDialog(response, dukeImage);","lastModifiedDate":"2023-09-06"},{"lineNumber":52,"author":{"gitId":"Chandan8186"},"content":" dukeDialog.setMinHeight(Region.USE_PREF_SIZE);","lastModifiedDate":"2023-09-06"},{"lineNumber":53,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":54,"author":{"gitId":"Chandan8186"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"Chandan8186"},"content":" userDialog,","lastModifiedDate":"2023-09-06"},{"lineNumber":56,"author":{"gitId":"Chandan8186"},"content":" dukeDialog","lastModifiedDate":"2023-09-06"},{"lineNumber":57,"author":{"gitId":"Chandan8186"},"content":" );","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"Chandan8186"},"content":" userInput.clear();","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"Chandan8186"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"Chandan8186":60}},{"path":"src/main/java/duke/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Chandan8186"},"content":"package duke;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Chandan8186"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"Chandan8186"},"content":"import exceptions.DukeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"Chandan8186"},"content":"import exceptions.InvalidDeadlineException;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"Chandan8186"},"content":"import exceptions.InvalidEventException;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"Chandan8186"},"content":"import exceptions.InvalidIndexException;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Chandan8186"},"content":"import exceptions.InvalidTodoException;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Chandan8186"},"content":"import exceptions.UnknownCommandException;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"Chandan8186"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"Chandan8186"},"content":" * Parses user input and instructs Duke to act on the relevant command.","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"Chandan8186"},"content":"public class Parser {","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"Chandan8186"},"content":" * Parses the user input and asks Duke to invoke the relevant functions.","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"Chandan8186"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"Chandan8186"},"content":" * @param userInput The command and argument that the user enters.","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"Chandan8186"},"content":" * @param taskListSize The current size of the task list.","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"Chandan8186"},"content":" * @return The command of the user input, if valid.","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"Chandan8186"},"content":" * @throws UnknownCommandException If the command doesn\u0027t match any of Duke\u0027s commands.","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"Chandan8186"},"content":" * @throws InvalidIndexException If the index provided is out of range, where relevant.","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"Chandan8186"},"content":" * @throws InvalidTodoException If the user input is invalid (e.g. no description).","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"Chandan8186"},"content":" * @throws InvalidDeadlineException If the user input is invalid (e.g. no deadline).","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"Chandan8186"},"content":" * @throws InvalidEventException If the user input is invalid (e.g. no start).","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"Chandan8186"},"content":" public static String parseUserInput(String userInput, int taskListSize)","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"Chandan8186"},"content":" throws UnknownCommandException,","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"Chandan8186"},"content":" InvalidIndexException,","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"Chandan8186"},"content":" InvalidTodoException,","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"Chandan8186"},"content":" InvalidDeadlineException,","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"Chandan8186"},"content":" InvalidEventException {","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"Chandan8186"},"content":" String[] inputArr \u003d userInput.trim().split(\" \");","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"Chandan8186"},"content":" if (inputArr.length \u003d\u003d 0) {","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"Chandan8186"},"content":" throw new UnknownCommandException();","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"Chandan8186"},"content":" String command \u003d inputArr[0];","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"Chandan8186"},"content":" switch(command) {","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"Chandan8186"},"content":" case \"list\":","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"Chandan8186"},"content":" return Duke.listTasks();","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"Chandan8186"},"content":" case \"stats\":","lastModifiedDate":"2023-09-10"},{"lineNumber":46,"author":{"gitId":"Chandan8186"},"content":" return Duke.getTaskStats();","lastModifiedDate":"2023-09-10"},{"lineNumber":47,"author":{"gitId":"Chandan8186"},"content":" case \"find\":","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"Chandan8186"},"content":" return parseFilter(userInput);","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"Chandan8186"},"content":" case \"mark\":","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"Chandan8186"},"content":" return parseMark(userInput, taskListSize);","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"Chandan8186"},"content":" case \"unmark\":","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"Chandan8186"},"content":" return parseUnmark(userInput, taskListSize);","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"Chandan8186"},"content":" case \"delete\":","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"Chandan8186"},"content":" return parseDelete(userInput, taskListSize);","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"Chandan8186"},"content":" case \"todo\":","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"Chandan8186"},"content":" return parseTodo(userInput);","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"Chandan8186"},"content":" case \"deadline\":","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"Chandan8186"},"content":" return parseDeadline(userInput);","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"Chandan8186"},"content":" case \"event\":","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"Chandan8186"},"content":" return parseEvent(userInput);","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"Chandan8186"},"content":" case \"bye\":","lastModifiedDate":"2023-09-06"},{"lineNumber":62,"author":{"gitId":"Chandan8186"},"content":" return Ui.getOutroMessage();","lastModifiedDate":"2023-09-06"},{"lineNumber":63,"author":{"gitId":"Chandan8186"},"content":" default:","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"Chandan8186"},"content":" throw new UnknownCommandException();","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"Chandan8186"},"content":" private static String parseFilter(String userInput)","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"Chandan8186"},"content":" throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"Chandan8186"},"content":" String restOfInput \u003d userInput.trim().substring(4).trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"Chandan8186"},"content":" if (restOfInput.equals(\"\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"Chandan8186"},"content":" throw new DukeException(\"No keyword was provided, please enter again.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"Chandan8186"},"content":" return Duke.listFilteredTasks(restOfInput);","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"Chandan8186"},"content":" private static String parseMark(String userInput, int taskListSize)","lastModifiedDate":"2023-09-03"},{"lineNumber":78,"author":{"gitId":"Chandan8186"},"content":" throws InvalidIndexException {","lastModifiedDate":"2023-08-29"},{"lineNumber":79,"author":{"gitId":"Chandan8186"},"content":" String restOfInput \u003d userInput.trim().substring(4).trim();","lastModifiedDate":"2023-08-29"},{"lineNumber":80,"author":{"gitId":"Chandan8186"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":81,"author":{"gitId":"Chandan8186"},"content":" int taskNum \u003d Integer.parseInt(restOfInput);","lastModifiedDate":"2023-08-29"},{"lineNumber":82,"author":{"gitId":"Chandan8186"},"content":" return Duke.markTask(taskNum);","lastModifiedDate":"2023-09-04"},{"lineNumber":83,"author":{"gitId":"Chandan8186"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-06"},{"lineNumber":84,"author":{"gitId":"Chandan8186"},"content":" throw new InvalidIndexException(taskListSize);","lastModifiedDate":"2023-08-29"},{"lineNumber":85,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":86,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":87,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":88,"author":{"gitId":"Chandan8186"},"content":" private static String parseUnmark(String userInput, int taskListSize)","lastModifiedDate":"2023-09-03"},{"lineNumber":89,"author":{"gitId":"Chandan8186"},"content":" throws InvalidIndexException {","lastModifiedDate":"2023-08-29"},{"lineNumber":90,"author":{"gitId":"Chandan8186"},"content":" String restOfInput \u003d userInput.trim().substring(6).trim();","lastModifiedDate":"2023-08-29"},{"lineNumber":91,"author":{"gitId":"Chandan8186"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":92,"author":{"gitId":"Chandan8186"},"content":" int taskNum \u003d Integer.parseInt(restOfInput);","lastModifiedDate":"2023-08-29"},{"lineNumber":93,"author":{"gitId":"Chandan8186"},"content":" return Duke.unmarkTask(taskNum);","lastModifiedDate":"2023-09-04"},{"lineNumber":94,"author":{"gitId":"Chandan8186"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-06"},{"lineNumber":95,"author":{"gitId":"Chandan8186"},"content":" throw new InvalidIndexException(taskListSize);","lastModifiedDate":"2023-08-29"},{"lineNumber":96,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":97,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":98,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":99,"author":{"gitId":"Chandan8186"},"content":" private static String parseDelete(String userInput, int taskListSize)","lastModifiedDate":"2023-09-03"},{"lineNumber":100,"author":{"gitId":"Chandan8186"},"content":" throws InvalidIndexException {","lastModifiedDate":"2023-08-29"},{"lineNumber":101,"author":{"gitId":"Chandan8186"},"content":" String restOfInput \u003d userInput.trim().substring(6).trim();","lastModifiedDate":"2023-08-29"},{"lineNumber":102,"author":{"gitId":"Chandan8186"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":103,"author":{"gitId":"Chandan8186"},"content":" int taskNum \u003d Integer.parseInt(restOfInput);","lastModifiedDate":"2023-08-29"},{"lineNumber":104,"author":{"gitId":"Chandan8186"},"content":" return Duke.deleteTask(taskNum);","lastModifiedDate":"2023-09-03"},{"lineNumber":105,"author":{"gitId":"Chandan8186"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-06"},{"lineNumber":106,"author":{"gitId":"Chandan8186"},"content":" throw new InvalidIndexException(taskListSize);","lastModifiedDate":"2023-08-29"},{"lineNumber":107,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":108,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":109,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":110,"author":{"gitId":"Chandan8186"},"content":" private static String parseTodo(String userInput)","lastModifiedDate":"2023-09-03"},{"lineNumber":111,"author":{"gitId":"Chandan8186"},"content":" throws InvalidTodoException {","lastModifiedDate":"2023-08-29"},{"lineNumber":112,"author":{"gitId":"Chandan8186"},"content":" String restOfInput \u003d userInput.trim().substring(4).trim();","lastModifiedDate":"2023-08-29"},{"lineNumber":113,"author":{"gitId":"Chandan8186"},"content":" if (restOfInput.equals(\"\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":114,"author":{"gitId":"Chandan8186"},"content":" throw new InvalidTodoException();","lastModifiedDate":"2023-08-29"},{"lineNumber":115,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":116,"author":{"gitId":"Chandan8186"},"content":" return Duke.createTodo(restOfInput);","lastModifiedDate":"2023-09-03"},{"lineNumber":117,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":118,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":119,"author":{"gitId":"Chandan8186"},"content":" private static String parseDeadline(String userInput)","lastModifiedDate":"2023-09-03"},{"lineNumber":120,"author":{"gitId":"Chandan8186"},"content":" throws InvalidDeadlineException {","lastModifiedDate":"2023-08-29"},{"lineNumber":121,"author":{"gitId":"Chandan8186"},"content":" String restOfInput \u003d userInput.trim().substring(8).trim();","lastModifiedDate":"2023-08-29"},{"lineNumber":122,"author":{"gitId":"Chandan8186"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":123,"author":{"gitId":"Chandan8186"},"content":" if (!restOfInput.contains(\"/by\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":124,"author":{"gitId":"Chandan8186"},"content":" throw new InvalidDeadlineException();","lastModifiedDate":"2023-08-29"},{"lineNumber":125,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":126,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":127,"author":{"gitId":"Chandan8186"},"content":" String[] arr \u003d restOfInput.split(\"/by\");","lastModifiedDate":"2023-08-29"},{"lineNumber":128,"author":{"gitId":"Chandan8186"},"content":" if (arr.length \u003c 2) {","lastModifiedDate":"2023-08-29"},{"lineNumber":129,"author":{"gitId":"Chandan8186"},"content":" throw new InvalidDeadlineException();","lastModifiedDate":"2023-08-29"},{"lineNumber":130,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":131,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":132,"author":{"gitId":"Chandan8186"},"content":" String desc \u003d arr[0].trim();","lastModifiedDate":"2023-08-29"},{"lineNumber":133,"author":{"gitId":"Chandan8186"},"content":" String deadline \u003d arr[1].trim();","lastModifiedDate":"2023-08-29"},{"lineNumber":134,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":135,"author":{"gitId":"Chandan8186"},"content":" if (desc.equals(\"\") || deadline.equals(\"\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":136,"author":{"gitId":"Chandan8186"},"content":" throw new InvalidDeadlineException();","lastModifiedDate":"2023-08-29"},{"lineNumber":137,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":138,"author":{"gitId":"Chandan8186"},"content":" return Duke.createDeadline(desc, deadline);","lastModifiedDate":"2023-09-03"},{"lineNumber":139,"author":{"gitId":"Chandan8186"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":140,"author":{"gitId":"Chandan8186"},"content":" throw new InvalidDeadlineException();","lastModifiedDate":"2023-08-29"},{"lineNumber":141,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":142,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":143,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":144,"author":{"gitId":"Chandan8186"},"content":" private static String parseEvent(String userInput)","lastModifiedDate":"2023-09-03"},{"lineNumber":145,"author":{"gitId":"Chandan8186"},"content":" throws InvalidEventException {","lastModifiedDate":"2023-08-29"},{"lineNumber":146,"author":{"gitId":"Chandan8186"},"content":" String restOfInput \u003d userInput.trim().substring(5).trim();","lastModifiedDate":"2023-08-29"},{"lineNumber":147,"author":{"gitId":"Chandan8186"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":148,"author":{"gitId":"Chandan8186"},"content":" if (!restOfInput.contains(\"/from\") || !restOfInput.contains(\"/to\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":149,"author":{"gitId":"Chandan8186"},"content":" throw new InvalidEventException();","lastModifiedDate":"2023-08-29"},{"lineNumber":150,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":151,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":152,"author":{"gitId":"Chandan8186"},"content":" String[] arr \u003d restOfInput.split(\"/from|/to\");","lastModifiedDate":"2023-08-29"},{"lineNumber":153,"author":{"gitId":"Chandan8186"},"content":" if (arr.length \u003c 3) {","lastModifiedDate":"2023-08-29"},{"lineNumber":154,"author":{"gitId":"Chandan8186"},"content":" throw new InvalidEventException();","lastModifiedDate":"2023-08-29"},{"lineNumber":155,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":156,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":157,"author":{"gitId":"Chandan8186"},"content":" String desc \u003d arr[0].trim();","lastModifiedDate":"2023-08-29"},{"lineNumber":158,"author":{"gitId":"Chandan8186"},"content":" String start \u003d arr[1].trim();","lastModifiedDate":"2023-08-29"},{"lineNumber":159,"author":{"gitId":"Chandan8186"},"content":" String end \u003d arr[2].trim();","lastModifiedDate":"2023-08-29"},{"lineNumber":160,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":161,"author":{"gitId":"Chandan8186"},"content":" if (desc.equals(\"\") || start.equals(\"\") || end.equals(\"\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":162,"author":{"gitId":"Chandan8186"},"content":" throw new InvalidEventException();","lastModifiedDate":"2023-08-29"},{"lineNumber":163,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":164,"author":{"gitId":"Chandan8186"},"content":" return Duke.createEvent(desc, start, end);","lastModifiedDate":"2023-09-03"},{"lineNumber":165,"author":{"gitId":"Chandan8186"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":166,"author":{"gitId":"Chandan8186"},"content":" throw new InvalidEventException();","lastModifiedDate":"2023-08-29"},{"lineNumber":167,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":168,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":169,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":170,"author":{"gitId":"Chandan8186"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"Chandan8186":170}},{"path":"src/main/java/duke/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Chandan8186"},"content":"package duke;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Chandan8186"},"content":"import java.io.File;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"Chandan8186"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"Chandan8186"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"Chandan8186"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"Chandan8186"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"Chandan8186"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"Chandan8186"},"content":"import tasks.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"Chandan8186"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"Chandan8186"},"content":" * Saves and retrieves tasks created by the user.","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"Chandan8186"},"content":"public class Storage {","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"Chandan8186"},"content":" private final String FILENAME;","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"Chandan8186"},"content":" * Constructor, initializes the file name indicated by the user.","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"Chandan8186"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"Chandan8186"},"content":" * @param filename Name of file to read or write task data to or from.","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"Chandan8186"},"content":" public Storage(String filename) {","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"Chandan8186"},"content":" assert !filename.equals(\"\") : \"File name should not be empty.\";","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"Chandan8186"},"content":" this.FILENAME \u003d filename;","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"Chandan8186"},"content":" * Obtains saved task data from data file and updates Duke with it.","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"Chandan8186"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"Chandan8186"},"content":" * @return A TaskList containing all the previously saved tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"Chandan8186"},"content":" public TaskList retrieveSavedData() {","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"Chandan8186"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"Chandan8186"},"content":" ArrayList\u003cString\u003e arr \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"Chandan8186"},"content":" File f \u003d new File(\"data/\" + FILENAME);","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"Chandan8186"},"content":" if (!f.exists()) {","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"Chandan8186"},"content":" return new TaskList();","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"Chandan8186"},"content":" Scanner s \u003d new Scanner(f);","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"Chandan8186"},"content":" while (s.hasNext()) {","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"Chandan8186"},"content":" String str \u003d s.nextLine();","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"Chandan8186"},"content":" arr.add(str);","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"Chandan8186"},"content":" s.close();","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"Chandan8186"},"content":" return populateTaskList(arr);","lastModifiedDate":"2023-09-10"},{"lineNumber":50,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"Chandan8186"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"Chandan8186"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"Chandan8186"},"content":" return new TaskList();","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"Chandan8186"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-06"},{"lineNumber":55,"author":{"gitId":"Chandan8186"},"content":" System.out.println(\"There was an error parsing the data in the data file; \"","lastModifiedDate":"2023-09-06"},{"lineNumber":56,"author":{"gitId":"Chandan8186"},"content":" + \"the file might have been tampered with externally.\");","lastModifiedDate":"2023-09-06"},{"lineNumber":57,"author":{"gitId":"Chandan8186"},"content":" System.out.println(\"Hence, the data will be cleared.\");","lastModifiedDate":"2023-09-06"},{"lineNumber":58,"author":{"gitId":"Chandan8186"},"content":" return new TaskList();","lastModifiedDate":"2023-09-06"},{"lineNumber":59,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":60,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":61,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":62,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"Chandan8186"},"content":" * Parses stored task data and populates a TaskList with it.","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"Chandan8186"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"Chandan8186"},"content":" * @param arr An array of tasks in the stored string format.","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"Chandan8186"},"content":" * @return A TaskList of the said tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"Chandan8186"},"content":" private TaskList populateTaskList(ArrayList\u003cString\u003e arr) {","lastModifiedDate":"2023-09-10"},{"lineNumber":69,"author":{"gitId":"Chandan8186"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-08-28"},{"lineNumber":70,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":71,"author":{"gitId":"Chandan8186"},"content":" for (String str : arr) {","lastModifiedDate":"2023-08-28"},{"lineNumber":72,"author":{"gitId":"Chandan8186"},"content":" String[] segmented \u003d str.split(\"\\\\|\");","lastModifiedDate":"2023-08-28"},{"lineNumber":73,"author":{"gitId":"Chandan8186"},"content":" String taskType \u003d segmented[0];","lastModifiedDate":"2023-08-28"},{"lineNumber":74,"author":{"gitId":"Chandan8186"},"content":" int isMarked \u003d Integer.parseInt(segmented[1]);","lastModifiedDate":"2023-08-28"},{"lineNumber":75,"author":{"gitId":"Chandan8186"},"content":" String desc \u003d segmented[2];","lastModifiedDate":"2023-08-28"},{"lineNumber":76,"author":{"gitId":"Chandan8186"},"content":" String end;","lastModifiedDate":"2023-08-28"},{"lineNumber":77,"author":{"gitId":"Chandan8186"},"content":" String start;","lastModifiedDate":"2023-08-28"},{"lineNumber":78,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":79,"author":{"gitId":"Chandan8186"},"content":" switch (taskType) {","lastModifiedDate":"2023-08-28"},{"lineNumber":80,"author":{"gitId":"Chandan8186"},"content":" case \"T\":","lastModifiedDate":"2023-08-28"},{"lineNumber":81,"author":{"gitId":"Chandan8186"},"content":" taskList.addTodo(desc, isMarked);","lastModifiedDate":"2023-08-28"},{"lineNumber":82,"author":{"gitId":"Chandan8186"},"content":" break;","lastModifiedDate":"2023-08-28"},{"lineNumber":83,"author":{"gitId":"Chandan8186"},"content":" case \"D\":","lastModifiedDate":"2023-08-28"},{"lineNumber":84,"author":{"gitId":"Chandan8186"},"content":" end \u003d segmented[3];","lastModifiedDate":"2023-08-28"},{"lineNumber":85,"author":{"gitId":"Chandan8186"},"content":" taskList.addDeadline(desc, end, isMarked);","lastModifiedDate":"2023-08-28"},{"lineNumber":86,"author":{"gitId":"Chandan8186"},"content":" break;","lastModifiedDate":"2023-08-28"},{"lineNumber":87,"author":{"gitId":"Chandan8186"},"content":" case \"E\":","lastModifiedDate":"2023-08-28"},{"lineNumber":88,"author":{"gitId":"Chandan8186"},"content":" end \u003d segmented[3];","lastModifiedDate":"2023-08-28"},{"lineNumber":89,"author":{"gitId":"Chandan8186"},"content":" start \u003d segmented[4];","lastModifiedDate":"2023-08-28"},{"lineNumber":90,"author":{"gitId":"Chandan8186"},"content":" taskList.addEvent(desc, start, end, isMarked);","lastModifiedDate":"2023-08-28"},{"lineNumber":91,"author":{"gitId":"Chandan8186"},"content":" break;","lastModifiedDate":"2023-08-28"},{"lineNumber":92,"author":{"gitId":"Chandan8186"},"content":" default:","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"Chandan8186"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":95,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":96,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":97,"author":{"gitId":"Chandan8186"},"content":" return taskList;","lastModifiedDate":"2023-08-28"},{"lineNumber":98,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":99,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":100,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":101,"author":{"gitId":"Chandan8186"},"content":" * Creates a new data file or opens the existing one to update it with the latest tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":102,"author":{"gitId":"Chandan8186"},"content":" * The format of the task string is \"~tasktype~|~isMarked~|~desc~|~end~|~start~\".","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"Chandan8186"},"content":" * Task type is T/D/E and isMarked is 0 for false and 1 for true.","lastModifiedDate":"2023-08-29"},{"lineNumber":104,"author":{"gitId":"Chandan8186"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":105,"author":{"gitId":"Chandan8186"},"content":" * @param taskList The TaskList containing the latest tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":106,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":107,"author":{"gitId":"Chandan8186"},"content":" public void saveChanges(TaskList taskList) {","lastModifiedDate":"2023-08-29"},{"lineNumber":108,"author":{"gitId":"Chandan8186"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":109,"author":{"gitId":"Chandan8186"},"content":" File directory \u003d new File(\"data\");","lastModifiedDate":"2023-08-28"},{"lineNumber":110,"author":{"gitId":"Chandan8186"},"content":" if (!directory.exists()) {","lastModifiedDate":"2023-08-28"},{"lineNumber":111,"author":{"gitId":"Chandan8186"},"content":" directory.mkdirs();","lastModifiedDate":"2023-08-28"},{"lineNumber":112,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":113,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":114,"author":{"gitId":"Chandan8186"},"content":" FileWriter fileWriter \u003d new FileWriter(\"data/\" + FILENAME);","lastModifiedDate":"2023-08-29"},{"lineNumber":115,"author":{"gitId":"Chandan8186"},"content":" fileWriter.write(\"\");","lastModifiedDate":"2023-08-28"},{"lineNumber":116,"author":{"gitId":"Chandan8186"},"content":" fileWriter.append(taskList.getTextFormattedString());","lastModifiedDate":"2023-08-28"},{"lineNumber":117,"author":{"gitId":"Chandan8186"},"content":" fileWriter.close();","lastModifiedDate":"2023-08-28"},{"lineNumber":118,"author":{"gitId":"Chandan8186"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":119,"author":{"gitId":"Chandan8186"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-04"},{"lineNumber":120,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":121,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":122,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":123,"author":{"gitId":"Chandan8186"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"Chandan8186":123}},{"path":"src/main/java/duke/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Chandan8186"},"content":"package duke;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Chandan8186"},"content":"import tasks.Task;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"Chandan8186"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"Chandan8186"},"content":" * Provides formatted string outputs to be shown to user.","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"Chandan8186"},"content":"public class Ui {","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"Chandan8186"},"content":" private static final String INTRO_MESSAGE \u003d \"Hello! I\u0027m ChatALot.\\n\"","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"Chandan8186"},"content":" + \"What can I do for you?\\n\";","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"Chandan8186"},"content":" private static final String OUTRO_MESSAGE \u003d","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"Chandan8186"},"content":" \"Bye. Hope to see you again soon!\\n\"","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"Chandan8186"},"content":" + \"You may close the window to end the chat.\\n\";","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"Chandan8186"},"content":" public static String getIntroMessage() {","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"Chandan8186"},"content":" return INTRO_MESSAGE;","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"Chandan8186"},"content":" public static String getOutroMessage() {","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"Chandan8186"},"content":" return OUTRO_MESSAGE;","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"Chandan8186"},"content":" * Gives the formatted output for when a task is added.","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"Chandan8186"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"Chandan8186"},"content":" * @param task The task that was added.","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"Chandan8186"},"content":" * @param taskListSize The task list size after the task was added.","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"Chandan8186"},"content":" * @return The formatted output for when a task is added","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"Chandan8186"},"content":" public static String getTaskAddingMessage(Task task, int taskListSize) {","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"Chandan8186"},"content":" return String.format(\"Got it. I\u0027ve added this task:\\n %s\\nNow you have\"","lastModifiedDate":"2023-09-10"},{"lineNumber":33,"author":{"gitId":"Chandan8186"},"content":" + \" %d tasks in the list.\", task, taskListSize);","lastModifiedDate":"2023-09-10"},{"lineNumber":34,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"Chandan8186"},"content":" * Gives the formatted output for when a task is deleted.","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"Chandan8186"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"Chandan8186"},"content":" * @param task The task that was deleted.","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"Chandan8186"},"content":" * @param taskListSize The task list size after the task was deleted.","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"Chandan8186"},"content":" * @return The formatted output for when a task is deleted.","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"Chandan8186"},"content":" public static String getTaskDeletingMessage(Task task, int taskListSize) {","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"Chandan8186"},"content":" return String.format(\"Noted. I\u0027ve removed this task:\\n %s\\nNow you have\"","lastModifiedDate":"2023-09-10"},{"lineNumber":45,"author":{"gitId":"Chandan8186"},"content":" + \" %d tasks in the list.\", task, taskListSize);","lastModifiedDate":"2023-09-10"},{"lineNumber":46,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"Chandan8186"},"content":" * Gives the formatted output for when a task is marked complete.","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"Chandan8186"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"Chandan8186"},"content":" * @param task Task that was marked complete.","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"Chandan8186"},"content":" * @return The formatted output for when a task is marked complete.","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"Chandan8186"},"content":" public static String getTaskMarkingMessage(Task task) {","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"Chandan8186"},"content":" return \"Nice! I\u0027ve marked this task as done:\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"Chandan8186"},"content":" + \" \"","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"Chandan8186"},"content":" + task;","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":59,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":60,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"Chandan8186"},"content":" * Gives the formatted output for when a task is marked incomplete.","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"Chandan8186"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"Chandan8186"},"content":" * @param task Task that was marked incomplete.","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"Chandan8186"},"content":" * @return The formatted output for when a task is marked incomplete.","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"Chandan8186"},"content":" public static String getTaskUnmarkingMessage(Task task) {","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"Chandan8186"},"content":" return \"OK, I\u0027ve marked this task as not done yet:\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"Chandan8186"},"content":" + \" \"","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"Chandan8186"},"content":" + task;","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":71,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":72,"author":{"gitId":"Chandan8186"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"Chandan8186":72}},{"path":"src/main/java/exceptions/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Chandan8186"},"content":"package exceptions;","lastModifiedDate":"2023-08-22"},{"lineNumber":2,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":3,"author":{"gitId":"Chandan8186"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Chandan8186"},"content":" * A runtime exception thrown by Duke chatbot.","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"Chandan8186"},"content":" * All other duke-specific exceptions will extend DukeException.","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"Chandan8186"},"content":"public class DukeException extends RuntimeException {","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Chandan8186"},"content":" * Constructor, initialises the error message.","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Chandan8186"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"Chandan8186"},"content":" * @param errorMessage Error message to be shown.","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"Chandan8186"},"content":" public DukeException(String errorMessage) {","lastModifiedDate":"2023-08-22"},{"lineNumber":15,"author":{"gitId":"Chandan8186"},"content":" super(errorMessage);","lastModifiedDate":"2023-08-22"},{"lineNumber":16,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":17,"author":{"gitId":"Chandan8186"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"Chandan8186":17}},{"path":"src/main/java/exceptions/InvalidDeadlineException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Chandan8186"},"content":"package exceptions;","lastModifiedDate":"2023-08-22"},{"lineNumber":2,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":3,"author":{"gitId":"Chandan8186"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Chandan8186"},"content":" * A DukeException for invalid deadline task command.","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"Chandan8186"},"content":"public class InvalidDeadlineException extends DukeException {","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Chandan8186"},"content":" * Constructor, initializes the error message.","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Chandan8186"},"content":" public InvalidDeadlineException() {","lastModifiedDate":"2023-08-22"},{"lineNumber":12,"author":{"gitId":"Chandan8186"},"content":" super(\"Missing description/end for deadline task.\\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Chandan8186"},"content":" + \"Format should be: deadline \u003ctask description\u003e /by \u003cyyyy-MM-dd HHmm\u003e\");","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":15,"author":{"gitId":"Chandan8186"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"Chandan8186":15}},{"path":"src/main/java/exceptions/InvalidEventException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Chandan8186"},"content":"package exceptions;","lastModifiedDate":"2023-08-22"},{"lineNumber":2,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":3,"author":{"gitId":"Chandan8186"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Chandan8186"},"content":" * A DukeException for invalid event task command.","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"Chandan8186"},"content":"public class InvalidEventException extends DukeException {","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Chandan8186"},"content":" * Constructor, initializes the error message.","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Chandan8186"},"content":" public InvalidEventException() {","lastModifiedDate":"2023-08-22"},{"lineNumber":12,"author":{"gitId":"Chandan8186"},"content":" super(\"Missing description/start/end for event task.\\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Chandan8186"},"content":" + \"Format should be: event \u003ctask description\u003e \"","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Chandan8186"},"content":" + \"/from \u003cyyyy-MM-dd HHmm\u003e /to \u003cyyyy-MM-dd HHmm\u003e\");","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":16,"author":{"gitId":"Chandan8186"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"Chandan8186":16}},{"path":"src/main/java/exceptions/InvalidIndexException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Chandan8186"},"content":"package exceptions;","lastModifiedDate":"2023-08-22"},{"lineNumber":2,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":3,"author":{"gitId":"Chandan8186"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Chandan8186"},"content":" * A DukeException for invalid index when marking, unmarking or deleting task.","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"Chandan8186"},"content":"public class InvalidIndexException extends DukeException {","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Chandan8186"},"content":" * Constructor, initializes the error message.","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Chandan8186"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Chandan8186"},"content":" * @param listSize The size of the current task list.","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"Chandan8186"},"content":" public InvalidIndexException(int listSize) {","lastModifiedDate":"2023-08-22"},{"lineNumber":14,"author":{"gitId":"Chandan8186"},"content":" super(String.format(\"Invalid index format.\\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Chandan8186"},"content":" + \"Format should be: mark \u003ctask index\u003e OR unmark \u003ctask index\u003e \"","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Chandan8186"},"content":" + \"OR delete \u003ctask index\u003e\\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Chandan8186"},"content":" + \"where index is from 1 to %d.\", listSize));","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":19,"author":{"gitId":"Chandan8186"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"Chandan8186":19}},{"path":"src/main/java/exceptions/InvalidTodoException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Chandan8186"},"content":"package exceptions;","lastModifiedDate":"2023-08-22"},{"lineNumber":2,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":3,"author":{"gitId":"Chandan8186"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Chandan8186"},"content":" * A DukeException for invalid event task command.","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"Chandan8186"},"content":"public class InvalidTodoException extends DukeException {","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Chandan8186"},"content":" * Constructor, initializes the error message.","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Chandan8186"},"content":" public InvalidTodoException() {","lastModifiedDate":"2023-08-22"},{"lineNumber":12,"author":{"gitId":"Chandan8186"},"content":" super(\"Missing description for todo task.\\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Chandan8186"},"content":" + \"Format should be: todo \u003ctask description\u003e\");","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":15,"author":{"gitId":"Chandan8186"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"Chandan8186":15}},{"path":"src/main/java/exceptions/UnknownCommandException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Chandan8186"},"content":"package exceptions;","lastModifiedDate":"2023-08-22"},{"lineNumber":2,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":3,"author":{"gitId":"Chandan8186"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Chandan8186"},"content":" * A DukeException for an unknown command by the user.","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"Chandan8186"},"content":"public class UnknownCommandException extends DukeException {","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Chandan8186"},"content":" * Constructor, initializes the error message.","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Chandan8186"},"content":" public UnknownCommandException() {","lastModifiedDate":"2023-08-22"},{"lineNumber":12,"author":{"gitId":"Chandan8186"},"content":" super(\"OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-08-22"},{"lineNumber":13,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":14,"author":{"gitId":"Chandan8186"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"Chandan8186":14}},{"path":"src/main/java/tasks/DeadlineTask.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Chandan8186"},"content":"package tasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":3,"author":{"gitId":"Chandan8186"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"Chandan8186"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"Chandan8186"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":7,"author":{"gitId":"Chandan8186"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"Chandan8186"},"content":" * A deadline task.","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Chandan8186"},"content":"public class DeadlineTask extends Task {","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":12,"author":{"gitId":"Chandan8186"},"content":" private static final DateTimeFormatter INPUT_FORMAT \u003d","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"Chandan8186"},"content":" DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\");","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"Chandan8186"},"content":" private static final DateTimeFormatter DISPLAY_FORMAT \u003d","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"Chandan8186"},"content":" DateTimeFormatter.ofPattern(\"dd-MMM-yyyy HHmm\");","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"Chandan8186"},"content":" private final LocalDateTime deadline;","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":18,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"Chandan8186"},"content":" * Constructor, initializes task description, deadline and isMarked.","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"Chandan8186"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"Chandan8186"},"content":" * @param desc Task description.","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"Chandan8186"},"content":" * @param deadline Deadline date/time of task.","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"Chandan8186"},"content":" * @param isMarked 1 if is marked, 0 otherwise.","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"Chandan8186"},"content":" public DeadlineTask(String desc, LocalDateTime deadline, int isMarked) {","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"Chandan8186"},"content":" super(desc);","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"Chandan8186"},"content":" assert deadline !\u003d null : \"Deadline should not be null.\";","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"Chandan8186"},"content":" this.deadline \u003d deadline;","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"Chandan8186"},"content":" if (isMarked \u003d\u003d 1) {","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"Chandan8186"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"Chandan8186"},"content":" @Override","lastModifiedDate":"2023-09-10"},{"lineNumber":35,"author":{"gitId":"Chandan8186"},"content":" public boolean checkIfTaskDueToday() {","lastModifiedDate":"2023-09-10"},{"lineNumber":36,"author":{"gitId":"Chandan8186"},"content":" LocalDate currentDate \u003d LocalDate.now();","lastModifiedDate":"2023-09-10"},{"lineNumber":37,"author":{"gitId":"Chandan8186"},"content":" LocalDate taskDate \u003d this.deadline.toLocalDate();","lastModifiedDate":"2023-09-10"},{"lineNumber":38,"author":{"gitId":"Chandan8186"},"content":" return currentDate.equals(taskDate);","lastModifiedDate":"2023-09-10"},{"lineNumber":39,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":40,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":41,"author":{"gitId":"Chandan8186"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"Chandan8186"},"content":" protected String getTextFormattedString() {","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"Chandan8186"},"content":" return String.format(\"D|%d|%s|%s\", this.isDone ? 1 : 0,","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"Chandan8186"},"content":" this.desc, this.deadline.format(INPUT_FORMAT));","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"Chandan8186"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":48,"author":{"gitId":"Chandan8186"},"content":" public String toString() {","lastModifiedDate":"2023-08-20"},{"lineNumber":49,"author":{"gitId":"Chandan8186"},"content":" return String.format(\"[D]%s (by: %s)\",","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"Chandan8186"},"content":" super.toString(),","lastModifiedDate":"2023-08-20"},{"lineNumber":51,"author":{"gitId":"Chandan8186"},"content":" this.deadline.format(DISPLAY_FORMAT));","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":53,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":54,"author":{"gitId":"Chandan8186"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"Chandan8186":54}},{"path":"src/main/java/tasks/EventTask.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Chandan8186"},"content":"package tasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":3,"author":{"gitId":"Chandan8186"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"Chandan8186"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"Chandan8186"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"Chandan8186"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"Chandan8186"},"content":" * An event task.","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Chandan8186"},"content":"public class EventTask extends Task {","lastModifiedDate":"2023-08-20"},{"lineNumber":11,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":12,"author":{"gitId":"Chandan8186"},"content":" private static final DateTimeFormatter INPUT_FORMAT \u003d","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"Chandan8186"},"content":" DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\");","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"Chandan8186"},"content":" private static final DateTimeFormatter DISPLAY_FORMAT \u003d","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"Chandan8186"},"content":" DateTimeFormatter.ofPattern(\"dd-MMM-yyyy HHmm\");","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":17,"author":{"gitId":"Chandan8186"},"content":" private final LocalDateTime start;","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"Chandan8186"},"content":" private final LocalDateTime end;","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":20,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"Chandan8186"},"content":" * Constructor, initializes task description, start, end and isMarked.","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"Chandan8186"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"Chandan8186"},"content":" * @param desc Task description.","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"Chandan8186"},"content":" * @param start Start date/time of task.","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"Chandan8186"},"content":" * @param end End date/time of task.","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"Chandan8186"},"content":" * @param isMarked 1 if is marked, 0 otherwise.","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"Chandan8186"},"content":" public EventTask(String desc, LocalDateTime start, LocalDateTime end, int isMarked) {","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"Chandan8186"},"content":" super(desc);","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"Chandan8186"},"content":" assert start !\u003d null : \"Start should not be null.\";","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"Chandan8186"},"content":" assert end !\u003d null : \"End should not be null.\";","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"Chandan8186"},"content":" this.start \u003d start;","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"Chandan8186"},"content":" this.end \u003d end;","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"Chandan8186"},"content":" if (isMarked \u003d\u003d 1) {","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"Chandan8186"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"Chandan8186"},"content":" @Override","lastModifiedDate":"2023-09-10"},{"lineNumber":40,"author":{"gitId":"Chandan8186"},"content":" public boolean checkIfTaskDueToday() {","lastModifiedDate":"2023-09-10"},{"lineNumber":41,"author":{"gitId":"Chandan8186"},"content":" LocalDate currentDate \u003d LocalDate.now();","lastModifiedDate":"2023-09-10"},{"lineNumber":42,"author":{"gitId":"Chandan8186"},"content":" LocalDate taskDate \u003d this.end.toLocalDate();","lastModifiedDate":"2023-09-10"},{"lineNumber":43,"author":{"gitId":"Chandan8186"},"content":" return currentDate.equals(taskDate);","lastModifiedDate":"2023-09-10"},{"lineNumber":44,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":45,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":46,"author":{"gitId":"Chandan8186"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"Chandan8186"},"content":" protected String getTextFormattedString() {","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"Chandan8186"},"content":" return String.format(\"E|%d|%s|%s|%s\", this.isDone ? 1 : 0, this.desc,","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"Chandan8186"},"content":" this.end.format(INPUT_FORMAT),","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"Chandan8186"},"content":" this.start.format(INPUT_FORMAT));","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"Chandan8186"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":54,"author":{"gitId":"Chandan8186"},"content":" public String toString() {","lastModifiedDate":"2023-08-20"},{"lineNumber":55,"author":{"gitId":"Chandan8186"},"content":" return String.format(\"[E]%s (from: %s to: %s)\",","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"Chandan8186"},"content":" super.toString(),","lastModifiedDate":"2023-08-20"},{"lineNumber":57,"author":{"gitId":"Chandan8186"},"content":" this.start.format(DISPLAY_FORMAT),","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"Chandan8186"},"content":" this.end.format(DISPLAY_FORMAT));","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":60,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":61,"author":{"gitId":"Chandan8186"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"Chandan8186":61}},{"path":"src/main/java/tasks/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Chandan8186"},"content":"package tasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":3,"author":{"gitId":"Chandan8186"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Chandan8186"},"content":" * Abstract class representing a task.","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"Chandan8186"},"content":" * All specific tasks will be its child classes.","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"Chandan8186"},"content":"public abstract class Task {","lastModifiedDate":"2023-08-20"},{"lineNumber":8,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Chandan8186"},"content":" /** The task description */","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Chandan8186"},"content":" protected String desc;","lastModifiedDate":"2023-08-20"},{"lineNumber":11,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"Chandan8186"},"content":" /** Boolean indicating completion status */","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"Chandan8186"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-20"},{"lineNumber":14,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":15,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"Chandan8186"},"content":" * Constructor, initializes task description.","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"Chandan8186"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"Chandan8186"},"content":" * @param desc Task Description.","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"Chandan8186"},"content":" public Task(String desc) {","lastModifiedDate":"2023-08-20"},{"lineNumber":21,"author":{"gitId":"Chandan8186"},"content":" this.desc \u003d desc;","lastModifiedDate":"2023-08-20"},{"lineNumber":22,"author":{"gitId":"Chandan8186"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-20"},{"lineNumber":23,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":24,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":25,"author":{"gitId":"Chandan8186"},"content":" /** Method signature for abstract method getTextFormattedString */","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"Chandan8186"},"content":" protected abstract String getTextFormattedString();","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"Chandan8186"},"content":" /** Method signature for abstract method checkIfTaskDueToday */","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"Chandan8186"},"content":" public abstract boolean checkIfTaskDueToday();","lastModifiedDate":"2023-09-10"},{"lineNumber":30,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"Chandan8186"},"content":" * Returns string representation of completion status.","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"Chandan8186"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"Chandan8186"},"content":" * @return String representation of completion status.","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"Chandan8186"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-20"},{"lineNumber":37,"author":{"gitId":"Chandan8186"},"content":" return (isDone ? \"X\" : \" \");","lastModifiedDate":"2023-08-20"},{"lineNumber":38,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":39,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":40,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"Chandan8186"},"content":" * Marks task as done.","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"Chandan8186"},"content":" protected void markAsDone() {","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"Chandan8186"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-20"},{"lineNumber":45,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":46,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":47,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"Chandan8186"},"content":" * Marks task as not done.","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"Chandan8186"},"content":" protected void unmark() {","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"Chandan8186"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-20"},{"lineNumber":52,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":53,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":54,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"Chandan8186"},"content":" * Returns string representation of task.","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"Chandan8186"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"Chandan8186"},"content":" * @return String representation of task.","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"Chandan8186"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":60,"author":{"gitId":"Chandan8186"},"content":" public String toString() {","lastModifiedDate":"2023-08-20"},{"lineNumber":61,"author":{"gitId":"Chandan8186"},"content":" return String.format(\"[%s] %s\", getStatusIcon(), this.desc);","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":63,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":64,"author":{"gitId":"Chandan8186"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"Chandan8186":64}},{"path":"src/main/java/tasks/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Chandan8186"},"content":"package tasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":3,"author":{"gitId":"Chandan8186"},"content":"import java.lang.StringBuilder;","lastModifiedDate":"2023-08-20"},{"lineNumber":4,"author":{"gitId":"Chandan8186"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"Chandan8186"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"Chandan8186"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"Chandan8186"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"Chandan8186"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":10,"author":{"gitId":"Chandan8186"},"content":"import exceptions.DukeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Chandan8186"},"content":"import exceptions.InvalidIndexException;","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"Chandan8186"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"Chandan8186"},"content":" * Represents a list of all user tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"Chandan8186"},"content":"public class TaskList {","lastModifiedDate":"2023-08-20"},{"lineNumber":17,"author":{"gitId":"Chandan8186"},"content":" protected static final DateTimeFormatter DATETIME_FORMAT \u003d","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"Chandan8186"},"content":" DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\");","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"Chandan8186"},"content":" protected ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":21,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"Chandan8186"},"content":" * Constructor, initializes array list.","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"Chandan8186"},"content":" public TaskList() {","lastModifiedDate":"2023-08-20"},{"lineNumber":25,"author":{"gitId":"Chandan8186"},"content":" this.tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":27,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":28,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"Chandan8186"},"content":" * Creates a todo task.","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"Chandan8186"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"Chandan8186"},"content":" * @param desc Description of task.","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"Chandan8186"},"content":" * @param isMarked If task is marked, 1, else, 0.","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"Chandan8186"},"content":" * @return A todo task.","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"Chandan8186"},"content":" public Task addTodo(String desc, int isMarked) {","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"Chandan8186"},"content":" assert isMarked \u003d\u003d 0 || isMarked \u003d\u003d 1 : \"isMarked must be 0 or 1.\";","lastModifiedDate":"2023-09-10"},{"lineNumber":37,"author":{"gitId":"Chandan8186"},"content":" Task task \u003d new TodoTask(desc, isMarked);","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"Chandan8186"},"content":" this.tasks.add(task);","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"Chandan8186"},"content":" return task;","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"Chandan8186"},"content":" * Creates a deadline task.","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"Chandan8186"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"Chandan8186"},"content":" * @param desc Description of task.","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"Chandan8186"},"content":" * @param deadline Deadline date/time of task.","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"Chandan8186"},"content":" * @param isMarked If task is marked, 1, else, 0.","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"Chandan8186"},"content":" * @return A deadline task.","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"Chandan8186"},"content":" * @throws DateTimeParseException If deadline doesn\u0027t have format \"yyyy-MM-dd HHmm\".","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"Chandan8186"},"content":" public Task addDeadline(String desc, String deadline, int isMarked)","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"Chandan8186"},"content":" throws DateTimeParseException {","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"Chandan8186"},"content":" assert isMarked \u003d\u003d 0 || isMarked \u003d\u003d 1 : \"isMarked must be 0 or 1.\";","lastModifiedDate":"2023-09-10"},{"lineNumber":54,"author":{"gitId":"Chandan8186"},"content":" LocalDateTime dateTime \u003d LocalDateTime.parse(deadline, DATETIME_FORMAT);","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"Chandan8186"},"content":" Task task \u003d new DeadlineTask(desc, dateTime, isMarked);","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"Chandan8186"},"content":" this.tasks.add(task);","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"Chandan8186"},"content":" return task;","lastModifiedDate":"2023-08-20"},{"lineNumber":58,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":59,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":60,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"Chandan8186"},"content":" * Creates an event task.","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"Chandan8186"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"Chandan8186"},"content":" * @param desc Description of task.","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"Chandan8186"},"content":" * @param start Start date/time of task.","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"Chandan8186"},"content":" * @param end End date/time of task.","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"Chandan8186"},"content":" * @param isMarked If task is marked, 1, else, 0.","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"Chandan8186"},"content":" * @return An event task.","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"Chandan8186"},"content":" * @throws DateTimeParseException If start/end doesn\u0027t have format \"yyyy-MM-dd HHmm\".","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"Chandan8186"},"content":" public Task addEvent(String desc, String start, String end, int isMarked)","lastModifiedDate":"2023-08-28"},{"lineNumber":71,"author":{"gitId":"Chandan8186"},"content":" throws DateTimeParseException {","lastModifiedDate":"2023-08-28"},{"lineNumber":72,"author":{"gitId":"Chandan8186"},"content":" assert isMarked \u003d\u003d 0 || isMarked \u003d\u003d 1 : \"isMarked must be 0 or 1.\";","lastModifiedDate":"2023-09-10"},{"lineNumber":73,"author":{"gitId":"Chandan8186"},"content":" LocalDateTime dateTimeStart \u003d LocalDateTime.parse(start, DATETIME_FORMAT);","lastModifiedDate":"2023-08-28"},{"lineNumber":74,"author":{"gitId":"Chandan8186"},"content":" LocalDateTime dateTimeEnd \u003d LocalDateTime.parse(end, DATETIME_FORMAT);","lastModifiedDate":"2023-08-28"},{"lineNumber":75,"author":{"gitId":"Chandan8186"},"content":" Task task \u003d new EventTask(desc, dateTimeStart, dateTimeEnd, isMarked);","lastModifiedDate":"2023-08-28"},{"lineNumber":76,"author":{"gitId":"Chandan8186"},"content":" this.tasks.add(task);","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"Chandan8186"},"content":" return task;","lastModifiedDate":"2023-08-27"},{"lineNumber":78,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":79,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":80,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":81,"author":{"gitId":"Chandan8186"},"content":" * Marks task as done.","lastModifiedDate":"2023-08-29"},{"lineNumber":82,"author":{"gitId":"Chandan8186"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":83,"author":{"gitId":"Chandan8186"},"content":" * @param i Index of task to be marked done.","lastModifiedDate":"2023-08-29"},{"lineNumber":84,"author":{"gitId":"Chandan8186"},"content":" * @return Task which was marked done.","lastModifiedDate":"2023-08-29"},{"lineNumber":85,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":86,"author":{"gitId":"Chandan8186"},"content":" public Task markTaskAsDone(int i) {","lastModifiedDate":"2023-08-20"},{"lineNumber":87,"author":{"gitId":"Chandan8186"},"content":" if (this.tasks.size() \u003c 1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"Chandan8186"},"content":" throw new DukeException(\"The task list is empty.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":89,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":90,"author":{"gitId":"Chandan8186"},"content":" if (i \u003c 1 || i \u003e this.tasks.size()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"Chandan8186"},"content":" throw new InvalidIndexException(this.tasks.size());","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":93,"author":{"gitId":"Chandan8186"},"content":" Task task \u003d this.tasks.get(i - 1);","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"Chandan8186"},"content":" task.markAsDone();","lastModifiedDate":"2023-08-20"},{"lineNumber":95,"author":{"gitId":"Chandan8186"},"content":" return task;","lastModifiedDate":"2023-08-20"},{"lineNumber":96,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":97,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":98,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":99,"author":{"gitId":"Chandan8186"},"content":" * Marks task as not done.","lastModifiedDate":"2023-08-29"},{"lineNumber":100,"author":{"gitId":"Chandan8186"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":101,"author":{"gitId":"Chandan8186"},"content":" * @param i Index of task to be marked not done.","lastModifiedDate":"2023-08-29"},{"lineNumber":102,"author":{"gitId":"Chandan8186"},"content":" * @return Task which was marked not done.","lastModifiedDate":"2023-08-29"},{"lineNumber":103,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":104,"author":{"gitId":"Chandan8186"},"content":" public Task unmarkTask(int i) {","lastModifiedDate":"2023-08-20"},{"lineNumber":105,"author":{"gitId":"Chandan8186"},"content":" if (this.tasks.size() \u003c 1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":106,"author":{"gitId":"Chandan8186"},"content":" throw new DukeException(\"The task list is empty.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":107,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":108,"author":{"gitId":"Chandan8186"},"content":" if (i \u003c 1 || i \u003e this.tasks.size()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":109,"author":{"gitId":"Chandan8186"},"content":" throw new InvalidIndexException(this.tasks.size());","lastModifiedDate":"2023-08-30"},{"lineNumber":110,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":111,"author":{"gitId":"Chandan8186"},"content":" Task task \u003d this.tasks.get(i - 1);","lastModifiedDate":"2023-08-30"},{"lineNumber":112,"author":{"gitId":"Chandan8186"},"content":" task.unmark();","lastModifiedDate":"2023-08-20"},{"lineNumber":113,"author":{"gitId":"Chandan8186"},"content":" return task;","lastModifiedDate":"2023-08-20"},{"lineNumber":114,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":115,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":116,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":117,"author":{"gitId":"Chandan8186"},"content":" * Deletes a task.","lastModifiedDate":"2023-08-29"},{"lineNumber":118,"author":{"gitId":"Chandan8186"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":119,"author":{"gitId":"Chandan8186"},"content":" * @param i Index of task to be deleted.","lastModifiedDate":"2023-08-29"},{"lineNumber":120,"author":{"gitId":"Chandan8186"},"content":" * @return The deleted task.","lastModifiedDate":"2023-08-29"},{"lineNumber":121,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":122,"author":{"gitId":"Chandan8186"},"content":" public Task deleteTask(int i) {","lastModifiedDate":"2023-08-22"},{"lineNumber":123,"author":{"gitId":"Chandan8186"},"content":" if (this.tasks.size() \u003c 1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":124,"author":{"gitId":"Chandan8186"},"content":" throw new DukeException(\"The task list is empty.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":125,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":126,"author":{"gitId":"Chandan8186"},"content":" if (i \u003c 1 || i \u003e this.tasks.size()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":127,"author":{"gitId":"Chandan8186"},"content":" throw new InvalidIndexException(this.tasks.size());","lastModifiedDate":"2023-08-30"},{"lineNumber":128,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":129,"author":{"gitId":"Chandan8186"},"content":" return this.tasks.remove(i - 1);","lastModifiedDate":"2023-09-02"},{"lineNumber":130,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":131,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":132,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":133,"author":{"gitId":"Chandan8186"},"content":" * Returns size of task list.","lastModifiedDate":"2023-08-29"},{"lineNumber":134,"author":{"gitId":"Chandan8186"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":135,"author":{"gitId":"Chandan8186"},"content":" * @return Size of task list.","lastModifiedDate":"2023-08-29"},{"lineNumber":136,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":137,"author":{"gitId":"Chandan8186"},"content":" public int getSize() {","lastModifiedDate":"2023-08-20"},{"lineNumber":138,"author":{"gitId":"Chandan8186"},"content":" return this.tasks.size();","lastModifiedDate":"2023-08-30"},{"lineNumber":139,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":140,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":141,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":142,"author":{"gitId":"Chandan8186"},"content":" * Returns the task list in the relevant format for storing in data file.","lastModifiedDate":"2023-08-29"},{"lineNumber":143,"author":{"gitId":"Chandan8186"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":144,"author":{"gitId":"Chandan8186"},"content":" * @return The task list string with the relevant format.","lastModifiedDate":"2023-08-29"},{"lineNumber":145,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":146,"author":{"gitId":"Chandan8186"},"content":" public String getTextFormattedString() {","lastModifiedDate":"2023-08-27"},{"lineNumber":147,"author":{"gitId":"Chandan8186"},"content":" StringBuilder str \u003d new StringBuilder();","lastModifiedDate":"2023-08-27"},{"lineNumber":148,"author":{"gitId":"Chandan8186"},"content":" for (Task task : this.tasks) {","lastModifiedDate":"2023-08-30"},{"lineNumber":149,"author":{"gitId":"Chandan8186"},"content":" str.append(task.getTextFormattedString() + \"\\n\");","lastModifiedDate":"2023-08-27"},{"lineNumber":150,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":151,"author":{"gitId":"Chandan8186"},"content":" return str.toString();","lastModifiedDate":"2023-08-27"},{"lineNumber":152,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":153,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":154,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":155,"author":{"gitId":"Chandan8186"},"content":" * Returns string representation of filtered task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":156,"author":{"gitId":"Chandan8186"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":157,"author":{"gitId":"Chandan8186"},"content":" * @return String representation of filtered task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":158,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":159,"author":{"gitId":"Chandan8186"},"content":" public String getMatchingTasks(String keyword) {","lastModifiedDate":"2023-08-30"},{"lineNumber":160,"author":{"gitId":"Chandan8186"},"content":" ArrayList\u003cTask\u003e filteredTasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":161,"author":{"gitId":"Chandan8186"},"content":" for (Task task : this.tasks) {","lastModifiedDate":"2023-08-30"},{"lineNumber":162,"author":{"gitId":"Chandan8186"},"content":" if (task.desc.contains(keyword)) {","lastModifiedDate":"2023-08-30"},{"lineNumber":163,"author":{"gitId":"Chandan8186"},"content":" filteredTasks.add(task);","lastModifiedDate":"2023-08-30"},{"lineNumber":164,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":165,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":166,"author":{"gitId":"Chandan8186"},"content":" if (filteredTasks.size() \u003d\u003d 0) {","lastModifiedDate":"2023-08-30"},{"lineNumber":167,"author":{"gitId":"Chandan8186"},"content":" return \"No task matches the given keyword.\";","lastModifiedDate":"2023-08-30"},{"lineNumber":168,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":169,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":170,"author":{"gitId":"Chandan8186"},"content":" StringBuilder str \u003d new StringBuilder(\"Here are the matching tasks in your list:\\n\");","lastModifiedDate":"2023-08-30"},{"lineNumber":171,"author":{"gitId":"Chandan8186"},"content":" for (int i \u003d 1; i \u003c\u003d filteredTasks.size(); i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":172,"author":{"gitId":"Chandan8186"},"content":" str.append(i + \". \" + filteredTasks.get(i - 1).toString() + \"\\n\");","lastModifiedDate":"2023-08-30"},{"lineNumber":173,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":174,"author":{"gitId":"Chandan8186"},"content":" return str.toString();","lastModifiedDate":"2023-08-30"},{"lineNumber":175,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":176,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":177,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":178,"author":{"gitId":"Chandan8186"},"content":" * Gives details of tasks.","lastModifiedDate":"2023-09-10"},{"lineNumber":179,"author":{"gitId":"Chandan8186"},"content":" * Specifically, number of completed and incomplete tasks,","lastModifiedDate":"2023-09-10"},{"lineNumber":180,"author":{"gitId":"Chandan8186"},"content":" * and deadline and event tasks due today.","lastModifiedDate":"2023-09-10"},{"lineNumber":181,"author":{"gitId":"Chandan8186"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":182,"author":{"gitId":"Chandan8186"},"content":" * @return Details of tasks.","lastModifiedDate":"2023-09-10"},{"lineNumber":183,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":184,"author":{"gitId":"Chandan8186"},"content":" public String getTaskStats() {","lastModifiedDate":"2023-09-10"},{"lineNumber":185,"author":{"gitId":"Chandan8186"},"content":" long numOfCompletedTasks \u003d this.tasks.stream()","lastModifiedDate":"2023-09-10"},{"lineNumber":186,"author":{"gitId":"Chandan8186"},"content":" .filter(task -\u003e task.isDone)","lastModifiedDate":"2023-09-10"},{"lineNumber":187,"author":{"gitId":"Chandan8186"},"content":" .count();","lastModifiedDate":"2023-09-10"},{"lineNumber":188,"author":{"gitId":"Chandan8186"},"content":" long numOfIncompleteTasks \u003d this.tasks.size() - numOfCompletedTasks;","lastModifiedDate":"2023-09-10"},{"lineNumber":189,"author":{"gitId":"Chandan8186"},"content":" StringBuilder deadlineTasksDueToday \u003d new StringBuilder();","lastModifiedDate":"2023-09-10"},{"lineNumber":190,"author":{"gitId":"Chandan8186"},"content":" StringBuilder eventTasksDueToday \u003d new StringBuilder();","lastModifiedDate":"2023-09-10"},{"lineNumber":191,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":192,"author":{"gitId":"Chandan8186"},"content":" for (Task task : this.tasks) {","lastModifiedDate":"2023-09-10"},{"lineNumber":193,"author":{"gitId":"Chandan8186"},"content":" if (!task.checkIfTaskDueToday() || task.isDone) {","lastModifiedDate":"2023-09-10"},{"lineNumber":194,"author":{"gitId":"Chandan8186"},"content":" continue;","lastModifiedDate":"2023-09-10"},{"lineNumber":195,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":196,"author":{"gitId":"Chandan8186"},"content":" if (task instanceof DeadlineTask) {","lastModifiedDate":"2023-09-10"},{"lineNumber":197,"author":{"gitId":"Chandan8186"},"content":" deadlineTasksDueToday.append(task + \"\\n\");","lastModifiedDate":"2023-09-10"},{"lineNumber":198,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":199,"author":{"gitId":"Chandan8186"},"content":" if (task instanceof EventTask) {","lastModifiedDate":"2023-09-10"},{"lineNumber":200,"author":{"gitId":"Chandan8186"},"content":" eventTasksDueToday.append(task + \"\\n\");","lastModifiedDate":"2023-09-10"},{"lineNumber":201,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":202,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":203,"author":{"gitId":"Chandan8186"},"content":" return String.format(\"Number of completed tasks: %d\\n\\n\"","lastModifiedDate":"2023-09-10"},{"lineNumber":204,"author":{"gitId":"Chandan8186"},"content":" + \"Number of incomplete tasks: %d\\n\\n\"","lastModifiedDate":"2023-09-10"},{"lineNumber":205,"author":{"gitId":"Chandan8186"},"content":" + \"Deadline tasks due today: \\n%s\\n\\n\"","lastModifiedDate":"2023-09-10"},{"lineNumber":206,"author":{"gitId":"Chandan8186"},"content":" + \"Event tasks due today: \\n%s\",","lastModifiedDate":"2023-09-10"},{"lineNumber":207,"author":{"gitId":"Chandan8186"},"content":" numOfCompletedTasks,","lastModifiedDate":"2023-09-10"},{"lineNumber":208,"author":{"gitId":"Chandan8186"},"content":" numOfIncompleteTasks,","lastModifiedDate":"2023-09-10"},{"lineNumber":209,"author":{"gitId":"Chandan8186"},"content":" deadlineTasksDueToday,","lastModifiedDate":"2023-09-10"},{"lineNumber":210,"author":{"gitId":"Chandan8186"},"content":" eventTasksDueToday);","lastModifiedDate":"2023-09-10"},{"lineNumber":211,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":212,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":213,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":214,"author":{"gitId":"Chandan8186"},"content":" * Returns string representation of task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":215,"author":{"gitId":"Chandan8186"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":216,"author":{"gitId":"Chandan8186"},"content":" * @return String representation of task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":217,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":218,"author":{"gitId":"Chandan8186"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":219,"author":{"gitId":"Chandan8186"},"content":" public String toString() {","lastModifiedDate":"2023-08-20"},{"lineNumber":220,"author":{"gitId":"Chandan8186"},"content":" StringBuilder str \u003d new StringBuilder();","lastModifiedDate":"2023-08-20"},{"lineNumber":221,"author":{"gitId":"Chandan8186"},"content":" int len \u003d this.tasks.size();","lastModifiedDate":"2023-08-30"},{"lineNumber":222,"author":{"gitId":"Chandan8186"},"content":" if (len \u003d\u003d 0) {","lastModifiedDate":"2023-08-20"},{"lineNumber":223,"author":{"gitId":"Chandan8186"},"content":" return \"The task list is empty.\";","lastModifiedDate":"2023-08-20"},{"lineNumber":224,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":225,"author":{"gitId":"Chandan8186"},"content":" str.append(\"Here are the tasks in your list:\\n\");","lastModifiedDate":"2023-08-20"},{"lineNumber":226,"author":{"gitId":"Chandan8186"},"content":" for (int i \u003d 1; i \u003c len; i++) {","lastModifiedDate":"2023-08-20"},{"lineNumber":227,"author":{"gitId":"Chandan8186"},"content":" str.append(i + \". \" + this.tasks.get(i - 1) + \"\\n\");","lastModifiedDate":"2023-08-30"},{"lineNumber":228,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":229,"author":{"gitId":"Chandan8186"},"content":" str.append(len + \". \" + this.tasks.get(len - 1));","lastModifiedDate":"2023-08-30"},{"lineNumber":230,"author":{"gitId":"Chandan8186"},"content":" return str.toString();","lastModifiedDate":"2023-08-20"},{"lineNumber":231,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":232,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":233,"author":{"gitId":"Chandan8186"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"Chandan8186":233}},{"path":"src/main/java/tasks/TodoTask.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Chandan8186"},"content":"package tasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":3,"author":{"gitId":"Chandan8186"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Chandan8186"},"content":" * A todo task.","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"Chandan8186"},"content":"public class TodoTask extends Task {","lastModifiedDate":"2023-08-20"},{"lineNumber":7,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":8,"author":{"gitId":"Chandan8186"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"Chandan8186"},"content":" * Constructor, initializes task description and isMarked.","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"Chandan8186"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"Chandan8186"},"content":" * @param desc Task description.","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"Chandan8186"},"content":" * @param isMarked 1 if is marked, 0 otherwise.","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"Chandan8186"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"Chandan8186"},"content":" public TodoTask(String desc, int isMarked) {","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"Chandan8186"},"content":" super(desc);","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"Chandan8186"},"content":" if (isMarked \u003d\u003d 1) {","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"Chandan8186"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"Chandan8186"},"content":" @Override","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"Chandan8186"},"content":" public boolean checkIfTaskDueToday() {","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"Chandan8186"},"content":" return false;","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"Chandan8186"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"Chandan8186"},"content":" protected String getTextFormattedString() {","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"Chandan8186"},"content":" return String.format(\"T|%d|%s\", this.isDone ? 1 : 0, this.desc);","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"Chandan8186"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":32,"author":{"gitId":"Chandan8186"},"content":" public String toString() {","lastModifiedDate":"2023-08-20"},{"lineNumber":33,"author":{"gitId":"Chandan8186"},"content":" return String.format(\"[T]%s\", super.toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":35,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":36,"author":{"gitId":"Chandan8186"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"Chandan8186":36}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"Chandan8186"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"Chandan8186"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"Chandan8186"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"Chandan8186"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"Chandan8186"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Chandan8186"},"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-04"},{"lineNumber":9,"author":{"gitId":"Chandan8186"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"Chandan8186"},"content":" \u003cLabel fx:id\u003d\"dialog\" text\u003d\"Label\" wrapText\u003d\"true\"","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"Chandan8186"},"content":" style\u003d\"-fx-background-color: #CCEBF5 ; -fx-background-radius: 12px; -fx-border-color: black; -fx-border-radius: 12px;\"\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"Chandan8186"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"Chandan8186"},"content":" \u003cInsets bottom\u003d\"10.0\" left\u003d\"10.0\" right\u003d\"10.0\" top\u003d\"10.0\"/\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"Chandan8186"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"Chandan8186"},"content":" \u003cHBox.margin\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"Chandan8186"},"content":" \u003cInsets bottom\u003d\"6.0\" left\u003d\"6.0\" right\u003d\"6.0\" top\u003d\"6.0\"/\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"Chandan8186"},"content":" \u003c/HBox.margin\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"Chandan8186"},"content":" \u003c/Label\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"Chandan8186"},"content":" \u003cImageView fx:id\u003d\"displayPicture\" fitHeight\u003d\"99.0\" fitWidth\u003d\"99.0\" pickOnBounds\u003d\"true\" preserveRatio\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"Chandan8186"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"Chandan8186"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"Chandan8186"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"Chandan8186"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"Chandan8186"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"Chandan8186":24}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"Chandan8186"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"Chandan8186"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"Chandan8186"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"Chandan8186"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"Chandan8186"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"Chandan8186"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"Chandan8186"},"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-04"},{"lineNumber":10,"author":{"gitId":"Chandan8186"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"Chandan8186"},"content":" \u003cTextField fx:id\u003d\"userInput\" layoutY\u003d\"558.0\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"41.0\" prefWidth\u003d\"324.0\" style\u003d\"-fx-border-radius: 20px; -fx-background-radius: 20px;\" AnchorPane.bottomAnchor\u003d\"1.0\" /\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"Chandan8186"},"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\" style\u003d\"-fx-border-radius: 20px; -fx-background-radius: 20px;\" text\u003d\"Send\" /\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"Chandan8186"},"content":" \u003cScrollPane fx:id\u003d\"scrollPane\" hbarPolicy\u003d\"NEVER\" hvalue\u003d\"1.0\" maxHeight\u003d\"1.7976931348623157E308\" prefHeight\u003d\"557.0\" prefWidth\u003d\"400.0\" vbarPolicy\u003d\"ALWAYS\" vvalue\u003d\"1.0\"\u003e","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"Chandan8186"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"Chandan8186"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"552.0\" prefWidth\u003d\"388.0\" /\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"Chandan8186"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"Chandan8186"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"Chandan8186"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"Chandan8186"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"Chandan8186":19}},{"path":"src/test/java/tasks/TaskListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Chandan8186"},"content":"package tasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Chandan8186"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Chandan8186"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"Chandan8186"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"Chandan8186"},"content":"public class TaskListTest {","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Chandan8186"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Chandan8186"},"content":" public void testTodoTask_validInput_expectedOutcome() {","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Chandan8186"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"Chandan8186"},"content":" Task todoTask \u003d taskList.addTodo(\"some todo\", 0);","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"Chandan8186"},"content":" assertEquals(\"[T][ ] some todo\", todoTask.toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"Chandan8186"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"Chandan8186"},"content":" public void testDeadlineTask_validInput_expectedOutcome() {","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"Chandan8186"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"Chandan8186"},"content":" Task deadlineTask \u003d taskList.addDeadline(\"some deadline\",","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"Chandan8186"},"content":" \"2023-01-01 1500\",","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"Chandan8186"},"content":" 0);","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"Chandan8186"},"content":" String expected \u003d \"[D][ ] some deadline (by: 01-Jan-2023 1500)\";","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"Chandan8186"},"content":" assertEquals(expected, deadlineTask.toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"Chandan8186"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"Chandan8186"},"content":" public void testDeadlineTask_invalidDatetime_exceptionThrown() {","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"Chandan8186"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"Chandan8186"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"Chandan8186"},"content":" taskList.addDeadline(\"some deadline\",","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"Chandan8186"},"content":" \"2023-01-01 later\",","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"Chandan8186"},"content":" 0);","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"Chandan8186"},"content":" fail();","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"Chandan8186"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"Chandan8186"},"content":" String expected \u003d \"Text \u00272023-01-01 later\u0027 could not be parsed at index 11\";","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"Chandan8186"},"content":" assertEquals(expected, e.getMessage());","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"Chandan8186"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"Chandan8186"},"content":" public void testEventTask_validInput_expectedOutcome() {","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"Chandan8186"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"Chandan8186"},"content":" Task eventTask \u003d taskList.addEvent(\"some event\",","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"Chandan8186"},"content":" \"2023-01-01 1530\",","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"Chandan8186"},"content":" \"2023-01-01 1600\",","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"Chandan8186"},"content":" 0);","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"Chandan8186"},"content":" String expected \u003d \"[E][ ] some event (from: 01-Jan-2023 1530 to: 01-Jan-2023 1600)\";","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"Chandan8186"},"content":" assertEquals(expected, eventTask.toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"Chandan8186"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"Chandan8186"},"content":" public void testEventTask_invalidDatetime_exceptionThrown() {","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"Chandan8186"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"Chandan8186"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"Chandan8186"},"content":" taskList.addEvent(\"some deadline\",","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"Chandan8186"},"content":" \"today\",","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"Chandan8186"},"content":" \"tomorrow\",","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"Chandan8186"},"content":" 0);","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"Chandan8186"},"content":" fail();","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"Chandan8186"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"Chandan8186"},"content":" String expected \u003d \"Text \u0027today\u0027 could not be parsed at index 0\";","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"Chandan8186"},"content":" assertEquals(expected, e.getMessage());","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"Chandan8186"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"Chandan8186"},"content":" public void testMarkTask_validIndex_expectedOutcome() {","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"Chandan8186"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"Chandan8186"},"content":" Task todoTask \u003d taskList.addTodo(\"A todo task.\", 0);","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"Chandan8186"},"content":" assertEquals(\"[T][ ] A todo task.\", todoTask.toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"Chandan8186"},"content":" taskList.markTaskAsDone(1);","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"Chandan8186"},"content":" assertEquals(\"[T][X] A todo task.\", todoTask.toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":75,"author":{"gitId":"Chandan8186"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"Chandan8186"},"content":" public void testMarkTask_invalidIndex_exceptionThrown() {","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"Chandan8186"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"Chandan8186"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-08-29"},{"lineNumber":79,"author":{"gitId":"Chandan8186"},"content":" taskList.addTodo(\"A todo task.\", 0);","lastModifiedDate":"2023-08-29"},{"lineNumber":80,"author":{"gitId":"Chandan8186"},"content":" taskList.markTaskAsDone(3);","lastModifiedDate":"2023-08-29"},{"lineNumber":81,"author":{"gitId":"Chandan8186"},"content":" fail();","lastModifiedDate":"2023-08-29"},{"lineNumber":82,"author":{"gitId":"Chandan8186"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":83,"author":{"gitId":"Chandan8186"},"content":" String expected \u003d \"Invalid index format.\\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"Chandan8186"},"content":" + \"Format should be: mark \u003ctask index\u003e OR unmark \u003ctask index\u003e \"","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"Chandan8186"},"content":" + \"OR delete \u003ctask index\u003e\\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"Chandan8186"},"content":" + \"where index is from 1 to 1.\";","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"Chandan8186"},"content":" assertEquals(expected, e.getMessage());","lastModifiedDate":"2023-08-29"},{"lineNumber":88,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":89,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":90,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":91,"author":{"gitId":"Chandan8186"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":92,"author":{"gitId":"Chandan8186"},"content":" public void testUnmarkTask_validIndex_expectedOutcome() {","lastModifiedDate":"2023-08-29"},{"lineNumber":93,"author":{"gitId":"Chandan8186"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-08-29"},{"lineNumber":94,"author":{"gitId":"Chandan8186"},"content":" Task todoTask \u003d taskList.addTodo(\"Another todo task.\", 1);","lastModifiedDate":"2023-08-29"},{"lineNumber":95,"author":{"gitId":"Chandan8186"},"content":" assertEquals(\"[T][X] Another todo task.\", todoTask.toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":96,"author":{"gitId":"Chandan8186"},"content":" taskList.unmarkTask(1);","lastModifiedDate":"2023-08-29"},{"lineNumber":97,"author":{"gitId":"Chandan8186"},"content":" assertEquals(\"[T][ ] Another todo task.\", todoTask.toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":98,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":99,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":100,"author":{"gitId":"Chandan8186"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"Chandan8186":100}},{"path":"src/test/java/tasks/TodoTaskTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Chandan8186"},"content":"package tasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Chandan8186"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"Chandan8186"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"Chandan8186"},"content":"public class TodoTaskTest {","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Chandan8186"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Chandan8186"},"content":" public void testTodoTaskFormat_validInput_expectedOutcome() {","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Chandan8186"},"content":" Task task \u003d new TodoTask(\"A todo task\", 0);","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"Chandan8186"},"content":" assertEquals(\"T|0|A todo task\", task.getTextFormattedString());","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"Chandan8186"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"Chandan8186"},"content":" public void testTodoTaskSaveFormat_validInput_expectedOutcome() {","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"Chandan8186"},"content":" Task task \u003d new TodoTask(\"A todo task\", 0);","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"Chandan8186"},"content":" assertEquals(\"[T][ ] A todo task\", task.toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"Chandan8186"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"Chandan8186"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"Chandan8186":21}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"Chandan8186"},"content":"list","lastModifiedDate":"2023-08-21"},{"lineNumber":2,"author":{"gitId":"Chandan8186"},"content":"todo Assignment 1","lastModifiedDate":"2023-08-21"},{"lineNumber":3,"author":{"gitId":"Chandan8186"},"content":"deadline Assignment 2 /by 2023-01-01 1245","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"Chandan8186"},"content":"event exam /from 2023-01-01 1245 /to 2023-01-01 1300","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"Chandan8186"},"content":"mark 1","lastModifiedDate":"2023-08-21"},{"lineNumber":6,"author":{"gitId":"Chandan8186"},"content":"unmark 1","lastModifiedDate":"2023-08-21"},{"lineNumber":7,"author":{"gitId":"Chandan8186"},"content":"delete 2","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"Chandan8186"},"content":"list","lastModifiedDate":"2023-08-21"},{"lineNumber":9,"author":{"gitId":"Chandan8186"},"content":"unknown command","lastModifiedDate":"2023-08-21"},{"lineNumber":10,"author":{"gitId":"Chandan8186"},"content":"todo","lastModifiedDate":"2023-08-22"},{"lineNumber":11,"author":{"gitId":"Chandan8186"},"content":"deadline /by","lastModifiedDate":"2023-08-22"},{"lineNumber":12,"author":{"gitId":"Chandan8186"},"content":"event something /from /to tomorrow","lastModifiedDate":"2023-08-22"},{"lineNumber":13,"author":{"gitId":"Chandan8186"},"content":"deadline a /by b","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"Chandan8186"},"content":"event a /from b /to c","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"Chandan8186"},"content":"mark 0","lastModifiedDate":"2023-08-22"},{"lineNumber":16,"author":{"gitId":"Chandan8186"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":17,"author":{"gitId":"Chandan8186"},"content":"bye","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"Chandan8186":17}},{"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":"Chandan8186"},"content":"java -classpath ..\\bin duke.Duke \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-08-29"},{"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":{"Chandan8186":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":"Chandan8186"},"content":"if ! javac -cp ../src/main/java -Xlint:none -d ../bin ../src/main/java/Duke/*.java","lastModifiedDate":"2023-08-29"},{"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":"-"},"content":"java -classpath ../bin Duke \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"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":{"Chandan8186":1,"-":37}}] diff --git a/Chandan8186_ip_master/commits.json b/Chandan8186_ip_master/commits.json index 20faf9df..23ebb4f6 100644 --- a/Chandan8186_ip_master/commits.json +++ b/Chandan8186_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"Chandan8186":[{"date":"2023-08-20","commitResults":[{"hash":"7d09b64d9a9d7f59f7abc1cc2dd9a32eceaeaede","isMergeCommit":false,"messageTitle":"Level-0: Rename, Greet, Exit","messageBody":"- Renamed Duke to ChatALot\n- Added greet message (skeletal version)\n- Added *.class to .gitignore\n","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":10}}},{"hash":"dd4059529d7d2176779e5ca6e1716327838b2f3c","isMergeCommit":false,"messageTitle":"Level-1: Echo","messageBody":"- ChatALot echoes user input\n- minor design changes\n","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":53,"deletions":7}}},{"hash":"85d565ed32a4a678d2c80ff8c6c2fdbd58c31293","isMergeCommit":false,"messageTitle":"Level-2: Add, List","messageBody":"- functionality for storing items in a list\n","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":66,"deletions":10}}},{"hash":"190f6a4206de7dd4f067a55d3b6a7b477e422f1c","isMergeCommit":false,"messageTitle":"Level-3: Mark as Done","messageBody":"- added task completion status\n","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":102,"deletions":54}}},{"hash":"ad7b2626f22933b523441c30225ce71c47bddfd4","isMergeCommit":false,"messageTitle":"Level-4: ToDo, Event, Deadline","messageBody":"- renamed ChatALot.java back to Duke.java\n- added different task types\n","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":202,"deletions":87}}}]},{"date":"2023-08-21","commitResults":[{"hash":"b35add30b19157676f2739a4f78293207f72ae00","isMergeCommit":false,"messageTitle":"A-TextUiTesting: Automated Text UI Testing","messageBody":"- important bug fixes\n- added some tests for all commands\n","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":10,"deletions":0},"java":{"insertions":7,"deletions":7}}}]},{"date":"2023-08-22","commitResults":[{"hash":"81fe732209dbd9c2190dfa0f88a952723029a54b","isMergeCommit":false,"messageTitle":"Level-5: Handle Errors","messageBody":"- implemented error handling\n- bug fixes\n- updated runtest with more tests\n","tags":["Level-5"],"fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":1},"java":{"insertions":191,"deletions":59}}},{"hash":"7536706f528510bd2c13ff517778c07c201f697b","isMergeCommit":false,"messageTitle":"Level-6: Delete","messageBody":"- added delete functionality\n- added test case for delete\n","tags":["Level-6"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":31,"deletions":1}}}]},{"date":"2023-08-27","commitResults":[{"hash":"1aa8a8debb4de7852e71992f63e37ff9105142c6","isMergeCommit":false,"messageTitle":"Add Save Functionality","messageBody":"- Fix some bugs and refactor code\n- Add save functionality\n","fileTypesAndContributionMap":{"java":{"insertions":192,"deletions":52}}},{"hash":"b35f2ea880832843f383ef4a04a0209a2a7ef23b","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-28","commitResults":[{"hash":"406123123dedd512f054b5edaff50912a091f9ef","isMergeCommit":false,"messageTitle":"Add date and time readability","messageBody":"- Fix some bugs\n- Add date and time readability\n","fileTypesAndContributionMap":{"java":{"insertions":98,"deletions":83}}},{"hash":"0e674b8c08ce5e2e5d14f496834f35f2d74cee1b","isMergeCommit":false,"messageTitle":"Update tests to accommodate date and time formats","messageBody":"- Change tests to test for invalid date and time formats\n","fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":2}}},{"hash":"57925f02f3e86390244627827c8a829e4c8aa36e","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}},{"hash":"e02a9fbf7e6acc1e55fb5c90ca032160b1931410","isMergeCommit":false,"messageTitle":"Add Ui and Storage classes","messageBody":"- add preliminary Ui and Storage classes integration\n","fileTypesAndContributionMap":{"java":{"insertions":207,"deletions":3}}}]},{"date":"2023-08-29","commitResults":[{"hash":"3112e8aa085bdbe91edb1553d30e6e9c6f65fbc0","isMergeCommit":false,"messageTitle":"Add Parser class","messageBody":"- Add parser class with parsing functionality\n- Update saving functionality to save after each task list alteration\n- Do some code refactoring and debugging\n","fileTypesAndContributionMap":{"java":{"insertions":214,"deletions":315}}},{"hash":"b47dbdac49a30c6fc0415ff7ed7873f42dd270f5","isMergeCommit":false,"messageTitle":"Integrate all helper classes","messageBody":"- Integrate Parser, Storage and Ui with Duke\n- Refactor some code\n","fileTypesAndContributionMap":{"java":{"insertions":79,"deletions":98}}},{"hash":"e3bb28d55a455e0c6a7b831a85ea2bf80ab35c9a","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-MoreOOP\u0027","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"eb7d4c4ad29f83818e6f7080c638904e33131c61","isMergeCommit":false,"messageTitle":"Organize into Packages","messageBody":"- Organize all non-trivial classes into duke, exceptions, tasks packages\n","fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":10},"bat":{"insertions":1,"deletions":1},"sh":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}},{"hash":"0828be0785444c33bd53647fd30873649b7becec","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Packages\u0027","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{}},{"hash":"c493674c384fd87f69b5e139c76a1b0591dc7241","isMergeCommit":true,"messageTitle":"Merge commit \u0027ed6d4d25bd4e34461919ffe785a6f10f4c087552\u0027 into branch-A-Gradle","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"7370b464aca9b3d904e379e78d5ec08c73ae64f5","isMergeCommit":false,"messageTitle":"Add gradle support","messageBody":"- Amend build.gradle accordingly\n","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}},{"hash":"d07a488b992ed055e5abc6cedf58a54b573dbc35","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Gradle\u0027","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"83df484d6cf1202128edb209596c70889aa774fb","isMergeCommit":false,"messageTitle":"Add JUnit tests for tasks","messageBody":"- add some JUnit tests\n- modify Parser to aid in testing\n","fileTypesAndContributionMap":{"java":{"insertions":129,"deletions":8}}},{"hash":"c9bef8b0ae329d4fc49a5abc75ea92200af571ba","isMergeCommit":false,"messageTitle":"Modify Storage class to take in file name","messageBody":"- Modify Storage class to take in any file name fed by user\n","fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":15}}},{"hash":"152040d69fda27cc83c7dc877491c6efa0247080","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JUnit\u0027","messageBody":"","tags":["A-Jar","A-JUnit"],"fileTypesAndContributionMap":{}},{"hash":"b568df6f83658267f38d16ab8ce558440a81d7fb","isMergeCommit":false,"messageTitle":"Add javadocs","messageBody":"- Add javadocs for most classes and public methods\n","fileTypesAndContributionMap":{"java":{"insertions":261,"deletions":5}}},{"hash":"b373ed6eb90137e955a86cb3feda765daf0cd935","isMergeCommit":false,"messageTitle":"Add more javadocs","messageBody":"- Add more javadocs\n","fileTypesAndContributionMap":{"java":{"insertions":30,"deletions":0}}}]},{"date":"2023-08-30","commitResults":[{"hash":"830df1f9dfaf15c6de3db132a6b5847c0942d550","isMergeCommit":false,"messageTitle":"Fix code to follow coding standards","messageBody":"- Fix coding standard issues\n","fileTypesAndContributionMap":{"java":{"insertions":65,"deletions":64}}},{"hash":"1ec2f879143564340bf1b528f2ae6a96a474d57d","isMergeCommit":false,"messageTitle":"Add find function to TaskList","messageBody":"- Add find function to TaskList\n","fileTypesAndContributionMap":{"java":{"insertions":46,"deletions":22}}},{"hash":"46f4b7c57641e7179f4a29a7ec150f71457f2e09","isMergeCommit":false,"messageTitle":"Refactor a Ui function from level 9 branch","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":4}}},{"hash":"067ea04f86f64b31c02ec282832fe21d714bd516","isMergeCommit":false,"messageTitle":"Refactor Ui function and task list name from Javadoc branch","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":28,"deletions":28}}},{"hash":"ec906b70d76a6891b48638acbc9616dcb0786910","isMergeCommit":false,"messageTitle":"Refactor Ui function from CodingStandards branch","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":4}}},{"hash":"25647fb2b4650d4b298ea229f599290aa48f8391","isMergeCommit":false,"messageTitle":"Implement finding task functionality","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":21,"deletions":0}}},{"hash":"b59c363b2a0728cec50b047629e2ad03e7428cbf","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"2c467faa1acbebafa47b7e8c214596bef88c94ac","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"# Conflicts:\n#\tsrc/main/java/duke/Ui.java\n","fileTypesAndContributionMap":{}},{"hash":"47cf673b31119e1977c8737b75c423a1be4324f0","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"# Conflicts:\n#\tsrc/main/java/duke/Duke.java\n#\tsrc/main/java/tasks/TaskList.java\n","fileTypesAndContributionMap":{}},{"hash":"41395ed40f146f500e598a97691e5ef1f37cf1b1","isMergeCommit":false,"messageTitle":"Fix merge conflict errors","messageBody":"- Fix error of erased javadocs from merge commit\n","tags":["Level-9","A-JavaDoc","A-CodingStandard"],"fileTypesAndContributionMap":{"java":{"insertions":61,"deletions":10}}}]},{"date":"2023-09-02","commitResults":[{"hash":"a70b0c892ca0244bbe66da55247a5a86bd86133a","isMergeCommit":false,"messageTitle":"Configure checkstyle","messageBody":"- Add and configure checkstyle xml files\n","fileTypesAndContributionMap":{"gradle":{"insertions":6,"deletions":1}}},{"hash":"b586996bb5f660775f424dd842061845db408fcc","isMergeCommit":false,"messageTitle":"Fix checkstyle and coding standard issues","messageBody":"- fix almost all checkstyle errors and warnings\n- fix any coding standard issue\n- refactored some method and attribute names\n","fileTypesAndContributionMap":{"java":{"insertions":139,"deletions":91}}},{"hash":"162f4036eedb57e8333e999e86c345306c04579e","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CheckStyle\u0027","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{}},{"hash":"50a332699155021f042f91bc131873469c780590","isMergeCommit":false,"messageTitle":"Implement rudimentary JavaFX gui","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":15,"deletions":0},"java":{"insertions":171,"deletions":1}}}]},{"date":"2023-09-03","commitResults":[{"hash":"efe3447af2e3be508dea71ec41f8bbd0a7c231ca","isMergeCommit":false,"messageTitle":"Implement basic gui with full functionality","messageBody":"- add full functionality to basic JavaFX gui\n- update build.gradle to allow for jar download\n","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"java":{"insertions":138,"deletions":85}}}]},{"date":"2023-09-04","commitResults":[{"hash":"389bb67e8e858541987b69292ad97f3b283a040a","isMergeCommit":false,"messageTitle":"Implement FXML","messageBody":"- implement FXML\n- clean up / refactor / remove unnecessary code\n","fileTypesAndContributionMap":{"fxml":{"insertions":35,"deletions":0},"java":{"insertions":181,"deletions":283}}}]},{"date":"2023-09-06","commitResults":[{"hash":"6fac8a99e9e4b8d234c76dda260a21696ea4dc23","isMergeCommit":false,"messageTitle":"Implement final GUI","messageBody":"- improve GUI\n- refactor some code\n- fix some bugs\n- work on PR review comments\n","fileTypesAndContributionMap":{"fxml":{"insertions":12,"deletions":4},"java":{"insertions":30,"deletions":31}}},{"hash":"9cd29342116121fe332365eddef0190d06089f8a","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-10\u0027","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"Chandan8186":{"java":1273,"md":2,"fxml":43,"sh":1,"bat":1,"gradle":21,"txt":17}},"authorContributionVariance":{"Chandan8186":90417.28},"authorDisplayNameMap":{"Chandan8186":"CS2103T-T08-3 CHAN..BABU"}} +{"authorDailyContributionsMap":{"Chandan8186":[{"date":"2023-08-20","commitResults":[{"hash":"7d09b64d9a9d7f59f7abc1cc2dd9a32eceaeaede","isMergeCommit":false,"messageTitle":"Level-0: Rename, Greet, Exit","messageBody":"- Renamed Duke to ChatALot\n- Added greet message (skeletal version)\n- Added *.class to .gitignore\n","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":10}}},{"hash":"dd4059529d7d2176779e5ca6e1716327838b2f3c","isMergeCommit":false,"messageTitle":"Level-1: Echo","messageBody":"- ChatALot echoes user input\n- minor design changes\n","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":53,"deletions":7}}},{"hash":"85d565ed32a4a678d2c80ff8c6c2fdbd58c31293","isMergeCommit":false,"messageTitle":"Level-2: Add, List","messageBody":"- functionality for storing items in a list\n","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":66,"deletions":10}}},{"hash":"190f6a4206de7dd4f067a55d3b6a7b477e422f1c","isMergeCommit":false,"messageTitle":"Level-3: Mark as Done","messageBody":"- added task completion status\n","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":102,"deletions":54}}},{"hash":"ad7b2626f22933b523441c30225ce71c47bddfd4","isMergeCommit":false,"messageTitle":"Level-4: ToDo, Event, Deadline","messageBody":"- renamed ChatALot.java back to Duke.java\n- added different task types\n","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":202,"deletions":87}}}]},{"date":"2023-08-21","commitResults":[{"hash":"b35add30b19157676f2739a4f78293207f72ae00","isMergeCommit":false,"messageTitle":"A-TextUiTesting: Automated Text UI Testing","messageBody":"- important bug fixes\n- added some tests for all commands\n","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":10,"deletions":0},"java":{"insertions":7,"deletions":7}}}]},{"date":"2023-08-22","commitResults":[{"hash":"81fe732209dbd9c2190dfa0f88a952723029a54b","isMergeCommit":false,"messageTitle":"Level-5: Handle Errors","messageBody":"- implemented error handling\n- bug fixes\n- updated runtest with more tests\n","tags":["Level-5"],"fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":1},"java":{"insertions":191,"deletions":59}}},{"hash":"7536706f528510bd2c13ff517778c07c201f697b","isMergeCommit":false,"messageTitle":"Level-6: Delete","messageBody":"- added delete functionality\n- added test case for delete\n","tags":["Level-6"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":31,"deletions":1}}}]},{"date":"2023-08-27","commitResults":[{"hash":"1aa8a8debb4de7852e71992f63e37ff9105142c6","isMergeCommit":false,"messageTitle":"Add Save Functionality","messageBody":"- Fix some bugs and refactor code\n- Add save functionality\n","fileTypesAndContributionMap":{"java":{"insertions":192,"deletions":52}}},{"hash":"b35f2ea880832843f383ef4a04a0209a2a7ef23b","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-28","commitResults":[{"hash":"406123123dedd512f054b5edaff50912a091f9ef","isMergeCommit":false,"messageTitle":"Add date and time readability","messageBody":"- Fix some bugs\n- Add date and time readability\n","fileTypesAndContributionMap":{"java":{"insertions":98,"deletions":83}}},{"hash":"0e674b8c08ce5e2e5d14f496834f35f2d74cee1b","isMergeCommit":false,"messageTitle":"Update tests to accommodate date and time formats","messageBody":"- Change tests to test for invalid date and time formats\n","fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":2}}},{"hash":"57925f02f3e86390244627827c8a829e4c8aa36e","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}},{"hash":"e02a9fbf7e6acc1e55fb5c90ca032160b1931410","isMergeCommit":false,"messageTitle":"Add Ui and Storage classes","messageBody":"- add preliminary Ui and Storage classes integration\n","fileTypesAndContributionMap":{"java":{"insertions":207,"deletions":3}}}]},{"date":"2023-08-29","commitResults":[{"hash":"3112e8aa085bdbe91edb1553d30e6e9c6f65fbc0","isMergeCommit":false,"messageTitle":"Add Parser class","messageBody":"- Add parser class with parsing functionality\n- Update saving functionality to save after each task list alteration\n- Do some code refactoring and debugging\n","fileTypesAndContributionMap":{"java":{"insertions":214,"deletions":315}}},{"hash":"b47dbdac49a30c6fc0415ff7ed7873f42dd270f5","isMergeCommit":false,"messageTitle":"Integrate all helper classes","messageBody":"- Integrate Parser, Storage and Ui with Duke\n- Refactor some code\n","fileTypesAndContributionMap":{"java":{"insertions":79,"deletions":98}}},{"hash":"e3bb28d55a455e0c6a7b831a85ea2bf80ab35c9a","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-MoreOOP\u0027","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"eb7d4c4ad29f83818e6f7080c638904e33131c61","isMergeCommit":false,"messageTitle":"Organize into Packages","messageBody":"- Organize all non-trivial classes into duke, exceptions, tasks packages\n","fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":10},"bat":{"insertions":1,"deletions":1},"sh":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}},{"hash":"0828be0785444c33bd53647fd30873649b7becec","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Packages\u0027","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{}},{"hash":"c493674c384fd87f69b5e139c76a1b0591dc7241","isMergeCommit":true,"messageTitle":"Merge commit \u0027ed6d4d25bd4e34461919ffe785a6f10f4c087552\u0027 into branch-A-Gradle","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"7370b464aca9b3d904e379e78d5ec08c73ae64f5","isMergeCommit":false,"messageTitle":"Add gradle support","messageBody":"- Amend build.gradle accordingly\n","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}},{"hash":"d07a488b992ed055e5abc6cedf58a54b573dbc35","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Gradle\u0027","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"83df484d6cf1202128edb209596c70889aa774fb","isMergeCommit":false,"messageTitle":"Add JUnit tests for tasks","messageBody":"- add some JUnit tests\n- modify Parser to aid in testing\n","fileTypesAndContributionMap":{"java":{"insertions":129,"deletions":8}}},{"hash":"c9bef8b0ae329d4fc49a5abc75ea92200af571ba","isMergeCommit":false,"messageTitle":"Modify Storage class to take in file name","messageBody":"- Modify Storage class to take in any file name fed by user\n","fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":15}}},{"hash":"152040d69fda27cc83c7dc877491c6efa0247080","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JUnit\u0027","messageBody":"","tags":["A-Jar","A-JUnit"],"fileTypesAndContributionMap":{}},{"hash":"b568df6f83658267f38d16ab8ce558440a81d7fb","isMergeCommit":false,"messageTitle":"Add javadocs","messageBody":"- Add javadocs for most classes and public methods\n","fileTypesAndContributionMap":{"java":{"insertions":261,"deletions":5}}},{"hash":"b373ed6eb90137e955a86cb3feda765daf0cd935","isMergeCommit":false,"messageTitle":"Add more javadocs","messageBody":"- Add more javadocs\n","fileTypesAndContributionMap":{"java":{"insertions":30,"deletions":0}}}]},{"date":"2023-08-30","commitResults":[{"hash":"830df1f9dfaf15c6de3db132a6b5847c0942d550","isMergeCommit":false,"messageTitle":"Fix code to follow coding standards","messageBody":"- Fix coding standard issues\n","fileTypesAndContributionMap":{"java":{"insertions":65,"deletions":64}}},{"hash":"1ec2f879143564340bf1b528f2ae6a96a474d57d","isMergeCommit":false,"messageTitle":"Add find function to TaskList","messageBody":"- Add find function to TaskList\n","fileTypesAndContributionMap":{"java":{"insertions":46,"deletions":22}}},{"hash":"46f4b7c57641e7179f4a29a7ec150f71457f2e09","isMergeCommit":false,"messageTitle":"Refactor a Ui function from level 9 branch","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":4}}},{"hash":"067ea04f86f64b31c02ec282832fe21d714bd516","isMergeCommit":false,"messageTitle":"Refactor Ui function and task list name from Javadoc branch","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":28,"deletions":28}}},{"hash":"ec906b70d76a6891b48638acbc9616dcb0786910","isMergeCommit":false,"messageTitle":"Refactor Ui function from CodingStandards branch","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":4}}},{"hash":"25647fb2b4650d4b298ea229f599290aa48f8391","isMergeCommit":false,"messageTitle":"Implement finding task functionality","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":21,"deletions":0}}},{"hash":"b59c363b2a0728cec50b047629e2ad03e7428cbf","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"2c467faa1acbebafa47b7e8c214596bef88c94ac","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"# Conflicts:\n#\tsrc/main/java/duke/Ui.java\n","fileTypesAndContributionMap":{}},{"hash":"47cf673b31119e1977c8737b75c423a1be4324f0","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"# Conflicts:\n#\tsrc/main/java/duke/Duke.java\n#\tsrc/main/java/tasks/TaskList.java\n","fileTypesAndContributionMap":{}},{"hash":"41395ed40f146f500e598a97691e5ef1f37cf1b1","isMergeCommit":false,"messageTitle":"Fix merge conflict errors","messageBody":"- Fix error of erased javadocs from merge commit\n","tags":["Level-9","A-JavaDoc","A-CodingStandard"],"fileTypesAndContributionMap":{"java":{"insertions":61,"deletions":10}}}]},{"date":"2023-09-02","commitResults":[{"hash":"a70b0c892ca0244bbe66da55247a5a86bd86133a","isMergeCommit":false,"messageTitle":"Configure checkstyle","messageBody":"- Add and configure checkstyle xml files\n","fileTypesAndContributionMap":{"gradle":{"insertions":6,"deletions":1}}},{"hash":"b586996bb5f660775f424dd842061845db408fcc","isMergeCommit":false,"messageTitle":"Fix checkstyle and coding standard issues","messageBody":"- fix almost all checkstyle errors and warnings\n- fix any coding standard issue\n- refactored some method and attribute names\n","fileTypesAndContributionMap":{"java":{"insertions":139,"deletions":91}}},{"hash":"162f4036eedb57e8333e999e86c345306c04579e","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CheckStyle\u0027","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{}},{"hash":"50a332699155021f042f91bc131873469c780590","isMergeCommit":false,"messageTitle":"Implement rudimentary JavaFX gui","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":15,"deletions":0},"java":{"insertions":171,"deletions":1}}}]},{"date":"2023-09-03","commitResults":[{"hash":"efe3447af2e3be508dea71ec41f8bbd0a7c231ca","isMergeCommit":false,"messageTitle":"Implement basic gui with full functionality","messageBody":"- add full functionality to basic JavaFX gui\n- update build.gradle to allow for jar download\n","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"java":{"insertions":138,"deletions":85}}}]},{"date":"2023-09-04","commitResults":[{"hash":"389bb67e8e858541987b69292ad97f3b283a040a","isMergeCommit":false,"messageTitle":"Implement FXML","messageBody":"- implement FXML\n- clean up / refactor / remove unnecessary code\n","fileTypesAndContributionMap":{"fxml":{"insertions":35,"deletions":0},"java":{"insertions":181,"deletions":283}}}]},{"date":"2023-09-06","commitResults":[{"hash":"6fac8a99e9e4b8d234c76dda260a21696ea4dc23","isMergeCommit":false,"messageTitle":"Implement final GUI","messageBody":"- improve GUI\n- refactor some code\n- fix some bugs\n- work on PR review comments\n","fileTypesAndContributionMap":{"fxml":{"insertions":12,"deletions":4},"java":{"insertions":30,"deletions":31}}},{"hash":"9cd29342116121fe332365eddef0190d06089f8a","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-10\u0027","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-10","commitResults":[{"hash":"b64b3cbc0716509f1bd6ccc37fd16ecc1425b408","isMergeCommit":false,"messageTitle":"Add assertions for datetime objects","messageBody":"Some methods in some classes make important assumptions.\n\nFor example, when tasks with dates/times are created, the dates are assumed to not be null.\n\nAdding assertions for the above makes sure that valid dates are printed to the user.\n","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":0}}},{"hash":"b70de2e046ccc75a93c99f740766b8fcda213d44","isMergeCommit":false,"messageTitle":"Add assertions for filename and isMarked task attribute","messageBody":"Some methods in some classes make important assumptions.\n\nFor example, when tasks are created, the isMarked int is assumed\nto be 0 (incomplete) or 1 (complete).\n\nAdding assertions for the above makes sure that the complete/incomplete\ncross is displayed to the user without issues.\n","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":0}}},{"hash":"a7a2860688313b44e3797ca95a2e11a53ea9968a","isMergeCommit":false,"messageTitle":"Improve readability for some methods","messageBody":"Some methods in Ui class were very long and difficult to read.\n\nBy using String.format(), the methods could be more concise\nand readable.\n\nThis is in response to a PR review comment.\n","fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":12}}},{"hash":"0c110ae2630d13126f17b8e00006275fb47cac98","isMergeCommit":true,"messageTitle":"Merge pull request #1 from Chandan8186/branch-A-Assertions","messageBody":"Implement A-Assertions","fileTypesAndContributionMap":{}},{"hash":"04dac8e0cd071be7ddda6b7544aebda6768a8651","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/Chandan8186/ip","messageBody":"","tags":["A-Assertions"],"fileTypesAndContributionMap":{}},{"hash":"5c002a528ee98803bf83a2daa97f1630deef8002","isMergeCommit":true,"messageTitle":"Merge pull request #2 from Chandan8186/branch-A-CodeQuality","messageBody":"Implement A-CodeQuality","fileTypesAndContributionMap":{}},{"hash":"a42fd80001a156d226ba2e80303076ad52814930","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/Chandan8186/ip","messageBody":"","tags":["A-CodeQuality"],"fileTypesAndContributionMap":{}},{"hash":"09f2df5efa6b60d7eaa5f5b6fd2f16cbacac0ca3","isMergeCommit":false,"messageTitle":"Implement C-Statistics","messageBody":"Due to the many different types of tasks, users may find\nit difficult to categorize them.\n\nBy giving task statistics, users can easily see the tasks due\nthe current day.\n","fileTypesAndContributionMap":{"java":{"insertions":72,"deletions":0}}},{"hash":"022a6a1500dcba5aad1bb66249da7489fab254e6","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-BCD-Extension\u0027","messageBody":"","tags":["BCD-Extension"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"Chandan8186":{"java":1346,"md":2,"fxml":43,"sh":1,"bat":1,"gradle":21,"txt":17}},"authorContributionVariance":{"Chandan8186":80850.14},"authorDisplayNameMap":{"Chandan8186":"CS2103T-T08-3 CHAN..BABU"}} diff --git a/ChangruHenryQian_ip_master/authorship.json b/ChangruHenryQian_ip_master/authorship.json index 6d8a8b44..25f2f0dd 100644 --- a/ChangruHenryQian_ip_master/authorship.json +++ b/ChangruHenryQian_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":"-"},"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":"ChangruHenryQian"},"content":" mainClass.set(\"duke.Duke\")","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":38,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"-":41,"ChangruHenryQian":1}},{"path":"data/tasks.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"ChangruHenryQian"},"content":"0 | test0 | test0 | test","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"ChangruHenryQian":1}},{"path":"src/main/java/duke/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ChangruHenryQian"},"content":"package duke;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"ChangruHenryQian"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"ChangruHenryQian"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"ChangruHenryQian"},"content":"import java.util.Locale;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"ChangruHenryQian"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"ChangruHenryQian"},"content":" private LocalDate by;","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"ChangruHenryQian"},"content":" public Deadline(String description, LocalDate by) {","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"ChangruHenryQian"},"content":" super(description);","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"ChangruHenryQian"},"content":" this.by \u003d by;","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"ChangruHenryQian"},"content":" public Deadline(String description, boolean isDone, LocalDate by) {","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"ChangruHenryQian"},"content":" super(description, isDone);","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"ChangruHenryQian"},"content":" this.by \u003d by;","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"ChangruHenryQian"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"ChangruHenryQian"},"content":" public String toString() {","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"ChangruHenryQian"},"content":" return \"[D]\" + super.toString() + \" (by: \"","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"ChangruHenryQian"},"content":" + this.by.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy\", Locale.ENGLISH)) + \")\";","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"ChangruHenryQian"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"ChangruHenryQian"},"content":" public String toTxt() {","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"ChangruHenryQian"},"content":" return \"D | \" + super.toTxt()","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"ChangruHenryQian"},"content":" + \" | \" + this.by.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy\", Locale.ENGLISH));","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"ChangruHenryQian"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"ChangruHenryQian":30}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ChangruHenryQian"},"content":"package duke;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"ChangruHenryQian"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"ChangruHenryQian"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"ChangruHenryQian"},"content":"public class Duke {","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"ChangruHenryQian"},"content":" private Storage storage;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"ChangruHenryQian"},"content":" private TaskList tasks;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"ChangruHenryQian"},"content":" private Ui ui;","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"ChangruHenryQian"},"content":" public Duke(String filePath) {","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"ChangruHenryQian"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"ChangruHenryQian"},"content":" storage \u003d new Storage(filePath);","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"ChangruHenryQian"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"ChangruHenryQian"},"content":" tasks \u003d new TaskList(storage.load(), storage);","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"ChangruHenryQian"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"ChangruHenryQian"},"content":" ui.printException(e);","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"ChangruHenryQian"},"content":" tasks \u003d new TaskList(storage);","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"ChangruHenryQian"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"ChangruHenryQian"},"content":" ui.printException(new DukeException(\"Unable to find storage file.\"));","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"ChangruHenryQian"},"content":" tasks \u003d new TaskList(storage);","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"ChangruHenryQian"},"content":" public void run() {","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"ChangruHenryQian"},"content":" Ui.welcomeMessage();","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"ChangruHenryQian"},"content":" Scanner userInput \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"ChangruHenryQian"},"content":" while (true) {","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"ChangruHenryQian"},"content":" String command \u003d userInput.nextLine();","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"ChangruHenryQian"},"content":" Parser p \u003d new Parser(command, this.storage, this.tasks);","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"ChangruHenryQian"},"content":" p.parse();","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"ChangruHenryQian"},"content":" if (p.isEnd()) {","lastModifiedDate":"2023-09-09"},{"lineNumber":35,"author":{"gitId":"ChangruHenryQian"},"content":" break;","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"ChangruHenryQian"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-09"},{"lineNumber":41,"author":{"gitId":"ChangruHenryQian"},"content":" new Duke(\"data/tasks.txt\").run();","lastModifiedDate":"2023-09-09"},{"lineNumber":42,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"-":1,"ChangruHenryQian":42}},{"path":"src/main/java/duke/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ChangruHenryQian"},"content":"package duke;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"ChangruHenryQian"},"content":"public class DukeException extends RuntimeException{","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"ChangruHenryQian"},"content":" public DukeException(String message) {","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"ChangruHenryQian"},"content":" super(message);","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"ChangruHenryQian"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"ChangruHenryQian":7}},{"path":"src/main/java/duke/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ChangruHenryQian"},"content":"package duke;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"ChangruHenryQian"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"ChangruHenryQian"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"ChangruHenryQian"},"content":"import java.util.Locale;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"ChangruHenryQian"},"content":"public class Event extends Task{","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"ChangruHenryQian"},"content":" private LocalDate startTime;","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"ChangruHenryQian"},"content":" private LocalDate endTime;","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"ChangruHenryQian"},"content":" public Event(String description, LocalDate startTime, LocalDate endTime) {","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"ChangruHenryQian"},"content":" super(description);","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"ChangruHenryQian"},"content":" this.startTime \u003d startTime;","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"ChangruHenryQian"},"content":" this.endTime \u003d endTime;","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"ChangruHenryQian"},"content":" public Event(String description, boolean isDone, LocalDate startTime, LocalDate endTime) {","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"ChangruHenryQian"},"content":" super(description, isDone);","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"ChangruHenryQian"},"content":" this.startTime \u003d startTime;","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"ChangruHenryQian"},"content":" this.endTime \u003d endTime;","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"ChangruHenryQian"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"ChangruHenryQian"},"content":" public String toString() {","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"ChangruHenryQian"},"content":" return \"[E]\" + super.toString() + \" (from: \" + startTime.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy\", Locale.ENGLISH))","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"ChangruHenryQian"},"content":" + \" to: \" + endTime.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy\", Locale.ENGLISH)) + \")\";","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"ChangruHenryQian"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"ChangruHenryQian"},"content":" public String toTxt() {","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"ChangruHenryQian"},"content":" return \"E | \" + super.toTxt() + \" | \" + this.startTime.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy\", Locale.ENGLISH))","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"ChangruHenryQian"},"content":" + \" | \" + this.endTime.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy\", Locale.ENGLISH));","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"ChangruHenryQian"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"ChangruHenryQian":33}},{"path":"src/main/java/duke/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ChangruHenryQian"},"content":"package duke;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"ChangruHenryQian"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"ChangruHenryQian"},"content":"public class Parser {","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"ChangruHenryQian"},"content":" private String command;","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"ChangruHenryQian"},"content":" private Storage storage;","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"ChangruHenryQian"},"content":" private TaskList taskList;","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"ChangruHenryQian"},"content":" private boolean isEnd \u003d false;","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"ChangruHenryQian"},"content":" public Parser(String command, Storage storage, TaskList taskList) {","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"ChangruHenryQian"},"content":" this.command \u003d command;","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"ChangruHenryQian"},"content":" this.storage \u003d storage;","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"ChangruHenryQian"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"ChangruHenryQian"},"content":" public void parse() {","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"ChangruHenryQian"},"content":" try{","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"ChangruHenryQian"},"content":" if (command.startsWith(\"list\")) {","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"ChangruHenryQian"},"content":" this.taskList.listTasks();","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"ChangruHenryQian"},"content":" } else if (command.startsWith(\"mark\")) {","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"ChangruHenryQian"},"content":" this.taskList.markTask(Integer.valueOf(command.split(\" \")[1]) - 1);","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"ChangruHenryQian"},"content":" } else if (command.startsWith(\"todo\")) {","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"ChangruHenryQian"},"content":" if (command.split(\" \", 2).length \u003d\u003d 1) {","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"ChangruHenryQian"},"content":" throw new DukeException(\" OOPS!!! The description of a todo cannot be empty.\");","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"ChangruHenryQian"},"content":" ToDo newToDo \u003d new ToDo(command.split(\" \", 2)[1]);","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"ChangruHenryQian"},"content":" this.taskList.addTask(newToDo);","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"ChangruHenryQian"},"content":" } else if (command.startsWith(\"deadline\")) {","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"ChangruHenryQian"},"content":" LocalDate deadline \u003d LocalDate.parse(command.split(\" /by \", 2)[1]);","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"ChangruHenryQian"},"content":" String name \u003d command.split(\" /by \", 2)[0].split(\" \", 2)[1];","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"ChangruHenryQian"},"content":" Deadline newDeadline \u003d new Deadline(name, deadline);","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"ChangruHenryQian"},"content":" this.taskList.addTask(newDeadline);","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"ChangruHenryQian"},"content":" } else if (command.startsWith(\"event\")) {","lastModifiedDate":"2023-09-09"},{"lineNumber":35,"author":{"gitId":"ChangruHenryQian"},"content":" LocalDate startTime \u003d LocalDate.parse(command.split(\" /from \", 2)[1]","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"ChangruHenryQian"},"content":" .split(\" /to \", 2)[0]);","lastModifiedDate":"2023-09-09"},{"lineNumber":37,"author":{"gitId":"ChangruHenryQian"},"content":" LocalDate endTime \u003d LocalDate.parse(command.split(\" /to \", 2)[1]);","lastModifiedDate":"2023-09-09"},{"lineNumber":38,"author":{"gitId":"ChangruHenryQian"},"content":" String name \u003d command.split(\" /from \", 2)[0].split(\" \", 2)[1];","lastModifiedDate":"2023-09-09"},{"lineNumber":39,"author":{"gitId":"ChangruHenryQian"},"content":" Event newEvent \u003d new Event(name, startTime, endTime);","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"ChangruHenryQian"},"content":" this.taskList.addTask(newEvent);","lastModifiedDate":"2023-09-09"},{"lineNumber":41,"author":{"gitId":"ChangruHenryQian"},"content":" } else if (command.startsWith(\"delete\")) {","lastModifiedDate":"2023-09-09"},{"lineNumber":42,"author":{"gitId":"ChangruHenryQian"},"content":" this.taskList.deleteTask(Integer.valueOf(command.split(\" \")[1]) - 1);","lastModifiedDate":"2023-09-09"},{"lineNumber":43,"author":{"gitId":"ChangruHenryQian"},"content":" } else if (command.startsWith(\"bye\")) {","lastModifiedDate":"2023-09-09"},{"lineNumber":44,"author":{"gitId":"ChangruHenryQian"},"content":" this.isEnd \u003d true;","lastModifiedDate":"2023-09-09"},{"lineNumber":45,"author":{"gitId":"ChangruHenryQian"},"content":" Ui.farewellMessage();","lastModifiedDate":"2023-09-09"},{"lineNumber":46,"author":{"gitId":"ChangruHenryQian"},"content":" } else {","lastModifiedDate":"2023-09-09"},{"lineNumber":47,"author":{"gitId":"ChangruHenryQian"},"content":" throw new DukeException(\" OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-09-09"},{"lineNumber":48,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":49,"author":{"gitId":"ChangruHenryQian"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-09"},{"lineNumber":50,"author":{"gitId":"ChangruHenryQian"},"content":" Ui.printException(e);","lastModifiedDate":"2023-09-09"},{"lineNumber":51,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":52,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":53,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":54,"author":{"gitId":"ChangruHenryQian"},"content":" public boolean isEnd() {","lastModifiedDate":"2023-09-09"},{"lineNumber":55,"author":{"gitId":"ChangruHenryQian"},"content":" return this.isEnd;","lastModifiedDate":"2023-09-09"},{"lineNumber":56,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":57,"author":{"gitId":"ChangruHenryQian"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"ChangruHenryQian":57}},{"path":"src/main/java/duke/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ChangruHenryQian"},"content":"package duke;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"ChangruHenryQian"},"content":"import java.io.File;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"ChangruHenryQian"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"ChangruHenryQian"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"ChangruHenryQian"},"content":"import java.util.Locale;","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"ChangruHenryQian"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"ChangruHenryQian"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"ChangruHenryQian"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"ChangruHenryQian"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"ChangruHenryQian"},"content":"public class Storage {","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"ChangruHenryQian"},"content":" private final String filePath;","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"ChangruHenryQian"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"ChangruHenryQian"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"ChangruHenryQian"},"content":" public ArrayList\u003cTask\u003e load() throws IOException {","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"ChangruHenryQian"},"content":" File dir \u003d new File(\"./data\");","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"ChangruHenryQian"},"content":" if (!dir.exists()) {","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"ChangruHenryQian"},"content":" dir.mkdir();","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"ChangruHenryQian"},"content":" File f \u003d new File(filePath);","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"ChangruHenryQian"},"content":" f.createNewFile();","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"ChangruHenryQian"},"content":" Scanner s \u003d new Scanner(f);","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"ChangruHenryQian"},"content":" ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"ChangruHenryQian"},"content":" while (s.hasNext()) {","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"ChangruHenryQian"},"content":" tasks.add(addTask(s.nextLine()));","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"ChangruHenryQian"},"content":" return tasks;","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"ChangruHenryQian"},"content":" private Task addTask(String input) {","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"ChangruHenryQian"},"content":" String taskType \u003d input.split(\" \\\\| \")[0];","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"ChangruHenryQian"},"content":" boolean isComplete \u003d input.split(\" \\\\| \")[1].equals(\"1\");","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"ChangruHenryQian"},"content":" String description \u003d input.split(\" \\\\| \")[2];","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"ChangruHenryQian"},"content":" if (taskType.equals(\"T\")) {","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"ChangruHenryQian"},"content":" return new ToDo(description, isComplete);","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"ChangruHenryQian"},"content":" } else if (taskType.equals(\"D\")) {","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"ChangruHenryQian"},"content":" LocalDate d \u003d LocalDate.parse(input.split(\" \\\\| \")[3], DateTimeFormatter.ofPattern(\"MMM dd yyyy\", Locale.ENGLISH));","lastModifiedDate":"2023-09-09"},{"lineNumber":44,"author":{"gitId":"ChangruHenryQian"},"content":" return new Deadline(description, isComplete, d);","lastModifiedDate":"2023-09-09"},{"lineNumber":45,"author":{"gitId":"ChangruHenryQian"},"content":" } else {","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"ChangruHenryQian"},"content":" LocalDate start \u003d LocalDate.parse(input.split(\" \\\\| \")[3], DateTimeFormatter.ofPattern(\"MMM dd yyyy\", Locale.ENGLISH));","lastModifiedDate":"2023-09-09"},{"lineNumber":47,"author":{"gitId":"ChangruHenryQian"},"content":" LocalDate end \u003d LocalDate.parse(input.split(\" \\\\| \")[4], DateTimeFormatter.ofPattern(\"MMM dd yyyy\", Locale.ENGLISH));","lastModifiedDate":"2023-09-09"},{"lineNumber":48,"author":{"gitId":"ChangruHenryQian"},"content":" return new Event(description, isComplete, start, end);","lastModifiedDate":"2023-09-09"},{"lineNumber":49,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"ChangruHenryQian"},"content":" public void addOneLineToFile(ArrayList\u003cTask\u003e list) throws DukeException {","lastModifiedDate":"2023-09-09"},{"lineNumber":54,"author":{"gitId":"ChangruHenryQian"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"ChangruHenryQian"},"content":" FileWriter fw \u003d new FileWriter(filePath, true);","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"ChangruHenryQian"},"content":" if (list.size() \u003d\u003d 1) {","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"ChangruHenryQian"},"content":" fw.write(list.get(0).toTxt());","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"ChangruHenryQian"},"content":" } else {","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"ChangruHenryQian"},"content":" fw.write(\"\\n\" + list.get(list.size() - 1).toTxt());","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"ChangruHenryQian"},"content":" fw.close();","lastModifiedDate":"2023-09-05"},{"lineNumber":62,"author":{"gitId":"ChangruHenryQian"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":63,"author":{"gitId":"ChangruHenryQian"},"content":" throw new DukeException(\"Unable to write to file.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":64,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":65,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":66,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":67,"author":{"gitId":"ChangruHenryQian"},"content":" public void rewriteFile(ArrayList\u003cTask\u003e list) throws DukeException {","lastModifiedDate":"2023-09-05"},{"lineNumber":68,"author":{"gitId":"ChangruHenryQian"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":69,"author":{"gitId":"ChangruHenryQian"},"content":" FileWriter fw \u003d new FileWriter(filePath);","lastModifiedDate":"2023-09-05"},{"lineNumber":70,"author":{"gitId":"ChangruHenryQian"},"content":" for (int i \u003d 0; i \u003c list.size(); i++) {","lastModifiedDate":"2023-09-05"},{"lineNumber":71,"author":{"gitId":"ChangruHenryQian"},"content":" if (i \u003d\u003d list.size() - 1) {","lastModifiedDate":"2023-09-05"},{"lineNumber":72,"author":{"gitId":"ChangruHenryQian"},"content":" fw.write(list.get(i).toTxt());","lastModifiedDate":"2023-09-05"},{"lineNumber":73,"author":{"gitId":"ChangruHenryQian"},"content":" } else {","lastModifiedDate":"2023-09-05"},{"lineNumber":74,"author":{"gitId":"ChangruHenryQian"},"content":" fw.write(list.get(i).toTxt() + \"\\n\");","lastModifiedDate":"2023-09-05"},{"lineNumber":75,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":76,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":77,"author":{"gitId":"ChangruHenryQian"},"content":" fw.close();","lastModifiedDate":"2023-09-05"},{"lineNumber":78,"author":{"gitId":"ChangruHenryQian"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":79,"author":{"gitId":"ChangruHenryQian"},"content":" throw new DukeException(\"Unable to write to file.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":80,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":81,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":82,"author":{"gitId":"ChangruHenryQian"},"content":"}","lastModifiedDate":"2023-09-05"},{"lineNumber":83,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"ChangruHenryQian":83}},{"path":"src/main/java/duke/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ChangruHenryQian"},"content":"package duke;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"ChangruHenryQian"},"content":"public class Task {","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"ChangruHenryQian"},"content":" protected String description;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"ChangruHenryQian"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"ChangruHenryQian"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"ChangruHenryQian"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"ChangruHenryQian"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"ChangruHenryQian"},"content":" public Task(String description, boolean isDone) {","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"ChangruHenryQian"},"content":" this.description \u003d description;","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"ChangruHenryQian"},"content":" this.isDone \u003d isDone;","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"ChangruHenryQian"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"ChangruHenryQian"},"content":" return (isDone ? \"X\" : \" \"); // mark done task with X","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"ChangruHenryQian"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"ChangruHenryQian"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"ChangruHenryQian"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"ChangruHenryQian"},"content":" public String toString() {","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"ChangruHenryQian"},"content":" return \"[\" + this.getStatusIcon() + \"] \" + this.description;","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"ChangruHenryQian"},"content":" public String toTxt() {","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"ChangruHenryQian"},"content":" return (this.isDone ? \"1\" : \"0\") + \" | \" + this.description;","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"ChangruHenryQian"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"ChangruHenryQian":34}},{"path":"src/main/java/duke/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ChangruHenryQian"},"content":"package duke;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"ChangruHenryQian"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"ChangruHenryQian"},"content":"public class TaskList {","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"ChangruHenryQian"},"content":" protected ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"ChangruHenryQian"},"content":" private Storage storage;","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"ChangruHenryQian"},"content":" public TaskList(Storage storage) {","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"ChangruHenryQian"},"content":" this.tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"ChangruHenryQian"},"content":" this.storage \u003d storage;","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"ChangruHenryQian"},"content":" public TaskList(ArrayList\u003cTask\u003e tasks, Storage storage) {","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"ChangruHenryQian"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"ChangruHenryQian"},"content":" this.storage \u003d storage;","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"ChangruHenryQian"},"content":" public void listTasks() {","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"ChangruHenryQian"},"content":" Ui.listTasks(this.tasks);","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"ChangruHenryQian"},"content":" public void addTask(Task t) {","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"ChangruHenryQian"},"content":" this.tasks.add(t);","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"ChangruHenryQian"},"content":" Ui.addTask(t, this.tasks);","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"ChangruHenryQian"},"content":" this.storage.addOneLineToFile(this.tasks);","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"ChangruHenryQian"},"content":" public void deleteTask(int num) {","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"ChangruHenryQian"},"content":" Task re \u003d tasks.remove(num);","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"ChangruHenryQian"},"content":" this.storage.rewriteFile(tasks);","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"ChangruHenryQian"},"content":" Ui.deleteTask(re, tasks);","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":35,"author":{"gitId":"ChangruHenryQian"},"content":" public void markTask(int num) {","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"ChangruHenryQian"},"content":" Task t \u003d tasks.get(num);","lastModifiedDate":"2023-09-09"},{"lineNumber":37,"author":{"gitId":"ChangruHenryQian"},"content":" t.markAsDone();","lastModifiedDate":"2023-09-09"},{"lineNumber":38,"author":{"gitId":"ChangruHenryQian"},"content":" Ui.markTask(t);","lastModifiedDate":"2023-09-09"},{"lineNumber":39,"author":{"gitId":"ChangruHenryQian"},"content":" this.storage.rewriteFile(tasks);","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":41,"author":{"gitId":"ChangruHenryQian"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"ChangruHenryQian":41}},{"path":"src/main/java/duke/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ChangruHenryQian"},"content":"package duke;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"ChangruHenryQian"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"ChangruHenryQian"},"content":" public ToDo(String description) {","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"ChangruHenryQian"},"content":" super(description);","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"ChangruHenryQian"},"content":" public ToDo(String description, boolean isDone) {","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"ChangruHenryQian"},"content":" super(description, isDone);","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"ChangruHenryQian"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"ChangruHenryQian"},"content":" public String toString() {","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"ChangruHenryQian"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"ChangruHenryQian"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"ChangruHenryQian"},"content":" public String toTxt() {","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"ChangruHenryQian"},"content":" return \"T | \" + super.toTxt();","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"ChangruHenryQian"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"ChangruHenryQian":21}},{"path":"src/main/java/duke/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ChangruHenryQian"},"content":"package duke;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"ChangruHenryQian"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"ChangruHenryQian"},"content":"public class Ui {","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"ChangruHenryQian"},"content":" private static void printSeparationLine() {","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"ChangruHenryQian"},"content":" System.out.println(\"____________________________________________________________\");","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"ChangruHenryQian"},"content":" public static void welcomeMessage() {","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"ChangruHenryQian"},"content":" Ui.printSeparationLine();","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"ChangruHenryQian"},"content":" System.out.println(\" Hello! I\u0027m Jarvis\");","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"ChangruHenryQian"},"content":" System.out.println(\" What can I do for you?\");","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"ChangruHenryQian"},"content":" Ui.printSeparationLine();","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"ChangruHenryQian"},"content":" public static void listTasks(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"ChangruHenryQian"},"content":" Ui.printSeparationLine();","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"ChangruHenryQian"},"content":" System.out.println(\" Here are the tasks in your list:\");","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"ChangruHenryQian"},"content":" int counter \u003d 0;","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"ChangruHenryQian"},"content":" while (counter !\u003d tasks.size()) {","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"ChangruHenryQian"},"content":" counter++;","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"ChangruHenryQian"},"content":" System.out.println(\" \" + counter + \".\" + tasks.get(counter - 1).toString());","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"ChangruHenryQian"},"content":" Ui.printSeparationLine();","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"ChangruHenryQian"},"content":" public static void markTask(Task t) {","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"ChangruHenryQian"},"content":" Ui.printSeparationLine();","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"ChangruHenryQian"},"content":" System.out.println(\" Nice! I\u0027ve marked this task as done:\");","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"ChangruHenryQian"},"content":" System.out.println(\" \" + t.toString());","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"ChangruHenryQian"},"content":" Ui.printSeparationLine();","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":35,"author":{"gitId":"ChangruHenryQian"},"content":" public static void addTask(Task t, ArrayList\u003cTask\u003e taskList) {","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"ChangruHenryQian"},"content":" Ui.printSeparationLine();","lastModifiedDate":"2023-09-09"},{"lineNumber":37,"author":{"gitId":"ChangruHenryQian"},"content":" System.out.println(\" Got it. I\u0027ve added this task:\");","lastModifiedDate":"2023-09-09"},{"lineNumber":38,"author":{"gitId":"ChangruHenryQian"},"content":" System.out.println(\" \" + t.toString());","lastModifiedDate":"2023-09-09"},{"lineNumber":39,"author":{"gitId":"ChangruHenryQian"},"content":" System.out.println(\" Now you have \" + taskList.size() + \" tasks in the list.\");","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"ChangruHenryQian"},"content":" Ui.printSeparationLine();","lastModifiedDate":"2023-09-09"},{"lineNumber":41,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":42,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":43,"author":{"gitId":"ChangruHenryQian"},"content":" public static void deleteTask(Task t, ArrayList\u003cTask\u003e taskList) {","lastModifiedDate":"2023-09-09"},{"lineNumber":44,"author":{"gitId":"ChangruHenryQian"},"content":" Ui.printSeparationLine();","lastModifiedDate":"2023-09-09"},{"lineNumber":45,"author":{"gitId":"ChangruHenryQian"},"content":" System.out.println(\" Noted. I\u0027ve removed this task:\");","lastModifiedDate":"2023-09-09"},{"lineNumber":46,"author":{"gitId":"ChangruHenryQian"},"content":" System.out.println(\" \" + t.toString());","lastModifiedDate":"2023-09-09"},{"lineNumber":47,"author":{"gitId":"ChangruHenryQian"},"content":" System.out.println(\" Now you have \" + taskList.size() + \" tasks in the list.\");","lastModifiedDate":"2023-09-09"},{"lineNumber":48,"author":{"gitId":"ChangruHenryQian"},"content":" Ui.printSeparationLine();","lastModifiedDate":"2023-09-09"},{"lineNumber":49,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":50,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":51,"author":{"gitId":"ChangruHenryQian"},"content":" public static void printException(DukeException e) {","lastModifiedDate":"2023-09-09"},{"lineNumber":52,"author":{"gitId":"ChangruHenryQian"},"content":" Ui.printSeparationLine();","lastModifiedDate":"2023-09-09"},{"lineNumber":53,"author":{"gitId":"ChangruHenryQian"},"content":" System.out.println(\" \" + e.getMessage());","lastModifiedDate":"2023-09-09"},{"lineNumber":54,"author":{"gitId":"ChangruHenryQian"},"content":" Ui.printSeparationLine();","lastModifiedDate":"2023-09-09"},{"lineNumber":55,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":56,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":57,"author":{"gitId":"ChangruHenryQian"},"content":" public static void farewellMessage() {","lastModifiedDate":"2023-09-09"},{"lineNumber":58,"author":{"gitId":"ChangruHenryQian"},"content":" Ui.printSeparationLine();","lastModifiedDate":"2023-09-09"},{"lineNumber":59,"author":{"gitId":"ChangruHenryQian"},"content":" System.out.println(\" Bye. Hope to see you again soon!\");","lastModifiedDate":"2023-09-09"},{"lineNumber":60,"author":{"gitId":"ChangruHenryQian"},"content":" Ui.printSeparationLine();","lastModifiedDate":"2023-09-09"},{"lineNumber":61,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":62,"author":{"gitId":"ChangruHenryQian"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"ChangruHenryQian":62}},{"path":"src/test/java/duke/TaskListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ChangruHenryQian"},"content":"package duke;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"ChangruHenryQian"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"ChangruHenryQian"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"ChangruHenryQian"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"ChangruHenryQian"},"content":"public class TaskListTest {","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"ChangruHenryQian"},"content":" @Test","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"ChangruHenryQian"},"content":" public void addTask() {","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"ChangruHenryQian"},"content":" Task t \u003d new Task(\"test\");","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"ChangruHenryQian"},"content":" TaskList tl \u003d new TaskList(new ArrayList\u003c\u003e(), new Storage(\"data/tasks.txt\"));","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"ChangruHenryQian"},"content":" tl.addTask(t);","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"ChangruHenryQian"},"content":" assertEquals(t, tl.tasks.get(tl.tasks.size() - 1));","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"ChangruHenryQian"},"content":"}","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"ChangruHenryQian":17}},{"path":"src/test/java/duke/TaskTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ChangruHenryQian"},"content":"package duke;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"ChangruHenryQian"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"ChangruHenryQian"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"ChangruHenryQian"},"content":"public class TaskTest {","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"ChangruHenryQian"},"content":" @Test","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"ChangruHenryQian"},"content":" public void markAsDone() {","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"ChangruHenryQian"},"content":" Task t \u003d new Task(\"test\", false);","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"ChangruHenryQian"},"content":" t.markAsDone();","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"ChangruHenryQian"},"content":" assertEquals(true, t.isDone);","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"ChangruHenryQian"},"content":"}","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"ChangruHenryQian":14}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"ChangruHenryQian"},"content":"todo finish homework","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"ChangruHenryQian"},"content":"event class /from 8 am /to 10 am","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"ChangruHenryQian"},"content":"deadline buy lunch /by noon","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"ChangruHenryQian"},"content":"list","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"ChangruHenryQian"},"content":"mark 1","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"ChangruHenryQian"},"content":"bye","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"ChangruHenryQian":6}}] +[{"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":"ChangruHenryQian"},"content":" mainClass.set(\"duke.Duke\")","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"ChangruHenryQian"},"content":" archiveFileName \u003d \u0027duke.jar\u0027","lastModifiedDate":"2023-09-09"},{"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"},{"lineNumber":44,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":45,"author":{"gitId":"ChangruHenryQian"},"content":"mainClassName \u003d \"duke.Duke\"","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"-":41,"ChangruHenryQian":4}},{"path":"data/tasks.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"ChangruHenryQian"},"content":"0 | test0 | test0 | test","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"ChangruHenryQian":1}},{"path":"src/main/java/duke/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ChangruHenryQian"},"content":"package duke;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"ChangruHenryQian"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"ChangruHenryQian"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"ChangruHenryQian"},"content":"import java.util.Locale;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"ChangruHenryQian"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"ChangruHenryQian"},"content":" private LocalDate by;","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"ChangruHenryQian"},"content":" public Deadline(String description, LocalDate by) {","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"ChangruHenryQian"},"content":" super(description);","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"ChangruHenryQian"},"content":" this.by \u003d by;","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"ChangruHenryQian"},"content":" public Deadline(String description, boolean isDone, LocalDate by) {","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"ChangruHenryQian"},"content":" super(description, isDone);","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"ChangruHenryQian"},"content":" this.by \u003d by;","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"ChangruHenryQian"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"ChangruHenryQian"},"content":" public String toString() {","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"ChangruHenryQian"},"content":" return \"[D]\" + super.toString() + \" (by: \"","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"ChangruHenryQian"},"content":" + this.by.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy\", Locale.ENGLISH)) + \")\";","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"ChangruHenryQian"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"ChangruHenryQian"},"content":" public String toTxt() {","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"ChangruHenryQian"},"content":" return \"D | \" + super.toTxt()","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"ChangruHenryQian"},"content":" + \" | \" + this.by.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy\", Locale.ENGLISH));","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"ChangruHenryQian"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"ChangruHenryQian":30}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ChangruHenryQian"},"content":"package duke;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"ChangruHenryQian"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"ChangruHenryQian"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"ChangruHenryQian"},"content":"public class Duke {","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"ChangruHenryQian"},"content":" private Storage storage;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"ChangruHenryQian"},"content":" private TaskList tasks;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"ChangruHenryQian"},"content":" private Ui ui;","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"ChangruHenryQian"},"content":" public Duke(String filePath) {","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"ChangruHenryQian"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"ChangruHenryQian"},"content":" storage \u003d new Storage(filePath);","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"ChangruHenryQian"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"ChangruHenryQian"},"content":" tasks \u003d new TaskList(storage.load(), storage);","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"ChangruHenryQian"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"ChangruHenryQian"},"content":" ui.printException(e);","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"ChangruHenryQian"},"content":" tasks \u003d new TaskList(storage);","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"ChangruHenryQian"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"ChangruHenryQian"},"content":" ui.printException(new DukeException(\"Unable to find storage file.\"));","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"ChangruHenryQian"},"content":" tasks \u003d new TaskList(storage);","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"ChangruHenryQian"},"content":" public void run() {","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"ChangruHenryQian"},"content":" Ui.welcomeMessage();","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"ChangruHenryQian"},"content":" Scanner userInput \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"ChangruHenryQian"},"content":" while (true) {","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"ChangruHenryQian"},"content":" String command \u003d userInput.nextLine();","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"ChangruHenryQian"},"content":" Parser p \u003d new Parser(command, this.storage, this.tasks);","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"ChangruHenryQian"},"content":" p.parse();","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"ChangruHenryQian"},"content":" if (p.isEnd()) {","lastModifiedDate":"2023-09-09"},{"lineNumber":35,"author":{"gitId":"ChangruHenryQian"},"content":" break;","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"ChangruHenryQian"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-09"},{"lineNumber":41,"author":{"gitId":"ChangruHenryQian"},"content":" new Duke(\"data/tasks.txt\").run();","lastModifiedDate":"2023-09-09"},{"lineNumber":42,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"-":1,"ChangruHenryQian":42}},{"path":"src/main/java/duke/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ChangruHenryQian"},"content":"package duke;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"ChangruHenryQian"},"content":"public class DukeException extends RuntimeException{","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"ChangruHenryQian"},"content":" public DukeException(String message) {","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"ChangruHenryQian"},"content":" super(message);","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"ChangruHenryQian"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"ChangruHenryQian":7}},{"path":"src/main/java/duke/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ChangruHenryQian"},"content":"package duke;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"ChangruHenryQian"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"ChangruHenryQian"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"ChangruHenryQian"},"content":"import java.util.Locale;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"ChangruHenryQian"},"content":"public class Event extends Task{","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"ChangruHenryQian"},"content":" private LocalDate startTime;","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"ChangruHenryQian"},"content":" private LocalDate endTime;","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"ChangruHenryQian"},"content":" public Event(String description, LocalDate startTime, LocalDate endTime) {","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"ChangruHenryQian"},"content":" super(description);","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"ChangruHenryQian"},"content":" this.startTime \u003d startTime;","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"ChangruHenryQian"},"content":" this.endTime \u003d endTime;","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"ChangruHenryQian"},"content":" public Event(String description, boolean isDone, LocalDate startTime, LocalDate endTime) {","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"ChangruHenryQian"},"content":" super(description, isDone);","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"ChangruHenryQian"},"content":" this.startTime \u003d startTime;","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"ChangruHenryQian"},"content":" this.endTime \u003d endTime;","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"ChangruHenryQian"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"ChangruHenryQian"},"content":" public String toString() {","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"ChangruHenryQian"},"content":" return \"[E]\" + super.toString() + \" (from: \" + startTime.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy\", Locale.ENGLISH))","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"ChangruHenryQian"},"content":" + \" to: \" + endTime.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy\", Locale.ENGLISH)) + \")\";","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"ChangruHenryQian"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"ChangruHenryQian"},"content":" public String toTxt() {","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"ChangruHenryQian"},"content":" return \"E | \" + super.toTxt() + \" | \" + this.startTime.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy\", Locale.ENGLISH))","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"ChangruHenryQian"},"content":" + \" | \" + this.endTime.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy\", Locale.ENGLISH));","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"ChangruHenryQian"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"ChangruHenryQian":33}},{"path":"src/main/java/duke/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ChangruHenryQian"},"content":"package duke;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"ChangruHenryQian"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"ChangruHenryQian"},"content":"public class Parser {","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"ChangruHenryQian"},"content":" private String command;","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"ChangruHenryQian"},"content":" private Storage storage;","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"ChangruHenryQian"},"content":" private TaskList taskList;","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"ChangruHenryQian"},"content":" private boolean isEnd \u003d false;","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"ChangruHenryQian"},"content":" public Parser(String command, Storage storage, TaskList taskList) {","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"ChangruHenryQian"},"content":" this.command \u003d command;","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"ChangruHenryQian"},"content":" this.storage \u003d storage;","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"ChangruHenryQian"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"ChangruHenryQian"},"content":" public void parse() {","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"ChangruHenryQian"},"content":" try{","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"ChangruHenryQian"},"content":" if (command.startsWith(\"list\")) {","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"ChangruHenryQian"},"content":" this.taskList.listTasks();","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"ChangruHenryQian"},"content":" } else if (command.startsWith(\"mark\")) {","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"ChangruHenryQian"},"content":" this.taskList.markTask(Integer.valueOf(command.split(\" \")[1]) - 1);","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"ChangruHenryQian"},"content":" } else if (command.startsWith(\"todo\")) {","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"ChangruHenryQian"},"content":" if (command.split(\" \", 2).length \u003d\u003d 1) {","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"ChangruHenryQian"},"content":" throw new DukeException(\" OOPS!!! The description of a todo cannot be empty.\");","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"ChangruHenryQian"},"content":" ToDo newToDo \u003d new ToDo(command.split(\" \", 2)[1]);","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"ChangruHenryQian"},"content":" this.taskList.addTask(newToDo);","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"ChangruHenryQian"},"content":" } else if (command.startsWith(\"deadline\")) {","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"ChangruHenryQian"},"content":" LocalDate deadline \u003d LocalDate.parse(command.split(\" /by \", 2)[1]);","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"ChangruHenryQian"},"content":" String name \u003d command.split(\" /by \", 2)[0].split(\" \", 2)[1];","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"ChangruHenryQian"},"content":" Deadline newDeadline \u003d new Deadline(name, deadline);","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"ChangruHenryQian"},"content":" this.taskList.addTask(newDeadline);","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"ChangruHenryQian"},"content":" } else if (command.startsWith(\"event\")) {","lastModifiedDate":"2023-09-09"},{"lineNumber":35,"author":{"gitId":"ChangruHenryQian"},"content":" LocalDate startTime \u003d LocalDate.parse(command.split(\" /from \", 2)[1]","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"ChangruHenryQian"},"content":" .split(\" /to \", 2)[0]);","lastModifiedDate":"2023-09-09"},{"lineNumber":37,"author":{"gitId":"ChangruHenryQian"},"content":" LocalDate endTime \u003d LocalDate.parse(command.split(\" /to \", 2)[1]);","lastModifiedDate":"2023-09-09"},{"lineNumber":38,"author":{"gitId":"ChangruHenryQian"},"content":" String name \u003d command.split(\" /from \", 2)[0].split(\" \", 2)[1];","lastModifiedDate":"2023-09-09"},{"lineNumber":39,"author":{"gitId":"ChangruHenryQian"},"content":" Event newEvent \u003d new Event(name, startTime, endTime);","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"ChangruHenryQian"},"content":" this.taskList.addTask(newEvent);","lastModifiedDate":"2023-09-09"},{"lineNumber":41,"author":{"gitId":"ChangruHenryQian"},"content":" } else if (command.startsWith(\"delete\")) {","lastModifiedDate":"2023-09-09"},{"lineNumber":42,"author":{"gitId":"ChangruHenryQian"},"content":" this.taskList.deleteTask(Integer.valueOf(command.split(\" \")[1]) - 1);","lastModifiedDate":"2023-09-09"},{"lineNumber":43,"author":{"gitId":"ChangruHenryQian"},"content":" } else if (command.startsWith(\"bye\")) {","lastModifiedDate":"2023-09-09"},{"lineNumber":44,"author":{"gitId":"ChangruHenryQian"},"content":" this.isEnd \u003d true;","lastModifiedDate":"2023-09-09"},{"lineNumber":45,"author":{"gitId":"ChangruHenryQian"},"content":" Ui.farewellMessage();","lastModifiedDate":"2023-09-09"},{"lineNumber":46,"author":{"gitId":"ChangruHenryQian"},"content":" } else {","lastModifiedDate":"2023-09-09"},{"lineNumber":47,"author":{"gitId":"ChangruHenryQian"},"content":" throw new DukeException(\" OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-09-09"},{"lineNumber":48,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":49,"author":{"gitId":"ChangruHenryQian"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-09"},{"lineNumber":50,"author":{"gitId":"ChangruHenryQian"},"content":" Ui.printException(e);","lastModifiedDate":"2023-09-09"},{"lineNumber":51,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":52,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":53,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":54,"author":{"gitId":"ChangruHenryQian"},"content":" public boolean isEnd() {","lastModifiedDate":"2023-09-09"},{"lineNumber":55,"author":{"gitId":"ChangruHenryQian"},"content":" return this.isEnd;","lastModifiedDate":"2023-09-09"},{"lineNumber":56,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":57,"author":{"gitId":"ChangruHenryQian"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"ChangruHenryQian":57}},{"path":"src/main/java/duke/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ChangruHenryQian"},"content":"package duke;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"ChangruHenryQian"},"content":"import java.io.File;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"ChangruHenryQian"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"ChangruHenryQian"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"ChangruHenryQian"},"content":"import java.util.Locale;","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"ChangruHenryQian"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"ChangruHenryQian"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"ChangruHenryQian"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"ChangruHenryQian"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"ChangruHenryQian"},"content":"public class Storage {","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"ChangruHenryQian"},"content":" private final String filePath;","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"ChangruHenryQian"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"ChangruHenryQian"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"ChangruHenryQian"},"content":" public ArrayList\u003cTask\u003e load() throws IOException {","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"ChangruHenryQian"},"content":" File dir \u003d new File(\"./data\");","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"ChangruHenryQian"},"content":" if (!dir.exists()) {","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"ChangruHenryQian"},"content":" dir.mkdir();","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"ChangruHenryQian"},"content":" File f \u003d new File(filePath);","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"ChangruHenryQian"},"content":" f.createNewFile();","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"ChangruHenryQian"},"content":" Scanner s \u003d new Scanner(f);","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"ChangruHenryQian"},"content":" ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"ChangruHenryQian"},"content":" while (s.hasNext()) {","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"ChangruHenryQian"},"content":" tasks.add(addTask(s.nextLine()));","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"ChangruHenryQian"},"content":" return tasks;","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"ChangruHenryQian"},"content":" private Task addTask(String input) {","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"ChangruHenryQian"},"content":" String taskType \u003d input.split(\" \\\\| \")[0];","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"ChangruHenryQian"},"content":" boolean isComplete \u003d input.split(\" \\\\| \")[1].equals(\"1\");","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"ChangruHenryQian"},"content":" String description \u003d input.split(\" \\\\| \")[2];","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"ChangruHenryQian"},"content":" if (taskType.equals(\"T\")) {","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"ChangruHenryQian"},"content":" return new ToDo(description, isComplete);","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"ChangruHenryQian"},"content":" } else if (taskType.equals(\"D\")) {","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"ChangruHenryQian"},"content":" LocalDate d \u003d LocalDate.parse(input.split(\" \\\\| \")[3], DateTimeFormatter.ofPattern(\"MMM dd yyyy\", Locale.ENGLISH));","lastModifiedDate":"2023-09-09"},{"lineNumber":44,"author":{"gitId":"ChangruHenryQian"},"content":" return new Deadline(description, isComplete, d);","lastModifiedDate":"2023-09-09"},{"lineNumber":45,"author":{"gitId":"ChangruHenryQian"},"content":" } else {","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"ChangruHenryQian"},"content":" LocalDate start \u003d LocalDate.parse(input.split(\" \\\\| \")[3], DateTimeFormatter.ofPattern(\"MMM dd yyyy\", Locale.ENGLISH));","lastModifiedDate":"2023-09-09"},{"lineNumber":47,"author":{"gitId":"ChangruHenryQian"},"content":" LocalDate end \u003d LocalDate.parse(input.split(\" \\\\| \")[4], DateTimeFormatter.ofPattern(\"MMM dd yyyy\", Locale.ENGLISH));","lastModifiedDate":"2023-09-09"},{"lineNumber":48,"author":{"gitId":"ChangruHenryQian"},"content":" return new Event(description, isComplete, start, end);","lastModifiedDate":"2023-09-09"},{"lineNumber":49,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"ChangruHenryQian"},"content":" public void addOneLineToFile(ArrayList\u003cTask\u003e list) throws DukeException {","lastModifiedDate":"2023-09-09"},{"lineNumber":54,"author":{"gitId":"ChangruHenryQian"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"ChangruHenryQian"},"content":" FileWriter fw \u003d new FileWriter(filePath, true);","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"ChangruHenryQian"},"content":" if (list.size() \u003d\u003d 1) {","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"ChangruHenryQian"},"content":" fw.write(list.get(0).toTxt());","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"ChangruHenryQian"},"content":" } else {","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"ChangruHenryQian"},"content":" fw.write(\"\\n\" + list.get(list.size() - 1).toTxt());","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"ChangruHenryQian"},"content":" fw.close();","lastModifiedDate":"2023-09-05"},{"lineNumber":62,"author":{"gitId":"ChangruHenryQian"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":63,"author":{"gitId":"ChangruHenryQian"},"content":" throw new DukeException(\"Unable to write to file.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":64,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":65,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":66,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":67,"author":{"gitId":"ChangruHenryQian"},"content":" public void rewriteFile(ArrayList\u003cTask\u003e list) throws DukeException {","lastModifiedDate":"2023-09-05"},{"lineNumber":68,"author":{"gitId":"ChangruHenryQian"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":69,"author":{"gitId":"ChangruHenryQian"},"content":" FileWriter fw \u003d new FileWriter(filePath);","lastModifiedDate":"2023-09-05"},{"lineNumber":70,"author":{"gitId":"ChangruHenryQian"},"content":" for (int i \u003d 0; i \u003c list.size(); i++) {","lastModifiedDate":"2023-09-05"},{"lineNumber":71,"author":{"gitId":"ChangruHenryQian"},"content":" if (i \u003d\u003d list.size() - 1) {","lastModifiedDate":"2023-09-05"},{"lineNumber":72,"author":{"gitId":"ChangruHenryQian"},"content":" fw.write(list.get(i).toTxt());","lastModifiedDate":"2023-09-05"},{"lineNumber":73,"author":{"gitId":"ChangruHenryQian"},"content":" } else {","lastModifiedDate":"2023-09-05"},{"lineNumber":74,"author":{"gitId":"ChangruHenryQian"},"content":" fw.write(list.get(i).toTxt() + \"\\n\");","lastModifiedDate":"2023-09-05"},{"lineNumber":75,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":76,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":77,"author":{"gitId":"ChangruHenryQian"},"content":" fw.close();","lastModifiedDate":"2023-09-05"},{"lineNumber":78,"author":{"gitId":"ChangruHenryQian"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":79,"author":{"gitId":"ChangruHenryQian"},"content":" throw new DukeException(\"Unable to write to file.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":80,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":81,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":82,"author":{"gitId":"ChangruHenryQian"},"content":"}","lastModifiedDate":"2023-09-05"},{"lineNumber":83,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"ChangruHenryQian":83}},{"path":"src/main/java/duke/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ChangruHenryQian"},"content":"package duke;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"ChangruHenryQian"},"content":"public class Task {","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"ChangruHenryQian"},"content":" protected String description;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"ChangruHenryQian"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"ChangruHenryQian"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"ChangruHenryQian"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"ChangruHenryQian"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"ChangruHenryQian"},"content":" public Task(String description, boolean isDone) {","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"ChangruHenryQian"},"content":" this.description \u003d description;","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"ChangruHenryQian"},"content":" this.isDone \u003d isDone;","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"ChangruHenryQian"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"ChangruHenryQian"},"content":" return (isDone ? \"X\" : \" \"); // mark done task with X","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"ChangruHenryQian"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"ChangruHenryQian"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"ChangruHenryQian"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"ChangruHenryQian"},"content":" public String toString() {","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"ChangruHenryQian"},"content":" return \"[\" + this.getStatusIcon() + \"] \" + this.description;","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"ChangruHenryQian"},"content":" public String toTxt() {","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"ChangruHenryQian"},"content":" return (this.isDone ? \"1\" : \"0\") + \" | \" + this.description;","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"ChangruHenryQian"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"ChangruHenryQian":34}},{"path":"src/main/java/duke/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ChangruHenryQian"},"content":"package duke;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"ChangruHenryQian"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"ChangruHenryQian"},"content":"public class TaskList {","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"ChangruHenryQian"},"content":" protected ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"ChangruHenryQian"},"content":" private Storage storage;","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"ChangruHenryQian"},"content":" public TaskList(Storage storage) {","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"ChangruHenryQian"},"content":" this.tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"ChangruHenryQian"},"content":" this.storage \u003d storage;","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"ChangruHenryQian"},"content":" public TaskList(ArrayList\u003cTask\u003e tasks, Storage storage) {","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"ChangruHenryQian"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"ChangruHenryQian"},"content":" this.storage \u003d storage;","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"ChangruHenryQian"},"content":" public void listTasks() {","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"ChangruHenryQian"},"content":" Ui.listTasks(this.tasks);","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"ChangruHenryQian"},"content":" public void addTask(Task t) {","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"ChangruHenryQian"},"content":" this.tasks.add(t);","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"ChangruHenryQian"},"content":" Ui.addTask(t, this.tasks);","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"ChangruHenryQian"},"content":" this.storage.addOneLineToFile(this.tasks);","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"ChangruHenryQian"},"content":" public void deleteTask(int num) {","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"ChangruHenryQian"},"content":" Task re \u003d tasks.remove(num);","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"ChangruHenryQian"},"content":" this.storage.rewriteFile(tasks);","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"ChangruHenryQian"},"content":" Ui.deleteTask(re, tasks);","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":35,"author":{"gitId":"ChangruHenryQian"},"content":" public void markTask(int num) {","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"ChangruHenryQian"},"content":" Task t \u003d tasks.get(num);","lastModifiedDate":"2023-09-09"},{"lineNumber":37,"author":{"gitId":"ChangruHenryQian"},"content":" t.markAsDone();","lastModifiedDate":"2023-09-09"},{"lineNumber":38,"author":{"gitId":"ChangruHenryQian"},"content":" Ui.markTask(t);","lastModifiedDate":"2023-09-09"},{"lineNumber":39,"author":{"gitId":"ChangruHenryQian"},"content":" this.storage.rewriteFile(tasks);","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":41,"author":{"gitId":"ChangruHenryQian"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"ChangruHenryQian":41}},{"path":"src/main/java/duke/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ChangruHenryQian"},"content":"package duke;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"ChangruHenryQian"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"ChangruHenryQian"},"content":" public ToDo(String description) {","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"ChangruHenryQian"},"content":" super(description);","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"ChangruHenryQian"},"content":" public ToDo(String description, boolean isDone) {","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"ChangruHenryQian"},"content":" super(description, isDone);","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"ChangruHenryQian"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"ChangruHenryQian"},"content":" public String toString() {","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"ChangruHenryQian"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"ChangruHenryQian"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"ChangruHenryQian"},"content":" public String toTxt() {","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"ChangruHenryQian"},"content":" return \"T | \" + super.toTxt();","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"ChangruHenryQian"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"ChangruHenryQian":21}},{"path":"src/main/java/duke/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ChangruHenryQian"},"content":"package duke;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"ChangruHenryQian"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"ChangruHenryQian"},"content":"public class Ui {","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"ChangruHenryQian"},"content":" private static void printSeparationLine() {","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"ChangruHenryQian"},"content":" System.out.println(\"____________________________________________________________\");","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"ChangruHenryQian"},"content":" public static void welcomeMessage() {","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"ChangruHenryQian"},"content":" Ui.printSeparationLine();","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"ChangruHenryQian"},"content":" System.out.println(\" Hello! I\u0027m Jarvis\");","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"ChangruHenryQian"},"content":" System.out.println(\" What can I do for you?\");","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"ChangruHenryQian"},"content":" Ui.printSeparationLine();","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"ChangruHenryQian"},"content":" public static void listTasks(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"ChangruHenryQian"},"content":" Ui.printSeparationLine();","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"ChangruHenryQian"},"content":" System.out.println(\" Here are the tasks in your list:\");","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"ChangruHenryQian"},"content":" int counter \u003d 0;","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"ChangruHenryQian"},"content":" while (counter !\u003d tasks.size()) {","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"ChangruHenryQian"},"content":" counter++;","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"ChangruHenryQian"},"content":" System.out.println(\" \" + counter + \".\" + tasks.get(counter - 1).toString());","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"ChangruHenryQian"},"content":" Ui.printSeparationLine();","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"ChangruHenryQian"},"content":" public static void markTask(Task t) {","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"ChangruHenryQian"},"content":" Ui.printSeparationLine();","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"ChangruHenryQian"},"content":" System.out.println(\" Nice! I\u0027ve marked this task as done:\");","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"ChangruHenryQian"},"content":" System.out.println(\" \" + t.toString());","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"ChangruHenryQian"},"content":" Ui.printSeparationLine();","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":35,"author":{"gitId":"ChangruHenryQian"},"content":" public static void addTask(Task t, ArrayList\u003cTask\u003e taskList) {","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"ChangruHenryQian"},"content":" Ui.printSeparationLine();","lastModifiedDate":"2023-09-09"},{"lineNumber":37,"author":{"gitId":"ChangruHenryQian"},"content":" System.out.println(\" Got it. I\u0027ve added this task:\");","lastModifiedDate":"2023-09-09"},{"lineNumber":38,"author":{"gitId":"ChangruHenryQian"},"content":" System.out.println(\" \" + t.toString());","lastModifiedDate":"2023-09-09"},{"lineNumber":39,"author":{"gitId":"ChangruHenryQian"},"content":" System.out.println(\" Now you have \" + taskList.size() + \" tasks in the list.\");","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"ChangruHenryQian"},"content":" Ui.printSeparationLine();","lastModifiedDate":"2023-09-09"},{"lineNumber":41,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":42,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":43,"author":{"gitId":"ChangruHenryQian"},"content":" public static void deleteTask(Task t, ArrayList\u003cTask\u003e taskList) {","lastModifiedDate":"2023-09-09"},{"lineNumber":44,"author":{"gitId":"ChangruHenryQian"},"content":" Ui.printSeparationLine();","lastModifiedDate":"2023-09-09"},{"lineNumber":45,"author":{"gitId":"ChangruHenryQian"},"content":" System.out.println(\" Noted. I\u0027ve removed this task:\");","lastModifiedDate":"2023-09-09"},{"lineNumber":46,"author":{"gitId":"ChangruHenryQian"},"content":" System.out.println(\" \" + t.toString());","lastModifiedDate":"2023-09-09"},{"lineNumber":47,"author":{"gitId":"ChangruHenryQian"},"content":" System.out.println(\" Now you have \" + taskList.size() + \" tasks in the list.\");","lastModifiedDate":"2023-09-09"},{"lineNumber":48,"author":{"gitId":"ChangruHenryQian"},"content":" Ui.printSeparationLine();","lastModifiedDate":"2023-09-09"},{"lineNumber":49,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":50,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":51,"author":{"gitId":"ChangruHenryQian"},"content":" public static void printException(DukeException e) {","lastModifiedDate":"2023-09-09"},{"lineNumber":52,"author":{"gitId":"ChangruHenryQian"},"content":" Ui.printSeparationLine();","lastModifiedDate":"2023-09-09"},{"lineNumber":53,"author":{"gitId":"ChangruHenryQian"},"content":" System.out.println(\" \" + e.getMessage());","lastModifiedDate":"2023-09-09"},{"lineNumber":54,"author":{"gitId":"ChangruHenryQian"},"content":" Ui.printSeparationLine();","lastModifiedDate":"2023-09-09"},{"lineNumber":55,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":56,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":57,"author":{"gitId":"ChangruHenryQian"},"content":" public static void farewellMessage() {","lastModifiedDate":"2023-09-09"},{"lineNumber":58,"author":{"gitId":"ChangruHenryQian"},"content":" Ui.printSeparationLine();","lastModifiedDate":"2023-09-09"},{"lineNumber":59,"author":{"gitId":"ChangruHenryQian"},"content":" System.out.println(\" Bye. Hope to see you again soon!\");","lastModifiedDate":"2023-09-09"},{"lineNumber":60,"author":{"gitId":"ChangruHenryQian"},"content":" Ui.printSeparationLine();","lastModifiedDate":"2023-09-09"},{"lineNumber":61,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":62,"author":{"gitId":"ChangruHenryQian"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"ChangruHenryQian":62}},{"path":"src/test/java/duke/TaskListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ChangruHenryQian"},"content":"package duke;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"ChangruHenryQian"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"ChangruHenryQian"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"ChangruHenryQian"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"ChangruHenryQian"},"content":"public class TaskListTest {","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"ChangruHenryQian"},"content":" @Test","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"ChangruHenryQian"},"content":" public void addTask() {","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"ChangruHenryQian"},"content":" Task t \u003d new Task(\"test\");","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"ChangruHenryQian"},"content":" TaskList tl \u003d new TaskList(new ArrayList\u003c\u003e(), new Storage(\"data/tasks.txt\"));","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"ChangruHenryQian"},"content":" tl.addTask(t);","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"ChangruHenryQian"},"content":" assertEquals(t, tl.tasks.get(tl.tasks.size() - 1));","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"ChangruHenryQian"},"content":"}","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"ChangruHenryQian":17}},{"path":"src/test/java/duke/TaskTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ChangruHenryQian"},"content":"package duke;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"ChangruHenryQian"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"ChangruHenryQian"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"ChangruHenryQian"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"ChangruHenryQian"},"content":"public class TaskTest {","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"ChangruHenryQian"},"content":" @Test","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"ChangruHenryQian"},"content":" public void markAsDone() {","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"ChangruHenryQian"},"content":" Task t \u003d new Task(\"test\", false);","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"ChangruHenryQian"},"content":" t.markAsDone();","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"ChangruHenryQian"},"content":" assertEquals(true, t.isDone);","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"ChangruHenryQian"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"ChangruHenryQian"},"content":"}","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"ChangruHenryQian":14}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"ChangruHenryQian"},"content":"todo finish homework","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"ChangruHenryQian"},"content":"event class /from 8 am /to 10 am","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"ChangruHenryQian"},"content":"deadline buy lunch /by noon","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"ChangruHenryQian"},"content":"list","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"ChangruHenryQian"},"content":"mark 1","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"ChangruHenryQian"},"content":"bye","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"ChangruHenryQian":6}}] diff --git a/ChangruHenryQian_ip_master/commits.json b/ChangruHenryQian_ip_master/commits.json index 0d5164e0..2d3d034c 100644 --- a/ChangruHenryQian_ip_master/commits.json +++ b/ChangruHenryQian_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"ChangruHenryQian":[{"date":"2023-08-24","commitResults":[{"hash":"5080e17e62936c1646c62c91e2ea337e3c76d9bc","isMergeCommit":false,"messageTitle":"Finish Level 0. Rename, Greet, Exit.","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":6}}},{"hash":"3d4a50f077fc7964084a065ae0efbb6d815da0dc","isMergeCommit":false,"messageTitle":"Finish Level-1: Echo","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":6}}}]},{"date":"2023-08-26","commitResults":[{"hash":"fe29b0f9781439417b12b42ab86139441d39cc45","isMergeCommit":false,"messageTitle":"Finish Level 2. Add, List","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":26,"deletions":10}}}]},{"date":"2023-08-27","commitResults":[{"hash":"02481a9ba00cfdc8f90f359b070f8eafbafcb2a2","isMergeCommit":false,"messageTitle":"Finish Level 3. Mark as Done","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":39,"deletions":5}}},{"hash":"91639a88821d08153bc2533521617a895d203e25","isMergeCommit":false,"messageTitle":"Finish Level 4. ToDos, Events, Deadlines","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":88,"deletions":27}}},{"hash":"cab0141507b0b629413977d1dc0e0b22eb350f45","isMergeCommit":false,"messageTitle":"Finish A-TextUiTesting","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":6,"deletions":0}}},{"hash":"28266b31eb6565c3a7a61fde318af3c56a6ba61b","isMergeCommit":false,"messageTitle":"Finish Level 5. Handle Errors","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":60,"deletions":48}}},{"hash":"611f1efab640729148e5668f2bc6d184cc9ce542","isMergeCommit":false,"messageTitle":"Finish Level 6. Delete","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":0}}}]},{"date":"2023-09-05","commitResults":[{"hash":"4197612c99bd3dd2588c2f80d9e71e4dc45177ff","isMergeCommit":false,"messageTitle":"Finish Level 7. Save","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":223,"deletions":8}}},{"hash":"c0ea8a2eeb3f00f55fbaff5c811b5568633d2a19","isMergeCommit":false,"messageTitle":"Update data/duke.txt","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0}}},{"hash":"bf86dc175311f8f8180a484cd5c166ce8a1db59a","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-09","commitResults":[{"hash":"992ec015c9add6f24fd58e981287475b91b1a865","isMergeCommit":false,"messageTitle":"Finish Level 8. Dates and Times","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":2},"java":{"insertions":45,"deletions":20}}},{"hash":"113e1d3d127175987bc093d12121560ee5639c06","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}},{"hash":"1f284c95cb16b525bf60d008b3dba20e4ff919bb","isMergeCommit":false,"messageTitle":"Finish A-MoreOOP: Use More OOP","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":2},"java":{"insertions":167,"deletions":157}}},{"hash":"92e988c3b184a575872228ac9a71adac737b430b","isMergeCommit":false,"messageTitle":"Fix bug on delete command","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":2},"java":{"insertions":1,"deletions":1}}},{"hash":"5c4a3ba069012500896fdecce250a5ad0d20c638","isMergeCommit":false,"messageTitle":"Finish A-Packages: Organize into Packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":11}}},{"hash":"d197fc24b4d3c8555515f61edd21f6e7611d6ac9","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"e450bede93e429bf141ce93c02e8e95118656d03","isMergeCommit":false,"messageTitle":"Finish A-Gradle: Use Gradle","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}},{"hash":"2a0dedd0d1d4e877f6f11c2ab39d141c6d29a2e3","isMergeCommit":false,"messageTitle":"Finish A-JUnit: Add JUnit Tests","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":31,"deletions":3}}}]}]},"authorFileTypeContributionMap":{"ChangruHenryQian":{"java":441,"md":0,"fxml":0,"sh":0,"bat":0,"gradle":1,"txt":7}},"authorContributionVariance":{"ChangruHenryQian":13338.475},"authorDisplayNameMap":{"ChangruHenryQian":"CS2103T-T11-1 QIAN..NGRU"}} +{"authorDailyContributionsMap":{"ChangruHenryQian":[{"date":"2023-08-24","commitResults":[{"hash":"5080e17e62936c1646c62c91e2ea337e3c76d9bc","isMergeCommit":false,"messageTitle":"Finish Level 0. Rename, Greet, Exit.","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":6}}},{"hash":"3d4a50f077fc7964084a065ae0efbb6d815da0dc","isMergeCommit":false,"messageTitle":"Finish Level-1: Echo","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":6}}}]},{"date":"2023-08-26","commitResults":[{"hash":"fe29b0f9781439417b12b42ab86139441d39cc45","isMergeCommit":false,"messageTitle":"Finish Level 2. Add, List","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":26,"deletions":10}}}]},{"date":"2023-08-27","commitResults":[{"hash":"02481a9ba00cfdc8f90f359b070f8eafbafcb2a2","isMergeCommit":false,"messageTitle":"Finish Level 3. Mark as Done","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":39,"deletions":5}}},{"hash":"91639a88821d08153bc2533521617a895d203e25","isMergeCommit":false,"messageTitle":"Finish Level 4. ToDos, Events, Deadlines","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":88,"deletions":27}}},{"hash":"cab0141507b0b629413977d1dc0e0b22eb350f45","isMergeCommit":false,"messageTitle":"Finish A-TextUiTesting","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":6,"deletions":0}}},{"hash":"28266b31eb6565c3a7a61fde318af3c56a6ba61b","isMergeCommit":false,"messageTitle":"Finish Level 5. Handle Errors","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":60,"deletions":48}}},{"hash":"611f1efab640729148e5668f2bc6d184cc9ce542","isMergeCommit":false,"messageTitle":"Finish Level 6. Delete","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":0}}}]},{"date":"2023-09-05","commitResults":[{"hash":"4197612c99bd3dd2588c2f80d9e71e4dc45177ff","isMergeCommit":false,"messageTitle":"Finish Level 7. Save","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":223,"deletions":8}}},{"hash":"c0ea8a2eeb3f00f55fbaff5c811b5568633d2a19","isMergeCommit":false,"messageTitle":"Update data/duke.txt","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0}}},{"hash":"bf86dc175311f8f8180a484cd5c166ce8a1db59a","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-09","commitResults":[{"hash":"992ec015c9add6f24fd58e981287475b91b1a865","isMergeCommit":false,"messageTitle":"Finish Level 8. Dates and Times","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":2},"java":{"insertions":45,"deletions":20}}},{"hash":"113e1d3d127175987bc093d12121560ee5639c06","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}},{"hash":"1f284c95cb16b525bf60d008b3dba20e4ff919bb","isMergeCommit":false,"messageTitle":"Finish A-MoreOOP: Use More OOP","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":2},"java":{"insertions":167,"deletions":157}}},{"hash":"92e988c3b184a575872228ac9a71adac737b430b","isMergeCommit":false,"messageTitle":"Fix bug on delete command","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":2},"java":{"insertions":1,"deletions":1}}},{"hash":"5c4a3ba069012500896fdecce250a5ad0d20c638","isMergeCommit":false,"messageTitle":"Finish A-Packages: Organize into Packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":11}}},{"hash":"d197fc24b4d3c8555515f61edd21f6e7611d6ac9","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"e450bede93e429bf141ce93c02e8e95118656d03","isMergeCommit":false,"messageTitle":"Finish A-Gradle: Use Gradle","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}},{"hash":"2a0dedd0d1d4e877f6f11c2ab39d141c6d29a2e3","isMergeCommit":false,"messageTitle":"Finish A-JUnit: Add JUnit Tests","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":31,"deletions":3}}},{"hash":"8ac539181e47054e3821342b0608faa5b83707ff","isMergeCommit":false,"messageTitle":"Finish A-Jar: Create a JAR File","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":3,"deletions":0}}}]}]},"authorFileTypeContributionMap":{"ChangruHenryQian":{"java":441,"md":0,"fxml":0,"sh":0,"bat":0,"gradle":4,"txt":7}},"authorContributionVariance":{"ChangruHenryQian":13448.927},"authorDisplayNameMap":{"ChangruHenryQian":"CS2103T-T11-1 QIAN..NGRU"}} diff --git a/Chen-Kuei_ip_master/authorship.json b/Chen-Kuei_ip_master/authorship.json index 838e3b05..dc9c718d 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":"-"},"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":"Chen-Kuei"},"content":" mainClass.set(\"duke.Duke\")","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":38,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"Chen-Kuei":1,"-":41}},{"path":"docs/duke.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"Chen-Kuei"},"content":"TODO | read book","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"Chen-Kuei"},"content":"DEADLINE | project | 2022-10-10","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"Chen-Kuei"},"content":"EVENT | meet | 2023-06-12 1400 | 2023-06-12 1600","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"Chen-Kuei":3}},{"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":"import java.util.Locale;","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"Chen-Kuei"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"Chen-Kuei"},"content":" // protected String by;","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"Chen-Kuei"},"content":" private LocalDate deadline;","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"Chen-Kuei"},"content":" public Deadline(String description, String deadlineString) {","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"Chen-Kuei"},"content":" super(description);","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"Chen-Kuei"},"content":" this.deadline \u003d parseDeadline(deadlineString);","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"Chen-Kuei"},"content":" private LocalDate parseDeadline(String deadlineString) {","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"Chen-Kuei"},"content":" try {","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"Chen-Kuei"},"content":" if(!deadlineString.isEmpty()) {","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"Chen-Kuei"},"content":" return LocalDate.parse(deadlineString, DateTimeFormatter.ofPattern(\"yyyy-MM-dd\"));","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"Chen-Kuei"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"Chen-Kuei"},"content":" System.out.println(\"Error parsing date: \" + deadlineString);","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"Chen-Kuei"},"content":" return null;","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"Chen-Kuei"},"content":" private String formatDeadline(LocalDate deadlineDate) {","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"Chen-Kuei"},"content":" if (deadlineDate \u003d\u003d null) {","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"Chen-Kuei"},"content":" return \"Invalid date.\";","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"Chen-Kuei"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"MMM dd yyyy\", Locale.ENGLISH);","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"Chen-Kuei"},"content":" return deadlineDate.format(formatter);","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"Chen-Kuei"},"content":" private String saveFormatDeadline(LocalDate deadlineDate) {","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"Chen-Kuei"},"content":" if (deadlineDate \u003d\u003d null) {","lastModifiedDate":"2023-09-09"},{"lineNumber":35,"author":{"gitId":"Chen-Kuei"},"content":" return \"\";","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":37,"author":{"gitId":"Chen-Kuei"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd\");","lastModifiedDate":"2023-09-09"},{"lineNumber":38,"author":{"gitId":"Chen-Kuei"},"content":" return deadlineDate.format(formatter);","lastModifiedDate":"2023-09-09"},{"lineNumber":39,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"Chen-Kuei"},"content":" @Override","lastModifiedDate":"2023-09-08"},{"lineNumber":41,"author":{"gitId":"Chen-Kuei"},"content":" public String toDataString() {","lastModifiedDate":"2023-09-08"},{"lineNumber":42,"author":{"gitId":"Chen-Kuei"},"content":" return \"DEADLINE | \" + super.toDataString() + \" | \" + saveFormatDeadline(deadline);","lastModifiedDate":"2023-09-09"},{"lineNumber":43,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":44,"author":{"gitId":"Chen-Kuei"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"Chen-Kuei"},"content":" public String toString() {","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"Chen-Kuei"},"content":" return \"[D]\" + super.toString() + \" (by: \" + formatDeadline(deadline) + \")\";","lastModifiedDate":"2023-09-09"},{"lineNumber":47,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"Chen-Kuei"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"Chen-Kuei":48}},{"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 java.io.BufferedReader;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"Chen-Kuei"},"content":"//import java.io.BufferedWriter;","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"Chen-Kuei"},"content":"//import java.io.File;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"Chen-Kuei"},"content":"//import java.io.FileReader;","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"Chen-Kuei"},"content":"//import java.io.FileWriter;","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"Chen-Kuei"},"content":"//import java.io.IOException;","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"Chen-Kuei"},"content":"//import java.util.ArrayList;","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"Chen-Kuei"},"content":"//import java.util.Scanner;","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"Chen-Kuei"},"content":"//","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"Chen-Kuei"},"content":"//public class duke.Duke {","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"Chen-Kuei"},"content":"// private static final int MAX_TASKS \u003d 100;","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"Chen-Kuei"},"content":"// private static ArrayList\u003cduke.Task\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"Chen-Kuei"},"content":"// // private static duke.Task[] tasks \u003d new duke.Task[MAX_TASKS];","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"Chen-Kuei"},"content":"// private static int taskCount\u003d 0;","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"Chen-Kuei"},"content":"// private static final String DATA_FILE_PATH \u003d \"./docs/duke.txt\";","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"Chen-Kuei"},"content":"// public enum TaskType {","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"Chen-Kuei"},"content":"// TODO, DEADLINE, EVENT","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"Chen-Kuei"},"content":"// }","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"Chen-Kuei"},"content":"// public enum TaskStatus {","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"Chen-Kuei"},"content":"// DONE, NOT_DONE","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"Chen-Kuei"},"content":"// }","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"Chen-Kuei"},"content":"// private static void addTask(String userCommand) {","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"Chen-Kuei"},"content":"// if (taskCount \u003c MAX_TASKS) {","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"Chen-Kuei"},"content":"// String[] parts \u003d userCommand.split(\" \", 2);","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"Chen-Kuei"},"content":"// if (parts.length \u003d\u003d 2) {","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"Chen-Kuei"},"content":"// String taskType \u003d parts[0].toLowerCase();","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"Chen-Kuei"},"content":"// String taskDescription \u003d parts[1];","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"Chen-Kuei"},"content":"//","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"Chen-Kuei"},"content":"// switch (taskType) {","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"Chen-Kuei"},"content":"// case \"todo\":","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"Chen-Kuei"},"content":"// tasks.add(new duke.Todo(taskDescription));","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"Chen-Kuei"},"content":"// taskCount++;","lastModifiedDate":"2023-09-09"},{"lineNumber":35,"author":{"gitId":"Chen-Kuei"},"content":"// if (taskCount \u003e 0) {","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"Chen-Kuei"},"content":"// System.out.println(\"Got it. I\u0027ve added this task:\");","lastModifiedDate":"2023-09-09"},{"lineNumber":37,"author":{"gitId":"Chen-Kuei"},"content":"// System.out.println(\" \" + tasks.get(taskCount - 1));","lastModifiedDate":"2023-09-09"},{"lineNumber":38,"author":{"gitId":"Chen-Kuei"},"content":"// System.out.println(\"Now you have \" + taskCount + \" tasks in the list.\");","lastModifiedDate":"2023-09-09"},{"lineNumber":39,"author":{"gitId":"Chen-Kuei"},"content":"// }","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"Chen-Kuei"},"content":"// break;","lastModifiedDate":"2023-09-09"},{"lineNumber":41,"author":{"gitId":"Chen-Kuei"},"content":"// case \"deadline\":","lastModifiedDate":"2023-09-09"},{"lineNumber":42,"author":{"gitId":"Chen-Kuei"},"content":"// String[] deadlineParts \u003d taskDescription.split(\" /by \");","lastModifiedDate":"2023-09-09"},{"lineNumber":43,"author":{"gitId":"Chen-Kuei"},"content":"// if (deadlineParts.length \u003d\u003d 2) {","lastModifiedDate":"2023-09-09"},{"lineNumber":44,"author":{"gitId":"Chen-Kuei"},"content":"// String deadlineTask \u003d deadlineParts[0];","lastModifiedDate":"2023-09-09"},{"lineNumber":45,"author":{"gitId":"Chen-Kuei"},"content":"// String deadlineTime \u003d deadlineParts[1];","lastModifiedDate":"2023-09-09"},{"lineNumber":46,"author":{"gitId":"Chen-Kuei"},"content":"// if (deadlineTask.trim().isEmpty()) {","lastModifiedDate":"2023-09-09"},{"lineNumber":47,"author":{"gitId":"Chen-Kuei"},"content":"// System.out.println(\"What kind of deadline do you have??\");","lastModifiedDate":"2023-09-09"},{"lineNumber":48,"author":{"gitId":"Chen-Kuei"},"content":"// } else if (deadlineTime.trim().isEmpty()) {","lastModifiedDate":"2023-09-09"},{"lineNumber":49,"author":{"gitId":"Chen-Kuei"},"content":"// System.out.println(\"Can you tell me when is your deadline??\");","lastModifiedDate":"2023-09-09"},{"lineNumber":50,"author":{"gitId":"Chen-Kuei"},"content":"// } else {","lastModifiedDate":"2023-09-09"},{"lineNumber":51,"author":{"gitId":"Chen-Kuei"},"content":"// tasks.add(new duke.Deadline(deadlineParts[0], deadlineParts[1]));","lastModifiedDate":"2023-09-09"},{"lineNumber":52,"author":{"gitId":"Chen-Kuei"},"content":"// taskCount++;","lastModifiedDate":"2023-09-09"},{"lineNumber":53,"author":{"gitId":"Chen-Kuei"},"content":"// }","lastModifiedDate":"2023-09-09"},{"lineNumber":54,"author":{"gitId":"Chen-Kuei"},"content":"// if (taskCount \u003e 0) {","lastModifiedDate":"2023-09-09"},{"lineNumber":55,"author":{"gitId":"Chen-Kuei"},"content":"// System.out.println(\"Got it. I\u0027ve added this task:\");","lastModifiedDate":"2023-09-09"},{"lineNumber":56,"author":{"gitId":"Chen-Kuei"},"content":"// System.out.println(\" \" + tasks.get(taskCount - 1));","lastModifiedDate":"2023-09-09"},{"lineNumber":57,"author":{"gitId":"Chen-Kuei"},"content":"// System.out.println(\"Now you have \" + taskCount + \" tasks in the list.\");","lastModifiedDate":"2023-09-09"},{"lineNumber":58,"author":{"gitId":"Chen-Kuei"},"content":"// }","lastModifiedDate":"2023-09-09"},{"lineNumber":59,"author":{"gitId":"Chen-Kuei"},"content":"// } else {","lastModifiedDate":"2023-09-09"},{"lineNumber":60,"author":{"gitId":"Chen-Kuei"},"content":"// System.out.println(\"Invalid deadline format.\");","lastModifiedDate":"2023-09-09"},{"lineNumber":61,"author":{"gitId":"Chen-Kuei"},"content":"// }","lastModifiedDate":"2023-09-09"},{"lineNumber":62,"author":{"gitId":"Chen-Kuei"},"content":"// break;","lastModifiedDate":"2023-09-09"},{"lineNumber":63,"author":{"gitId":"Chen-Kuei"},"content":"// case \"event\":","lastModifiedDate":"2023-09-09"},{"lineNumber":64,"author":{"gitId":"Chen-Kuei"},"content":"// String[] eventParts \u003d taskDescription.split(\" /from | /to \");","lastModifiedDate":"2023-09-09"},{"lineNumber":65,"author":{"gitId":"Chen-Kuei"},"content":"// if (eventParts.length \u003d\u003d 3) {","lastModifiedDate":"2023-09-09"},{"lineNumber":66,"author":{"gitId":"Chen-Kuei"},"content":"// String eventTask \u003d eventParts[0];","lastModifiedDate":"2023-09-09"},{"lineNumber":67,"author":{"gitId":"Chen-Kuei"},"content":"// String eventStartTime \u003d eventParts[1];","lastModifiedDate":"2023-09-09"},{"lineNumber":68,"author":{"gitId":"Chen-Kuei"},"content":"// String eventEndTime \u003d eventParts[2];","lastModifiedDate":"2023-09-09"},{"lineNumber":69,"author":{"gitId":"Chen-Kuei"},"content":"// if (eventTask.trim().isEmpty()) {","lastModifiedDate":"2023-09-09"},{"lineNumber":70,"author":{"gitId":"Chen-Kuei"},"content":"// System.out.println(\"What event do you have?\");","lastModifiedDate":"2023-09-09"},{"lineNumber":71,"author":{"gitId":"Chen-Kuei"},"content":"// } else if (eventStartTime.trim().isEmpty()) {","lastModifiedDate":"2023-09-09"},{"lineNumber":72,"author":{"gitId":"Chen-Kuei"},"content":"// System.out.println(\"When will the event start?\");","lastModifiedDate":"2023-09-09"},{"lineNumber":73,"author":{"gitId":"Chen-Kuei"},"content":"// } else if (eventEndTime.trim().isEmpty()) {","lastModifiedDate":"2023-09-09"},{"lineNumber":74,"author":{"gitId":"Chen-Kuei"},"content":"// System.out.println(\"When will the event end?\");","lastModifiedDate":"2023-09-09"},{"lineNumber":75,"author":{"gitId":"Chen-Kuei"},"content":"// } else {","lastModifiedDate":"2023-09-09"},{"lineNumber":76,"author":{"gitId":"Chen-Kuei"},"content":"// tasks.add(new duke.Event(eventParts[0], eventParts[1], eventParts[2]));","lastModifiedDate":"2023-09-09"},{"lineNumber":77,"author":{"gitId":"Chen-Kuei"},"content":"// taskCount++;","lastModifiedDate":"2023-09-09"},{"lineNumber":78,"author":{"gitId":"Chen-Kuei"},"content":"// }","lastModifiedDate":"2023-09-09"},{"lineNumber":79,"author":{"gitId":"Chen-Kuei"},"content":"// if (taskCount \u003e 0) {","lastModifiedDate":"2023-09-09"},{"lineNumber":80,"author":{"gitId":"Chen-Kuei"},"content":"// System.out.println(\"Got it. I\u0027ve added this task:\");","lastModifiedDate":"2023-09-09"},{"lineNumber":81,"author":{"gitId":"Chen-Kuei"},"content":"// System.out.println(\" \" + tasks.get(taskCount - 1));","lastModifiedDate":"2023-09-09"},{"lineNumber":82,"author":{"gitId":"Chen-Kuei"},"content":"// System.out.println(\"Now you have \" + taskCount + \" tasks in the list.\");","lastModifiedDate":"2023-09-09"},{"lineNumber":83,"author":{"gitId":"Chen-Kuei"},"content":"// }","lastModifiedDate":"2023-09-09"},{"lineNumber":84,"author":{"gitId":"Chen-Kuei"},"content":"// } else {","lastModifiedDate":"2023-09-09"},{"lineNumber":85,"author":{"gitId":"Chen-Kuei"},"content":"// System.out.println(\"Invalid event format.\");","lastModifiedDate":"2023-09-09"},{"lineNumber":86,"author":{"gitId":"Chen-Kuei"},"content":"// }","lastModifiedDate":"2023-09-09"},{"lineNumber":87,"author":{"gitId":"Chen-Kuei"},"content":"// break;","lastModifiedDate":"2023-09-09"},{"lineNumber":88,"author":{"gitId":"Chen-Kuei"},"content":"// default:","lastModifiedDate":"2023-09-09"},{"lineNumber":89,"author":{"gitId":"Chen-Kuei"},"content":"// System.out.println(\"Invalid command format.\");","lastModifiedDate":"2023-09-09"},{"lineNumber":90,"author":{"gitId":"Chen-Kuei"},"content":"// break;","lastModifiedDate":"2023-09-09"},{"lineNumber":91,"author":{"gitId":"Chen-Kuei"},"content":"// }","lastModifiedDate":"2023-09-09"},{"lineNumber":92,"author":{"gitId":"Chen-Kuei"},"content":"//","lastModifiedDate":"2023-09-09"},{"lineNumber":93,"author":{"gitId":"Chen-Kuei"},"content":"// } else {","lastModifiedDate":"2023-09-09"},{"lineNumber":94,"author":{"gitId":"Chen-Kuei"},"content":"// if (parts[0].equalsIgnoreCase(\"todo\")) {","lastModifiedDate":"2023-09-09"},{"lineNumber":95,"author":{"gitId":"Chen-Kuei"},"content":"// System.out.println(\"What you want to do?\");","lastModifiedDate":"2023-09-09"},{"lineNumber":96,"author":{"gitId":"Chen-Kuei"},"content":"// } else if (parts[0].equalsIgnoreCase(\"deadline\")) {","lastModifiedDate":"2023-09-09"},{"lineNumber":97,"author":{"gitId":"Chen-Kuei"},"content":"// System.out.println(\"What deadline do you have??\");","lastModifiedDate":"2023-09-09"},{"lineNumber":98,"author":{"gitId":"Chen-Kuei"},"content":"// } else if (parts[0].equalsIgnoreCase(\"event\")) {","lastModifiedDate":"2023-09-09"},{"lineNumber":99,"author":{"gitId":"Chen-Kuei"},"content":"// System.out.println(\"What event are you going to attend??\");","lastModifiedDate":"2023-09-09"},{"lineNumber":100,"author":{"gitId":"Chen-Kuei"},"content":"// } else {","lastModifiedDate":"2023-09-09"},{"lineNumber":101,"author":{"gitId":"Chen-Kuei"},"content":"// System.out.println(\"Sorry, I don\u0027t know what that means :(\");","lastModifiedDate":"2023-09-09"},{"lineNumber":102,"author":{"gitId":"Chen-Kuei"},"content":"// }","lastModifiedDate":"2023-09-09"},{"lineNumber":103,"author":{"gitId":"Chen-Kuei"},"content":"// }","lastModifiedDate":"2023-09-09"},{"lineNumber":104,"author":{"gitId":"Chen-Kuei"},"content":"// } else {","lastModifiedDate":"2023-09-09"},{"lineNumber":105,"author":{"gitId":"Chen-Kuei"},"content":"// System.out.println(\"Sorry, the task list is full.\");","lastModifiedDate":"2023-09-09"},{"lineNumber":106,"author":{"gitId":"Chen-Kuei"},"content":"// }","lastModifiedDate":"2023-09-09"},{"lineNumber":107,"author":{"gitId":"Chen-Kuei"},"content":"// }","lastModifiedDate":"2023-09-09"},{"lineNumber":108,"author":{"gitId":"Chen-Kuei"},"content":"// private static void deleteTask (String userCommand) {","lastModifiedDate":"2023-09-09"},{"lineNumber":109,"author":{"gitId":"Chen-Kuei"},"content":"// try {","lastModifiedDate":"2023-09-09"},{"lineNumber":110,"author":{"gitId":"Chen-Kuei"},"content":"// int index \u003d Integer.parseInt(userCommand.split(\" \")[1]) - 1;","lastModifiedDate":"2023-09-09"},{"lineNumber":111,"author":{"gitId":"Chen-Kuei"},"content":"// if (index \u003e\u003d 1 \u0026\u0026 index \u003c\u003d taskCount) {","lastModifiedDate":"2023-09-09"},{"lineNumber":112,"author":{"gitId":"Chen-Kuei"},"content":"// duke.Task removedTask \u003d tasks.remove(index);","lastModifiedDate":"2023-09-09"},{"lineNumber":113,"author":{"gitId":"Chen-Kuei"},"content":"// taskCount--;","lastModifiedDate":"2023-09-09"},{"lineNumber":114,"author":{"gitId":"Chen-Kuei"},"content":"// System.out.println(\"OK, I\u0027ve removed this task.\");","lastModifiedDate":"2023-09-09"},{"lineNumber":115,"author":{"gitId":"Chen-Kuei"},"content":"// } else {","lastModifiedDate":"2023-09-09"},{"lineNumber":116,"author":{"gitId":"Chen-Kuei"},"content":"// System.out.println(\"Invalid task index.\");","lastModifiedDate":"2023-09-09"},{"lineNumber":117,"author":{"gitId":"Chen-Kuei"},"content":"// }","lastModifiedDate":"2023-09-09"},{"lineNumber":118,"author":{"gitId":"Chen-Kuei"},"content":"// } catch (NumberFormatException | IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-09"},{"lineNumber":119,"author":{"gitId":"Chen-Kuei"},"content":"// System.out.println(\"Invalid command format.\");","lastModifiedDate":"2023-09-09"},{"lineNumber":120,"author":{"gitId":"Chen-Kuei"},"content":"// }","lastModifiedDate":"2023-09-09"},{"lineNumber":121,"author":{"gitId":"Chen-Kuei"},"content":"//","lastModifiedDate":"2023-09-09"},{"lineNumber":122,"author":{"gitId":"Chen-Kuei"},"content":"// }","lastModifiedDate":"2023-09-09"},{"lineNumber":123,"author":{"gitId":"Chen-Kuei"},"content":"// private static void listTasks() {","lastModifiedDate":"2023-09-09"},{"lineNumber":124,"author":{"gitId":"Chen-Kuei"},"content":"// if (taskCount \u003d\u003d 0) {","lastModifiedDate":"2023-09-09"},{"lineNumber":125,"author":{"gitId":"Chen-Kuei"},"content":"// System.out.println(\"The task list is empty!\");","lastModifiedDate":"2023-09-09"},{"lineNumber":126,"author":{"gitId":"Chen-Kuei"},"content":"// } else {","lastModifiedDate":"2023-09-09"},{"lineNumber":127,"author":{"gitId":"Chen-Kuei"},"content":"// for(int i \u003d 0; i \u003c taskCount; i++) {","lastModifiedDate":"2023-09-09"},{"lineNumber":128,"author":{"gitId":"Chen-Kuei"},"content":"// System.out.println((i + 1) + \". \" + tasks.get(i));","lastModifiedDate":"2023-09-09"},{"lineNumber":129,"author":{"gitId":"Chen-Kuei"},"content":"// }","lastModifiedDate":"2023-09-09"},{"lineNumber":130,"author":{"gitId":"Chen-Kuei"},"content":"// }","lastModifiedDate":"2023-09-09"},{"lineNumber":131,"author":{"gitId":"Chen-Kuei"},"content":"// }","lastModifiedDate":"2023-09-09"},{"lineNumber":132,"author":{"gitId":"Chen-Kuei"},"content":"// private static boolean isValidTaskIndex(int taskIndex) {","lastModifiedDate":"2023-09-09"},{"lineNumber":133,"author":{"gitId":"Chen-Kuei"},"content":"// return taskIndex \u003e\u003d 0 \u0026\u0026 taskIndex \u003c taskCount;","lastModifiedDate":"2023-09-09"},{"lineNumber":134,"author":{"gitId":"Chen-Kuei"},"content":"// }","lastModifiedDate":"2023-09-09"},{"lineNumber":135,"author":{"gitId":"Chen-Kuei"},"content":"// private static void markTask(String userCommand) {","lastModifiedDate":"2023-09-09"},{"lineNumber":136,"author":{"gitId":"Chen-Kuei"},"content":"// try {","lastModifiedDate":"2023-09-09"},{"lineNumber":137,"author":{"gitId":"Chen-Kuei"},"content":"// int taskIndex \u003d Integer.parseInt(userCommand.split(\" \")[1]) - 1;","lastModifiedDate":"2023-09-09"},{"lineNumber":138,"author":{"gitId":"Chen-Kuei"},"content":"// if (isValidTaskIndex(taskIndex)) {","lastModifiedDate":"2023-09-09"},{"lineNumber":139,"author":{"gitId":"Chen-Kuei"},"content":"// duke.Task taskToMark \u003d tasks.get(taskIndex);","lastModifiedDate":"2023-09-09"},{"lineNumber":140,"author":{"gitId":"Chen-Kuei"},"content":"// taskToMark.markAsDone();","lastModifiedDate":"2023-09-09"},{"lineNumber":141,"author":{"gitId":"Chen-Kuei"},"content":"// System.out.println(\"Nice! I\u0027ve marked this task as done:\\n \" + taskToMark);","lastModifiedDate":"2023-09-09"},{"lineNumber":142,"author":{"gitId":"Chen-Kuei"},"content":"// } else {","lastModifiedDate":"2023-09-09"},{"lineNumber":143,"author":{"gitId":"Chen-Kuei"},"content":"// System.out.println(\"Invalid task number. Please enter a valid task number.\");","lastModifiedDate":"2023-09-09"},{"lineNumber":144,"author":{"gitId":"Chen-Kuei"},"content":"// }","lastModifiedDate":"2023-09-09"},{"lineNumber":145,"author":{"gitId":"Chen-Kuei"},"content":"// } catch (NumberFormatException | ArrayIndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-09"},{"lineNumber":146,"author":{"gitId":"Chen-Kuei"},"content":"// System.out.println(\"Invalid command format. Please use \u0027mark [task number]\u0027.\");","lastModifiedDate":"2023-09-09"},{"lineNumber":147,"author":{"gitId":"Chen-Kuei"},"content":"// }","lastModifiedDate":"2023-09-09"},{"lineNumber":148,"author":{"gitId":"Chen-Kuei"},"content":"// }","lastModifiedDate":"2023-09-09"},{"lineNumber":149,"author":{"gitId":"Chen-Kuei"},"content":"// private static void unmarkTask(String userCommand) {","lastModifiedDate":"2023-09-09"},{"lineNumber":150,"author":{"gitId":"Chen-Kuei"},"content":"// try {","lastModifiedDate":"2023-09-09"},{"lineNumber":151,"author":{"gitId":"Chen-Kuei"},"content":"// int taskIndex \u003d Integer.parseInt(userCommand.split(\" \")[1]) - 1;","lastModifiedDate":"2023-09-09"},{"lineNumber":152,"author":{"gitId":"Chen-Kuei"},"content":"// if (isValidTaskIndex(taskIndex)) {","lastModifiedDate":"2023-09-09"},{"lineNumber":153,"author":{"gitId":"Chen-Kuei"},"content":"// duke.Task taskToUnmark \u003d tasks.get(taskIndex);","lastModifiedDate":"2023-09-09"},{"lineNumber":154,"author":{"gitId":"Chen-Kuei"},"content":"// taskToUnmark.markAsNotDone();","lastModifiedDate":"2023-09-09"},{"lineNumber":155,"author":{"gitId":"Chen-Kuei"},"content":"// System.out.println(\"OK, I\u0027ve marked this task as not done yet:\\n \" + taskToUnmark);","lastModifiedDate":"2023-09-09"},{"lineNumber":156,"author":{"gitId":"Chen-Kuei"},"content":"// } else {","lastModifiedDate":"2023-09-09"},{"lineNumber":157,"author":{"gitId":"Chen-Kuei"},"content":"// System.out.println(\"Invalid task number. Please enter a valid task number.\");","lastModifiedDate":"2023-09-09"},{"lineNumber":158,"author":{"gitId":"Chen-Kuei"},"content":"// }","lastModifiedDate":"2023-09-09"},{"lineNumber":159,"author":{"gitId":"Chen-Kuei"},"content":"// } catch (NumberFormatException | ArrayIndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-09"},{"lineNumber":160,"author":{"gitId":"Chen-Kuei"},"content":"// System.out.println(\"Invalid command format. Please use \u0027unmark [task number]\u0027.\");","lastModifiedDate":"2023-09-09"},{"lineNumber":161,"author":{"gitId":"Chen-Kuei"},"content":"// }","lastModifiedDate":"2023-09-09"},{"lineNumber":162,"author":{"gitId":"Chen-Kuei"},"content":"// }","lastModifiedDate":"2023-09-09"},{"lineNumber":163,"author":{"gitId":"Chen-Kuei"},"content":"//","lastModifiedDate":"2023-09-09"},{"lineNumber":164,"author":{"gitId":"Chen-Kuei"},"content":"// private static void loadTasks() {","lastModifiedDate":"2023-09-09"},{"lineNumber":165,"author":{"gitId":"Chen-Kuei"},"content":"// File file \u003d new File(DATA_FILE_PATH);","lastModifiedDate":"2023-09-09"},{"lineNumber":166,"author":{"gitId":"Chen-Kuei"},"content":"//","lastModifiedDate":"2023-09-09"},{"lineNumber":167,"author":{"gitId":"Chen-Kuei"},"content":"// if (file.exists()) {","lastModifiedDate":"2023-09-09"},{"lineNumber":168,"author":{"gitId":"Chen-Kuei"},"content":"// try (BufferedReader reader \u003d new BufferedReader(new FileReader(file))) {","lastModifiedDate":"2023-09-09"},{"lineNumber":169,"author":{"gitId":"Chen-Kuei"},"content":"// String line;","lastModifiedDate":"2023-09-09"},{"lineNumber":170,"author":{"gitId":"Chen-Kuei"},"content":"// while ((line \u003d reader.readLine()) !\u003d null) {","lastModifiedDate":"2023-09-09"},{"lineNumber":171,"author":{"gitId":"Chen-Kuei"},"content":"// String[] taskData \u003d line.split(\" \\\\| \");","lastModifiedDate":"2023-09-09"},{"lineNumber":172,"author":{"gitId":"Chen-Kuei"},"content":"// if (taskData.length \u003e\u003d 2) {","lastModifiedDate":"2023-09-09"},{"lineNumber":173,"author":{"gitId":"Chen-Kuei"},"content":"// TaskType taskType \u003d TaskType.valueOf(taskData[0]);","lastModifiedDate":"2023-09-09"},{"lineNumber":174,"author":{"gitId":"Chen-Kuei"},"content":"// String taskDescription \u003d taskData[1];","lastModifiedDate":"2023-09-09"},{"lineNumber":175,"author":{"gitId":"Chen-Kuei"},"content":"// String taskTime1 \u003d (taskData.length \u003e 2) ? taskData[2] : \"\";","lastModifiedDate":"2023-09-09"},{"lineNumber":176,"author":{"gitId":"Chen-Kuei"},"content":"// String taskTime2 \u003d (taskData.length \u003e 3) ? taskData[3] : \"\";","lastModifiedDate":"2023-09-09"},{"lineNumber":177,"author":{"gitId":"Chen-Kuei"},"content":"//","lastModifiedDate":"2023-09-09"},{"lineNumber":178,"author":{"gitId":"Chen-Kuei"},"content":"// switch (taskType) {","lastModifiedDate":"2023-09-09"},{"lineNumber":179,"author":{"gitId":"Chen-Kuei"},"content":"// case TODO:","lastModifiedDate":"2023-09-09"},{"lineNumber":180,"author":{"gitId":"Chen-Kuei"},"content":"// tasks.add(new duke.Todo(taskDescription));","lastModifiedDate":"2023-09-09"},{"lineNumber":181,"author":{"gitId":"Chen-Kuei"},"content":"// break;","lastModifiedDate":"2023-09-09"},{"lineNumber":182,"author":{"gitId":"Chen-Kuei"},"content":"// case DEADLINE:","lastModifiedDate":"2023-09-09"},{"lineNumber":183,"author":{"gitId":"Chen-Kuei"},"content":"// tasks.add(new duke.Deadline(taskDescription, taskTime1));","lastModifiedDate":"2023-09-09"},{"lineNumber":184,"author":{"gitId":"Chen-Kuei"},"content":"// break;","lastModifiedDate":"2023-09-09"},{"lineNumber":185,"author":{"gitId":"Chen-Kuei"},"content":"// case EVENT:","lastModifiedDate":"2023-09-09"},{"lineNumber":186,"author":{"gitId":"Chen-Kuei"},"content":"// tasks.add(new duke.Event(taskDescription, taskTime1, taskTime2));","lastModifiedDate":"2023-09-09"},{"lineNumber":187,"author":{"gitId":"Chen-Kuei"},"content":"// break;","lastModifiedDate":"2023-09-09"},{"lineNumber":188,"author":{"gitId":"Chen-Kuei"},"content":"// default:","lastModifiedDate":"2023-09-09"},{"lineNumber":189,"author":{"gitId":"Chen-Kuei"},"content":"// System.out.println(\"Invalid task type: \" + taskType);","lastModifiedDate":"2023-09-09"},{"lineNumber":190,"author":{"gitId":"Chen-Kuei"},"content":"// break;","lastModifiedDate":"2023-09-09"},{"lineNumber":191,"author":{"gitId":"Chen-Kuei"},"content":"// }","lastModifiedDate":"2023-09-09"},{"lineNumber":192,"author":{"gitId":"Chen-Kuei"},"content":"// taskCount++;","lastModifiedDate":"2023-09-09"},{"lineNumber":193,"author":{"gitId":"Chen-Kuei"},"content":"// } else {","lastModifiedDate":"2023-09-09"},{"lineNumber":194,"author":{"gitId":"Chen-Kuei"},"content":"// System.out.println(\"Skipping corrupted task data: \" + line);","lastModifiedDate":"2023-09-09"},{"lineNumber":195,"author":{"gitId":"Chen-Kuei"},"content":"// }","lastModifiedDate":"2023-09-09"},{"lineNumber":196,"author":{"gitId":"Chen-Kuei"},"content":"// }","lastModifiedDate":"2023-09-09"},{"lineNumber":197,"author":{"gitId":"Chen-Kuei"},"content":"// } catch (IOException e) {","lastModifiedDate":"2023-09-09"},{"lineNumber":198,"author":{"gitId":"Chen-Kuei"},"content":"// System.out.println(\"Error loading tasks.\");","lastModifiedDate":"2023-09-09"},{"lineNumber":199,"author":{"gitId":"Chen-Kuei"},"content":"// }","lastModifiedDate":"2023-09-09"},{"lineNumber":200,"author":{"gitId":"Chen-Kuei"},"content":"// } else {","lastModifiedDate":"2023-09-09"},{"lineNumber":201,"author":{"gitId":"Chen-Kuei"},"content":"// System.out.println(\"Data file does not exist.\");","lastModifiedDate":"2023-09-09"},{"lineNumber":202,"author":{"gitId":"Chen-Kuei"},"content":"// }","lastModifiedDate":"2023-09-09"},{"lineNumber":203,"author":{"gitId":"Chen-Kuei"},"content":"// }","lastModifiedDate":"2023-09-09"},{"lineNumber":204,"author":{"gitId":"Chen-Kuei"},"content":"//","lastModifiedDate":"2023-09-09"},{"lineNumber":205,"author":{"gitId":"Chen-Kuei"},"content":"// private static void saveTask() {","lastModifiedDate":"2023-09-09"},{"lineNumber":206,"author":{"gitId":"Chen-Kuei"},"content":"// File file \u003d new File(DATA_FILE_PATH);","lastModifiedDate":"2023-09-09"},{"lineNumber":207,"author":{"gitId":"Chen-Kuei"},"content":"// file.getParentFile().mkdirs();","lastModifiedDate":"2023-09-09"},{"lineNumber":208,"author":{"gitId":"Chen-Kuei"},"content":"//","lastModifiedDate":"2023-09-09"},{"lineNumber":209,"author":{"gitId":"Chen-Kuei"},"content":"// try (BufferedWriter writer \u003d new BufferedWriter(new FileWriter(file))) {","lastModifiedDate":"2023-09-09"},{"lineNumber":210,"author":{"gitId":"Chen-Kuei"},"content":"// for (duke.Task task : tasks) {","lastModifiedDate":"2023-09-09"},{"lineNumber":211,"author":{"gitId":"Chen-Kuei"},"content":"// writer.write(task.toDataString());","lastModifiedDate":"2023-09-09"},{"lineNumber":212,"author":{"gitId":"Chen-Kuei"},"content":"// writer.newLine();","lastModifiedDate":"2023-09-09"},{"lineNumber":213,"author":{"gitId":"Chen-Kuei"},"content":"// }","lastModifiedDate":"2023-09-09"},{"lineNumber":214,"author":{"gitId":"Chen-Kuei"},"content":"// } catch (IOException e) {","lastModifiedDate":"2023-09-09"},{"lineNumber":215,"author":{"gitId":"Chen-Kuei"},"content":"// System.out.println(\"Error saving tasks.\");","lastModifiedDate":"2023-09-09"},{"lineNumber":216,"author":{"gitId":"Chen-Kuei"},"content":"// }","lastModifiedDate":"2023-09-09"},{"lineNumber":217,"author":{"gitId":"Chen-Kuei"},"content":"// }","lastModifiedDate":"2023-09-09"},{"lineNumber":218,"author":{"gitId":"Chen-Kuei"},"content":"//","lastModifiedDate":"2023-09-09"},{"lineNumber":219,"author":{"gitId":"Chen-Kuei"},"content":"// public static void main(String[] args) {","lastModifiedDate":"2023-09-09"},{"lineNumber":220,"author":{"gitId":"Chen-Kuei"},"content":"// loadTasks(); // Load tasks from duke.txt","lastModifiedDate":"2023-09-09"},{"lineNumber":221,"author":{"gitId":"Chen-Kuei"},"content":"//","lastModifiedDate":"2023-09-09"},{"lineNumber":222,"author":{"gitId":"Chen-Kuei"},"content":"// String greeting \u003d \"Hi, I\u0027m BiuBiu.\\nWhat can I do for you?\";","lastModifiedDate":"2023-09-09"},{"lineNumber":223,"author":{"gitId":"Chen-Kuei"},"content":"// System.out.println(greeting);","lastModifiedDate":"2023-09-09"},{"lineNumber":224,"author":{"gitId":"Chen-Kuei"},"content":"// String exit \u003d \"Bye. Have a great day!\";","lastModifiedDate":"2023-09-09"},{"lineNumber":225,"author":{"gitId":"Chen-Kuei"},"content":"//","lastModifiedDate":"2023-09-09"},{"lineNumber":226,"author":{"gitId":"Chen-Kuei"},"content":"// Scanner scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-09"},{"lineNumber":227,"author":{"gitId":"Chen-Kuei"},"content":"// while(true) {","lastModifiedDate":"2023-09-09"},{"lineNumber":228,"author":{"gitId":"Chen-Kuei"},"content":"// String userCommand \u003d scanner.nextLine();","lastModifiedDate":"2023-09-09"},{"lineNumber":229,"author":{"gitId":"Chen-Kuei"},"content":"// if(userCommand.equalsIgnoreCase(\"bye\")) {","lastModifiedDate":"2023-09-09"},{"lineNumber":230,"author":{"gitId":"Chen-Kuei"},"content":"// System.out.println(exit);","lastModifiedDate":"2023-09-09"},{"lineNumber":231,"author":{"gitId":"Chen-Kuei"},"content":"// break;","lastModifiedDate":"2023-09-09"},{"lineNumber":232,"author":{"gitId":"Chen-Kuei"},"content":"// } else if (userCommand.equalsIgnoreCase(\"list\")) {","lastModifiedDate":"2023-09-09"},{"lineNumber":233,"author":{"gitId":"Chen-Kuei"},"content":"// System.out.println(\"Here are the tasks in your list:\");","lastModifiedDate":"2023-09-09"},{"lineNumber":234,"author":{"gitId":"Chen-Kuei"},"content":"// listTasks();","lastModifiedDate":"2023-09-09"},{"lineNumber":235,"author":{"gitId":"Chen-Kuei"},"content":"// } else if (userCommand.startsWith(\"mark \")) {","lastModifiedDate":"2023-09-09"},{"lineNumber":236,"author":{"gitId":"Chen-Kuei"},"content":"// markTask(userCommand);","lastModifiedDate":"2023-09-09"},{"lineNumber":237,"author":{"gitId":"Chen-Kuei"},"content":"// } else if (userCommand.startsWith(\"unmark \")) {","lastModifiedDate":"2023-09-09"},{"lineNumber":238,"author":{"gitId":"Chen-Kuei"},"content":"// unmarkTask(userCommand);","lastModifiedDate":"2023-09-09"},{"lineNumber":239,"author":{"gitId":"Chen-Kuei"},"content":"// } else if (userCommand.startsWith(\"delete \")) {","lastModifiedDate":"2023-09-09"},{"lineNumber":240,"author":{"gitId":"Chen-Kuei"},"content":"// deleteTask(userCommand);","lastModifiedDate":"2023-09-09"},{"lineNumber":241,"author":{"gitId":"Chen-Kuei"},"content":"// }else {","lastModifiedDate":"2023-09-09"},{"lineNumber":242,"author":{"gitId":"Chen-Kuei"},"content":"// addTask(userCommand);","lastModifiedDate":"2023-09-09"},{"lineNumber":243,"author":{"gitId":"Chen-Kuei"},"content":"// }","lastModifiedDate":"2023-09-09"},{"lineNumber":244,"author":{"gitId":"Chen-Kuei"},"content":"// saveTask();","lastModifiedDate":"2023-09-09"},{"lineNumber":245,"author":{"gitId":"Chen-Kuei"},"content":"// }","lastModifiedDate":"2023-09-09"},{"lineNumber":246,"author":{"gitId":"Chen-Kuei"},"content":"// }","lastModifiedDate":"2023-09-09"},{"lineNumber":247,"author":{"gitId":"Chen-Kuei"},"content":"//}","lastModifiedDate":"2023-09-09"},{"lineNumber":248,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":249,"author":{"gitId":"Chen-Kuei"},"content":" private static final int MAX_TASKS \u003d 100;","lastModifiedDate":"2023-09-03"},{"lineNumber":250,"author":{"gitId":"Chen-Kuei"},"content":" private static final String DATA_FILE_PATH \u003d \"./docs/duke.txt\";","lastModifiedDate":"2023-09-08"},{"lineNumber":251,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":252,"author":{"gitId":"Chen-Kuei"},"content":" private static TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-09-09"},{"lineNumber":253,"author":{"gitId":"Chen-Kuei"},"content":" private static Ui ui \u003d new Ui();","lastModifiedDate":"2023-09-09"},{"lineNumber":254,"author":{"gitId":"Chen-Kuei"},"content":" private static Storage storage \u003d new Storage(\"./docs/duke.txt\");","lastModifiedDate":"2023-09-09"},{"lineNumber":255,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":256,"author":{"gitId":"Chen-Kuei"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-09"},{"lineNumber":257,"author":{"gitId":"Chen-Kuei"},"content":" ui.showWelcome();","lastModifiedDate":"2023-09-09"},{"lineNumber":258,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":259,"author":{"gitId":"Chen-Kuei"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":260,"author":{"gitId":"Chen-Kuei"},"content":" tasks \u003d ui.loadTasks(\"./docs/duke.txt\");","lastModifiedDate":"2023-09-09"},{"lineNumber":261,"author":{"gitId":"Chen-Kuei"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-09"},{"lineNumber":262,"author":{"gitId":"Chen-Kuei"},"content":" ui.showLoadingError();","lastModifiedDate":"2023-09-09"},{"lineNumber":263,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":264,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":265,"author":{"gitId":"Chen-Kuei"},"content":" boolean isExit \u003d false;","lastModifiedDate":"2023-09-09"},{"lineNumber":266,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":267,"author":{"gitId":"Chen-Kuei"},"content":" while(!isExit) {","lastModifiedDate":"2023-09-09"},{"lineNumber":268,"author":{"gitId":"Chen-Kuei"},"content":" String userCommand \u003d ui.readCommand();","lastModifiedDate":"2023-09-09"},{"lineNumber":269,"author":{"gitId":"Chen-Kuei"},"content":" isExit \u003d ui.handleCommand(userCommand, tasks, storage);","lastModifiedDate":"2023-09-09"},{"lineNumber":270,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":271,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":272,"author":{"gitId":"Chen-Kuei"},"content":"}","lastModifiedDate":"2023-09-08"},{"lineNumber":273,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":274,"author":{"gitId":"Chen-Kuei"},"content":"/*","lastModifiedDate":"2023-09-09"},{"lineNumber":275,"author":{"gitId":"Chen-Kuei"},"content":"TODO | read book","lastModifiedDate":"2023-09-09"},{"lineNumber":276,"author":{"gitId":"Chen-Kuei"},"content":"DEADLINE | project | 2022-10-10","lastModifiedDate":"2023-09-09"},{"lineNumber":277,"author":{"gitId":"Chen-Kuei"},"content":"EVENT | meeting | 2023-06-12 1400 | 2023-06-12 1800","lastModifiedDate":"2023-09-09"},{"lineNumber":278,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"Chen-Kuei":277,"-":1}},{"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":"import java.util.Locale;","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"Chen-Kuei"},"content":"public class Event extends Task {","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"Chen-Kuei"},"content":" // protected String from;","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"Chen-Kuei"},"content":" // protected String to;","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"Chen-Kuei"},"content":" private LocalDateTime startTime;","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"Chen-Kuei"},"content":" private LocalDateTime endTime;","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"Chen-Kuei"},"content":" public Event(String description, String startDateTimeString, String endDateTimeString) {","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"Chen-Kuei"},"content":" super(description);","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"Chen-Kuei"},"content":" this.startTime \u003d parseDateTime(startDateTimeString);","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"Chen-Kuei"},"content":" this.endTime \u003d parseDateTime(endDateTimeString);","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"Chen-Kuei"},"content":" private LocalDateTime parseDateTime(String dateTimeString) {","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"Chen-Kuei"},"content":" try {","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"Chen-Kuei"},"content":" if (!dateTimeString.isEmpty()) {","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"Chen-Kuei"},"content":" return LocalDateTime.parse(dateTimeString, DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\"));","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"Chen-Kuei"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"Chen-Kuei"},"content":" System.out.println(\"Error parsing date and time: \" + dateTimeString);","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"Chen-Kuei"},"content":" return null; // You may want to handle this case differently","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"Chen-Kuei"},"content":" return null;","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"Chen-Kuei"},"content":" private String formatDateTime(LocalDateTime dateTime) {","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"Chen-Kuei"},"content":" if (dateTime \u003d\u003d null) {","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"Chen-Kuei"},"content":" return \"Invalid Date and Time!\";","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"Chen-Kuei"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"MMM dd yyyy h:mm a\", Locale.ENGLISH);","lastModifiedDate":"2023-09-09"},{"lineNumber":35,"author":{"gitId":"Chen-Kuei"},"content":" return dateTime.format(formatter);","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":37,"author":{"gitId":"Chen-Kuei"},"content":" private String saveFormatDateTime(LocalDateTime dateTime) {","lastModifiedDate":"2023-09-09"},{"lineNumber":38,"author":{"gitId":"Chen-Kuei"},"content":" if (dateTime \u003d\u003d null) {","lastModifiedDate":"2023-09-09"},{"lineNumber":39,"author":{"gitId":"Chen-Kuei"},"content":" return \"\";","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":41,"author":{"gitId":"Chen-Kuei"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\");","lastModifiedDate":"2023-09-09"},{"lineNumber":42,"author":{"gitId":"Chen-Kuei"},"content":" return dateTime.format(formatter);","lastModifiedDate":"2023-09-09"},{"lineNumber":43,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"Chen-Kuei"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"Chen-Kuei"},"content":" public String toDataString() {","lastModifiedDate":"2023-09-08"},{"lineNumber":46,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":47,"author":{"gitId":"Chen-Kuei"},"content":" return \"EVENT | \" + super.toDataString() + \" | \" + saveFormatDateTime(startTime) + \" | \" + saveFormatDateTime(endTime);","lastModifiedDate":"2023-09-09"},{"lineNumber":48,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":49,"author":{"gitId":"Chen-Kuei"},"content":" @Override","lastModifiedDate":"2023-09-08"},{"lineNumber":50,"author":{"gitId":"Chen-Kuei"},"content":" public String toString() {","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"Chen-Kuei"},"content":" return \"[E]\" + super.toString() + \" (from: \" + formatDateTime(startTime) + \" to: \" + formatDateTime(endTime) + \")\";","lastModifiedDate":"2023-09-09"},{"lineNumber":52,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"Chen-Kuei"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"Chen-Kuei":53}},{"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":" public static Task parse(String userCommand) {","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"Chen-Kuei"},"content":" String[] commandParts \u003d userCommand.split(\" \", 2);","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"Chen-Kuei"},"content":" String taskType \u003d commandParts[0].toLowerCase();","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"Chen-Kuei"},"content":" switch (taskType) {","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"Chen-Kuei"},"content":" case \"todo\":","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"Chen-Kuei"},"content":" if (commandParts.length \u003d\u003d 2) {","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"Chen-Kuei"},"content":" return new Todo(commandParts[1]);","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"Chen-Kuei"},"content":" break;","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"Chen-Kuei"},"content":" case \"deadline\":","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"Chen-Kuei"},"content":" if (commandParts.length \u003d\u003d 2) {","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"Chen-Kuei"},"content":" String[] deadlineParts \u003d commandParts[1].split(\" /by \");","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"Chen-Kuei"},"content":" if (deadlineParts.length \u003d\u003d 2) {","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"Chen-Kuei"},"content":" return new Deadline(deadlineParts[0], deadlineParts[1]);","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"Chen-Kuei"},"content":" } else {","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"Chen-Kuei"},"content":" System.out.println(\"Please describe your deadline:)\");","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"Chen-Kuei"},"content":" return null;","lastModifiedDate":"2023-09-09"},{"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":" break;","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"Chen-Kuei"},"content":" case \"event\":","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"Chen-Kuei"},"content":" if (commandParts.length \u003d\u003d 2) {","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"Chen-Kuei"},"content":" String[] eventParts \u003d commandParts[1].split(\" /from | /to \");","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"Chen-Kuei"},"content":" if (eventParts.length \u003d\u003d 3) {","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"Chen-Kuei"},"content":" return new Event(eventParts[0], eventParts[1], eventParts[2]);","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"Chen-Kuei"},"content":" } else {","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"Chen-Kuei"},"content":" System.out.println(\"Please describe your event.\");","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"Chen-Kuei"},"content":" return null;","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":" break;","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"Chen-Kuei"},"content":" default:","lastModifiedDate":"2023-09-09"},{"lineNumber":37,"author":{"gitId":"Chen-Kuei"},"content":" System.out.println(\"Sorry, I don\u0027t understand the command.\");","lastModifiedDate":"2023-09-09"},{"lineNumber":38,"author":{"gitId":"Chen-Kuei"},"content":" break;","lastModifiedDate":"2023-09-09"},{"lineNumber":39,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"Chen-Kuei"},"content":" return null;","lastModifiedDate":"2023-09-09"},{"lineNumber":41,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":42,"author":{"gitId":"Chen-Kuei"},"content":"}","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"Chen-Kuei":42}},{"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":" private String filePath;","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"Chen-Kuei"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"Chen-Kuei"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"Chen-Kuei"},"content":" public enum TaskType {","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"Chen-Kuei"},"content":" TODO, DEADLINE, EVENT","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"Chen-Kuei"},"content":" public void saveTasks(TaskList tasks) {","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"Chen-Kuei"},"content":" File file \u003d new File(filePath);","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"Chen-Kuei"},"content":" file.getParentFile().mkdirs();","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"Chen-Kuei"},"content":" try (BufferedWriter writer \u003d new BufferedWriter(new FileWriter(file))) {","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"Chen-Kuei"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"Chen-Kuei"},"content":" Task task \u003d tasks.getTask(i);","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"Chen-Kuei"},"content":" writer.write(task.toDataString());","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"Chen-Kuei"},"content":" writer.newLine();","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"Chen-Kuei"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"Chen-Kuei"},"content":" System.out.println(\"Error saving tasks.\");","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"}],"authorContributionMap":{"Chen-Kuei":31}},{"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":" public Task(String description) {","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"Chen-Kuei"},"content":" this.description \u003d description;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"Chen-Kuei"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"Chen-Kuei"},"content":" public void markAsDone() {","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"Chen-Kuei"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"Chen-Kuei"},"content":" public void markAsNotDone() {","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":" public String toDataString() {","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"Chen-Kuei"},"content":" return description;","lastModifiedDate":"2023-09-08"},{"lineNumber":19,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":20,"author":{"gitId":"Chen-Kuei"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"Chen-Kuei"},"content":" public String toString() {","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"Chen-Kuei"},"content":" return (isDone ? \"[X] \" : \"[ ] \") + description;","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"Chen-Kuei"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"Chen-Kuei":24}},{"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":"public class TaskList {","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"Chen-Kuei"},"content":" private final List\u003cTask\u003e tasks;","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"Chen-Kuei"},"content":" public TaskList() {","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"Chen-Kuei"},"content":" this.tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"Chen-Kuei"},"content":" public TaskList(List\u003cTask\u003e tasks) {","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"Chen-Kuei"},"content":" this.tasks \u003d new ArrayList\u003c\u003e(tasks);","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"Chen-Kuei"},"content":" public void addTask(Task task) {","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"Chen-Kuei"},"content":" tasks.add(task);","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"Chen-Kuei"},"content":" public void deleteTask(int taskIndex) {","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"Chen-Kuei"},"content":" if (taskIndex \u003e\u003d 0 \u0026\u0026 taskIndex \u003c tasks.size()) {","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"Chen-Kuei"},"content":" tasks.remove(taskIndex);","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":" public int size() {","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"Chen-Kuei"},"content":" return tasks.size();","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"Chen-Kuei"},"content":" public Task getTask(int index) {","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"Chen-Kuei"},"content":" return tasks.get(index);","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"Chen-Kuei"},"content":" public void markTaskAsDone(int index) {","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"Chen-Kuei"},"content":" Task task \u003d tasks.get(index);","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"Chen-Kuei"},"content":" task.markAsDone();","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":" public void markTaskAsNotDone(int index) {","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"Chen-Kuei"},"content":" Task task \u003d tasks.get(index);","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"Chen-Kuei"},"content":" task.markAsNotDone();","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"}],"authorContributionMap":{"Chen-Kuei":36}},{"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":" public Todo(String description) {","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"Chen-Kuei"},"content":" super(description);","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"Chen-Kuei"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"Chen-Kuei"},"content":" public String toDataString() {","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"Chen-Kuei"},"content":" return \"TODO | \" + super.toDataString();","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"Chen-Kuei"},"content":" @Override","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"Chen-Kuei"},"content":" public String toString() {","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"Chen-Kuei"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"Chen-Kuei"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"Chen-Kuei":15}},{"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":"import java.util.Scanner;","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"Chen-Kuei"},"content":"public class Ui {","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"Chen-Kuei"},"content":" private Scanner scanner;","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"Chen-Kuei"},"content":" public Ui() {","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"Chen-Kuei"},"content":" scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"Chen-Kuei"},"content":" public String readCommand() {","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"Chen-Kuei"},"content":" return scanner.nextLine();","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"Chen-Kuei"},"content":" public TaskList loadTasks(String filePath) {","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"Chen-Kuei"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"Chen-Kuei"},"content":" File file \u003d new File(filePath);","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"Chen-Kuei"},"content":" if (file.exists()) {","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"Chen-Kuei"},"content":" try (BufferedReader reader \u003d new BufferedReader(new FileReader(file))) {","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"Chen-Kuei"},"content":" String line;","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"Chen-Kuei"},"content":" while ((line \u003d reader.readLine()) !\u003d null) {","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"Chen-Kuei"},"content":" String[] taskData \u003d line.split(\" \\\\| \");","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"Chen-Kuei"},"content":" if (taskData.length \u003e\u003d 2) {","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"Chen-Kuei"},"content":" Storage.TaskType taskType \u003d Storage.TaskType.valueOf(taskData[0]);","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"Chen-Kuei"},"content":" String taskDescription \u003d taskData[1];","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"Chen-Kuei"},"content":" String taskTime1 \u003d (taskData.length \u003e 2) ? taskData[2] : \"\";","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"Chen-Kuei"},"content":" String taskTime2 \u003d (taskData.length \u003e 3) ? taskData[3] : \"\";","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"Chen-Kuei"},"content":" switch (taskType) {","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"Chen-Kuei"},"content":" case TODO:","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"Chen-Kuei"},"content":" tasks.addTask(new Todo(taskDescription));","lastModifiedDate":"2023-09-09"},{"lineNumber":35,"author":{"gitId":"Chen-Kuei"},"content":" break;","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"Chen-Kuei"},"content":" case DEADLINE:","lastModifiedDate":"2023-09-09"},{"lineNumber":37,"author":{"gitId":"Chen-Kuei"},"content":" tasks.addTask(new Deadline(taskDescription, taskTime1));","lastModifiedDate":"2023-09-09"},{"lineNumber":38,"author":{"gitId":"Chen-Kuei"},"content":" break;","lastModifiedDate":"2023-09-09"},{"lineNumber":39,"author":{"gitId":"Chen-Kuei"},"content":" case EVENT:","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"Chen-Kuei"},"content":" tasks.addTask(new Event(taskDescription, taskTime1, taskTime2));","lastModifiedDate":"2023-09-09"},{"lineNumber":41,"author":{"gitId":"Chen-Kuei"},"content":" break;","lastModifiedDate":"2023-09-09"},{"lineNumber":42,"author":{"gitId":"Chen-Kuei"},"content":" default:","lastModifiedDate":"2023-09-09"},{"lineNumber":43,"author":{"gitId":"Chen-Kuei"},"content":" System.out.println(\"Invalid task type: \" + taskType);","lastModifiedDate":"2023-09-09"},{"lineNumber":44,"author":{"gitId":"Chen-Kuei"},"content":" break;","lastModifiedDate":"2023-09-09"},{"lineNumber":45,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":46,"author":{"gitId":"Chen-Kuei"},"content":" } else {","lastModifiedDate":"2023-09-09"},{"lineNumber":47,"author":{"gitId":"Chen-Kuei"},"content":" System.out.println(\"Skipping corrupted task data: \" + line);","lastModifiedDate":"2023-09-09"},{"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":" } catch (IOException e) {","lastModifiedDate":"2023-09-09"},{"lineNumber":51,"author":{"gitId":"Chen-Kuei"},"content":" System.out.println(\"Error loading tasks.\");","lastModifiedDate":"2023-09-09"},{"lineNumber":52,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":53,"author":{"gitId":"Chen-Kuei"},"content":" } else {","lastModifiedDate":"2023-09-09"},{"lineNumber":54,"author":{"gitId":"Chen-Kuei"},"content":" System.out.println(\"Data file does not exist.\");","lastModifiedDate":"2023-09-09"},{"lineNumber":55,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":56,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":57,"author":{"gitId":"Chen-Kuei"},"content":" return tasks;","lastModifiedDate":"2023-09-09"},{"lineNumber":58,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":59,"author":{"gitId":"Chen-Kuei"},"content":" public boolean handleCommand(String userCommand, TaskList tasks, Storage storage) {","lastModifiedDate":"2023-09-09"},{"lineNumber":60,"author":{"gitId":"Chen-Kuei"},"content":" try {","lastModifiedDate":"2023-09-09"},{"lineNumber":61,"author":{"gitId":"Chen-Kuei"},"content":" String[] parts \u003d userCommand.split(\" \", 2);","lastModifiedDate":"2023-09-09"},{"lineNumber":62,"author":{"gitId":"Chen-Kuei"},"content":" String commandType \u003d parts[0].toLowerCase();","lastModifiedDate":"2023-09-09"},{"lineNumber":63,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":64,"author":{"gitId":"Chen-Kuei"},"content":" switch (commandType) {","lastModifiedDate":"2023-09-09"},{"lineNumber":65,"author":{"gitId":"Chen-Kuei"},"content":" case \"bye\":","lastModifiedDate":"2023-09-09"},{"lineNumber":66,"author":{"gitId":"Chen-Kuei"},"content":" showExit();","lastModifiedDate":"2023-09-09"},{"lineNumber":67,"author":{"gitId":"Chen-Kuei"},"content":" storage.saveTasks(tasks);","lastModifiedDate":"2023-09-09"},{"lineNumber":68,"author":{"gitId":"Chen-Kuei"},"content":" return true;","lastModifiedDate":"2023-09-09"},{"lineNumber":69,"author":{"gitId":"Chen-Kuei"},"content":" case \"list\":","lastModifiedDate":"2023-09-09"},{"lineNumber":70,"author":{"gitId":"Chen-Kuei"},"content":" showTaskList(tasks);","lastModifiedDate":"2023-09-09"},{"lineNumber":71,"author":{"gitId":"Chen-Kuei"},"content":" break;","lastModifiedDate":"2023-09-09"},{"lineNumber":72,"author":{"gitId":"Chen-Kuei"},"content":" case \"mark\":","lastModifiedDate":"2023-09-09"},{"lineNumber":73,"author":{"gitId":"Chen-Kuei"},"content":" int doneTaskIndex \u003d Integer.parseInt(parts[1]) - 1;","lastModifiedDate":"2023-09-09"},{"lineNumber":74,"author":{"gitId":"Chen-Kuei"},"content":" tasks.markTaskAsDone(doneTaskIndex);","lastModifiedDate":"2023-09-09"},{"lineNumber":75,"author":{"gitId":"Chen-Kuei"},"content":" showTaskMarkedAsDone(tasks.getTask(doneTaskIndex));","lastModifiedDate":"2023-09-09"},{"lineNumber":76,"author":{"gitId":"Chen-Kuei"},"content":" storage.saveTasks(tasks);","lastModifiedDate":"2023-09-09"},{"lineNumber":77,"author":{"gitId":"Chen-Kuei"},"content":" break;","lastModifiedDate":"2023-09-09"},{"lineNumber":78,"author":{"gitId":"Chen-Kuei"},"content":" case \"unmark\":","lastModifiedDate":"2023-09-09"},{"lineNumber":79,"author":{"gitId":"Chen-Kuei"},"content":" int notDoneTaskIndex \u003d Integer.parseInt(parts[1]) - 1;","lastModifiedDate":"2023-09-09"},{"lineNumber":80,"author":{"gitId":"Chen-Kuei"},"content":" tasks.markTaskAsNotDone(notDoneTaskIndex);","lastModifiedDate":"2023-09-09"},{"lineNumber":81,"author":{"gitId":"Chen-Kuei"},"content":" showTaskMarkedAsNotDone(tasks.getTask(notDoneTaskIndex));","lastModifiedDate":"2023-09-09"},{"lineNumber":82,"author":{"gitId":"Chen-Kuei"},"content":" storage.saveTasks(tasks);","lastModifiedDate":"2023-09-09"},{"lineNumber":83,"author":{"gitId":"Chen-Kuei"},"content":" break;","lastModifiedDate":"2023-09-09"},{"lineNumber":84,"author":{"gitId":"Chen-Kuei"},"content":" case \"todo\":","lastModifiedDate":"2023-09-09"},{"lineNumber":85,"author":{"gitId":"Chen-Kuei"},"content":" if (parts.length \u003d\u003d 1) {","lastModifiedDate":"2023-09-09"},{"lineNumber":86,"author":{"gitId":"Chen-Kuei"},"content":" System.out.println(\"What you want to do?\");","lastModifiedDate":"2023-09-09"},{"lineNumber":87,"author":{"gitId":"Chen-Kuei"},"content":" break;","lastModifiedDate":"2023-09-09"},{"lineNumber":88,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":89,"author":{"gitId":"Chen-Kuei"},"content":" case \"deadline\":","lastModifiedDate":"2023-09-09"},{"lineNumber":90,"author":{"gitId":"Chen-Kuei"},"content":" if (parts.length \u003d\u003d 1) {","lastModifiedDate":"2023-09-09"},{"lineNumber":91,"author":{"gitId":"Chen-Kuei"},"content":" System.out.println(\"What deadline do you have?\");","lastModifiedDate":"2023-09-09"},{"lineNumber":92,"author":{"gitId":"Chen-Kuei"},"content":" break;","lastModifiedDate":"2023-09-09"},{"lineNumber":93,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":94,"author":{"gitId":"Chen-Kuei"},"content":" case \"event\":","lastModifiedDate":"2023-09-09"},{"lineNumber":95,"author":{"gitId":"Chen-Kuei"},"content":" if (parts.length \u003d\u003d 1) {","lastModifiedDate":"2023-09-09"},{"lineNumber":96,"author":{"gitId":"Chen-Kuei"},"content":" System.out.println(\"What event do you have?\");","lastModifiedDate":"2023-09-09"},{"lineNumber":97,"author":{"gitId":"Chen-Kuei"},"content":" break;","lastModifiedDate":"2023-09-09"},{"lineNumber":98,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":99,"author":{"gitId":"Chen-Kuei"},"content":" Task newTask \u003d Parser.parse(userCommand);","lastModifiedDate":"2023-09-09"},{"lineNumber":100,"author":{"gitId":"Chen-Kuei"},"content":" if (newTask \u003d\u003d null) {","lastModifiedDate":"2023-09-09"},{"lineNumber":101,"author":{"gitId":"Chen-Kuei"},"content":" break;","lastModifiedDate":"2023-09-09"},{"lineNumber":102,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":103,"author":{"gitId":"Chen-Kuei"},"content":" tasks.addTask(newTask);","lastModifiedDate":"2023-09-09"},{"lineNumber":104,"author":{"gitId":"Chen-Kuei"},"content":" showTaskAdded(newTask, tasks.size());","lastModifiedDate":"2023-09-09"},{"lineNumber":105,"author":{"gitId":"Chen-Kuei"},"content":" storage.saveTasks(tasks);","lastModifiedDate":"2023-09-09"},{"lineNumber":106,"author":{"gitId":"Chen-Kuei"},"content":" break;","lastModifiedDate":"2023-09-09"},{"lineNumber":107,"author":{"gitId":"Chen-Kuei"},"content":" case \"delete\":","lastModifiedDate":"2023-09-09"},{"lineNumber":108,"author":{"gitId":"Chen-Kuei"},"content":" int deletedTaskIndex \u003d Integer.parseInt(parts[1]) - 1;","lastModifiedDate":"2023-09-09"},{"lineNumber":109,"author":{"gitId":"Chen-Kuei"},"content":" tasks.deleteTask(deletedTaskIndex);","lastModifiedDate":"2023-09-09"},{"lineNumber":110,"author":{"gitId":"Chen-Kuei"},"content":" showTaskDeleted(tasks.size());","lastModifiedDate":"2023-09-09"},{"lineNumber":111,"author":{"gitId":"Chen-Kuei"},"content":" storage.saveTasks(tasks);","lastModifiedDate":"2023-09-09"},{"lineNumber":112,"author":{"gitId":"Chen-Kuei"},"content":" break;","lastModifiedDate":"2023-09-09"},{"lineNumber":113,"author":{"gitId":"Chen-Kuei"},"content":" default:","lastModifiedDate":"2023-09-09"},{"lineNumber":114,"author":{"gitId":"Chen-Kuei"},"content":" showError(\"Invalid command format.\");","lastModifiedDate":"2023-09-09"},{"lineNumber":115,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":116,"author":{"gitId":"Chen-Kuei"},"content":" } catch (NumberFormatException | ArrayIndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-09"},{"lineNumber":117,"author":{"gitId":"Chen-Kuei"},"content":" showError(\"Invalid command format.\");","lastModifiedDate":"2023-09-09"},{"lineNumber":118,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":119,"author":{"gitId":"Chen-Kuei"},"content":" return false;","lastModifiedDate":"2023-09-09"},{"lineNumber":120,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":121,"author":{"gitId":"Chen-Kuei"},"content":" public void showWelcome() {","lastModifiedDate":"2023-09-09"},{"lineNumber":122,"author":{"gitId":"Chen-Kuei"},"content":" System.out.println(\"Hi, I\u0027m BiuBiu.\\nWhat can I do for you?\");","lastModifiedDate":"2023-09-09"},{"lineNumber":123,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":124,"author":{"gitId":"Chen-Kuei"},"content":" public void showError(String errorCommand) {","lastModifiedDate":"2023-09-09"},{"lineNumber":125,"author":{"gitId":"Chen-Kuei"},"content":" System.out.println(errorCommand);","lastModifiedDate":"2023-09-09"},{"lineNumber":126,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":127,"author":{"gitId":"Chen-Kuei"},"content":" public void showTaskAdded(Task task, int taskCount) {","lastModifiedDate":"2023-09-09"},{"lineNumber":128,"author":{"gitId":"Chen-Kuei"},"content":" System.out.println(\"Got it. I\u0027ve added this task:\");","lastModifiedDate":"2023-09-09"},{"lineNumber":129,"author":{"gitId":"Chen-Kuei"},"content":" System.out.println(\" \" + task);","lastModifiedDate":"2023-09-09"},{"lineNumber":130,"author":{"gitId":"Chen-Kuei"},"content":" System.out.println(\"Now you have \" + taskCount + \" tasks in the list.\");","lastModifiedDate":"2023-09-09"},{"lineNumber":131,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":132,"author":{"gitId":"Chen-Kuei"},"content":" public void showTaskDeleted(int taskCount) {","lastModifiedDate":"2023-09-09"},{"lineNumber":133,"author":{"gitId":"Chen-Kuei"},"content":" System.out.println(\"OK, I\u0027ve removed this task.\");","lastModifiedDate":"2023-09-09"},{"lineNumber":134,"author":{"gitId":"Chen-Kuei"},"content":" System.out.println(\"Now you have \" + taskCount + \" tasks in the list.\");","lastModifiedDate":"2023-09-09"},{"lineNumber":135,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":136,"author":{"gitId":"Chen-Kuei"},"content":" public void showTaskList(TaskList taskList) {","lastModifiedDate":"2023-09-09"},{"lineNumber":137,"author":{"gitId":"Chen-Kuei"},"content":" System.out.println(\"Here are the tasks in your list:\");","lastModifiedDate":"2023-09-09"},{"lineNumber":138,"author":{"gitId":"Chen-Kuei"},"content":" for (int i \u003d 0; i \u003c taskList.size(); i++) {","lastModifiedDate":"2023-09-09"},{"lineNumber":139,"author":{"gitId":"Chen-Kuei"},"content":" System.out.println((i + 1) + \". \" + taskList.getTask(i));","lastModifiedDate":"2023-09-09"},{"lineNumber":140,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":141,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":142,"author":{"gitId":"Chen-Kuei"},"content":" public void showTaskMarkedAsDone(Task task) {","lastModifiedDate":"2023-09-09"},{"lineNumber":143,"author":{"gitId":"Chen-Kuei"},"content":" System.out.println(\"Nice! I\u0027ve marked this task as done:\");","lastModifiedDate":"2023-09-09"},{"lineNumber":144,"author":{"gitId":"Chen-Kuei"},"content":" System.out.println(\" \" + task);","lastModifiedDate":"2023-09-09"},{"lineNumber":145,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":146,"author":{"gitId":"Chen-Kuei"},"content":" public void showTaskMarkedAsNotDone(Task task) {","lastModifiedDate":"2023-09-09"},{"lineNumber":147,"author":{"gitId":"Chen-Kuei"},"content":" System.out.println(\"Noted, I\u0027ve marked this task as not done yet:\");","lastModifiedDate":"2023-09-09"},{"lineNumber":148,"author":{"gitId":"Chen-Kuei"},"content":" System.out.println(\" \" + task);","lastModifiedDate":"2023-09-09"},{"lineNumber":149,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":150,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":151,"author":{"gitId":"Chen-Kuei"},"content":" public void showLoadingError() {","lastModifiedDate":"2023-09-09"},{"lineNumber":152,"author":{"gitId":"Chen-Kuei"},"content":" System.out.println(\"Error loading tasks from file.\");","lastModifiedDate":"2023-09-09"},{"lineNumber":153,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":154,"author":{"gitId":"Chen-Kuei"},"content":" public void showExit() {","lastModifiedDate":"2023-09-09"},{"lineNumber":155,"author":{"gitId":"Chen-Kuei"},"content":" System.out.println(\"Bye. Have a great day!\");","lastModifiedDate":"2023-09-09"},{"lineNumber":156,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":157,"author":{"gitId":"Chen-Kuei"},"content":"}","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"Chen-Kuei":157}},{"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":"-"},"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":"Chen-Kuei"},"content":" mainClass.set(\"duke.Duke\")","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":38,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"Chen-Kuei":1,"-":41}},{"path":"docs/duke.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"Chen-Kuei"},"content":"TODO | read book","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"Chen-Kuei"},"content":"DEADLINE | project | 2022-10-10","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"Chen-Kuei"},"content":"EVENT | meet | 2023-06-12 1400 | 2023-06-12 1600","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"Chen-Kuei"},"content":"TODO | return book","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"Chen-Kuei":4}},{"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-09"},{"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-09"},{"lineNumber":28,"author":{"gitId":"Chen-Kuei"},"content":" * Parses the deadline date from string.","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"Chen-Kuei"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"Chen-Kuei"},"content":" * @param deadlineString The deadline date string in \"yyyy-MM-dd\" format.","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"Chen-Kuei"},"content":" * @return The parsed deadline date as a LocalDate object, or null if parsing fails.","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"Chen-Kuei"},"content":" private LocalDate parseDeadline(String deadlineString) {","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":35,"author":{"gitId":"Chen-Kuei"},"content":" try {","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"Chen-Kuei"},"content":" if (!deadlineString.isEmpty()) {","lastModifiedDate":"2023-09-09"},{"lineNumber":37,"author":{"gitId":"Chen-Kuei"},"content":" return LocalDate.parse(deadlineString, DateTimeFormatter.ofPattern(\"yyyy-MM-dd\"));","lastModifiedDate":"2023-09-09"},{"lineNumber":38,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":39,"author":{"gitId":"Chen-Kuei"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"Chen-Kuei"},"content":" System.out.println(\"Error parsing date: \" + deadlineString);","lastModifiedDate":"2023-09-09"},{"lineNumber":41,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":42,"author":{"gitId":"Chen-Kuei"},"content":" return null;","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":" private String formatDeadline (LocalDate deadlineDate) {","lastModifiedDate":"2023-09-09"},{"lineNumber":46,"author":{"gitId":"Chen-Kuei"},"content":" if (deadlineDate \u003d\u003d null) {","lastModifiedDate":"2023-09-09"},{"lineNumber":47,"author":{"gitId":"Chen-Kuei"},"content":" return \"Invalid date.\";","lastModifiedDate":"2023-09-09"},{"lineNumber":48,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":49,"author":{"gitId":"Chen-Kuei"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"MMM dd yyyy\", Locale.ENGLISH);","lastModifiedDate":"2023-09-09"},{"lineNumber":50,"author":{"gitId":"Chen-Kuei"},"content":" return deadlineDate.format(formatter);","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-09"},{"lineNumber":53,"author":{"gitId":"Chen-Kuei"},"content":" private String saveFormatDeadline (LocalDate deadlineDate) {","lastModifiedDate":"2023-09-09"},{"lineNumber":54,"author":{"gitId":"Chen-Kuei"},"content":" if (deadlineDate \u003d\u003d null) {","lastModifiedDate":"2023-09-09"},{"lineNumber":55,"author":{"gitId":"Chen-Kuei"},"content":" return \"\";","lastModifiedDate":"2023-09-09"},{"lineNumber":56,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":57,"author":{"gitId":"Chen-Kuei"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd\");","lastModifiedDate":"2023-09-09"},{"lineNumber":58,"author":{"gitId":"Chen-Kuei"},"content":" return deadlineDate.format(formatter);","lastModifiedDate":"2023-09-09"},{"lineNumber":59,"author":{"gitId":"Chen-Kuei"},"content":" }","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":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":63,"author":{"gitId":"Chen-Kuei"},"content":" * Returns a string representation of the task for saving.","lastModifiedDate":"2023-09-09"},{"lineNumber":64,"author":{"gitId":"Chen-Kuei"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":65,"author":{"gitId":"Chen-Kuei"},"content":" * @return The formatted string representation of the task.","lastModifiedDate":"2023-09-09"},{"lineNumber":66,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":67,"author":{"gitId":"Chen-Kuei"},"content":" @Override","lastModifiedDate":"2023-09-08"},{"lineNumber":68,"author":{"gitId":"Chen-Kuei"},"content":" public String toDataString() {","lastModifiedDate":"2023-09-08"},{"lineNumber":69,"author":{"gitId":"Chen-Kuei"},"content":" return \"DEADLINE | \" + super.toDataString() + \" | \" + saveFormatDeadline(deadline);","lastModifiedDate":"2023-09-09"},{"lineNumber":70,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-08"},{"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":" * Returns a string representation of the task for display.","lastModifiedDate":"2023-09-09"},{"lineNumber":74,"author":{"gitId":"Chen-Kuei"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":75,"author":{"gitId":"Chen-Kuei"},"content":" * @return The formatted string representation fo the 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 toString() {","lastModifiedDate":"2023-09-03"},{"lineNumber":79,"author":{"gitId":"Chen-Kuei"},"content":" return \"[D]\" + super.toString() + \" (by: \" + formatDeadline(deadline) + \")\";","lastModifiedDate":"2023-09-09"},{"lineNumber":80,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":81,"author":{"gitId":"Chen-Kuei"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"Chen-Kuei":81}},{"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 java.io.BufferedReader;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"Chen-Kuei"},"content":"//import java.io.BufferedWriter;","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"Chen-Kuei"},"content":"//import java.io.File;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"Chen-Kuei"},"content":"//import java.io.FileReader;","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"Chen-Kuei"},"content":"//import java.io.FileWriter;","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"Chen-Kuei"},"content":"//import java.io.IOException;","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"Chen-Kuei"},"content":"//import java.util.ArrayList;","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"Chen-Kuei"},"content":"//import java.util.Scanner;","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"Chen-Kuei"},"content":"//","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"Chen-Kuei"},"content":"//public class duke.Duke {","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"Chen-Kuei"},"content":"// private static final int MAX_TASKS \u003d 100;","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"Chen-Kuei"},"content":"// private static ArrayList\u003cduke.Task\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"Chen-Kuei"},"content":"// // private static duke.Task[] tasks \u003d new duke.Task[MAX_TASKS];","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"Chen-Kuei"},"content":"// private static int taskCount\u003d 0;","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"Chen-Kuei"},"content":"// private static final String DATA_FILE_PATH \u003d \"./docs/duke.txt\";","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"Chen-Kuei"},"content":"// public enum TaskType {","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"Chen-Kuei"},"content":"// TODO, DEADLINE, EVENT","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"Chen-Kuei"},"content":"// }","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"Chen-Kuei"},"content":"// public enum TaskStatus {","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"Chen-Kuei"},"content":"// DONE, NOT_DONE","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"Chen-Kuei"},"content":"// }","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"Chen-Kuei"},"content":"// private static void addTask(String userCommand) {","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"Chen-Kuei"},"content":"// if (taskCount \u003c MAX_TASKS) {","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"Chen-Kuei"},"content":"// String[] parts \u003d userCommand.split(\" \", 2);","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"Chen-Kuei"},"content":"// if (parts.length \u003d\u003d 2) {","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"Chen-Kuei"},"content":"// String taskType \u003d parts[0].toLowerCase();","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"Chen-Kuei"},"content":"// String taskDescription \u003d parts[1];","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"Chen-Kuei"},"content":"//","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"Chen-Kuei"},"content":"// switch (taskType) {","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"Chen-Kuei"},"content":"// case \"todo\":","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"Chen-Kuei"},"content":"// tasks.add(new duke.Todo(taskDescription));","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"Chen-Kuei"},"content":"// taskCount++;","lastModifiedDate":"2023-09-09"},{"lineNumber":35,"author":{"gitId":"Chen-Kuei"},"content":"// if (taskCount \u003e 0) {","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"Chen-Kuei"},"content":"// System.out.println(\"Got it. I\u0027ve added this task:\");","lastModifiedDate":"2023-09-09"},{"lineNumber":37,"author":{"gitId":"Chen-Kuei"},"content":"// System.out.println(\" \" + tasks.get(taskCount - 1));","lastModifiedDate":"2023-09-09"},{"lineNumber":38,"author":{"gitId":"Chen-Kuei"},"content":"// System.out.println(\"Now you have \" + taskCount + \" tasks in the list.\");","lastModifiedDate":"2023-09-09"},{"lineNumber":39,"author":{"gitId":"Chen-Kuei"},"content":"// }","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"Chen-Kuei"},"content":"// break;","lastModifiedDate":"2023-09-09"},{"lineNumber":41,"author":{"gitId":"Chen-Kuei"},"content":"// case \"deadline\":","lastModifiedDate":"2023-09-09"},{"lineNumber":42,"author":{"gitId":"Chen-Kuei"},"content":"// String[] deadlineParts \u003d taskDescription.split(\" /by \");","lastModifiedDate":"2023-09-09"},{"lineNumber":43,"author":{"gitId":"Chen-Kuei"},"content":"// if (deadlineParts.length \u003d\u003d 2) {","lastModifiedDate":"2023-09-09"},{"lineNumber":44,"author":{"gitId":"Chen-Kuei"},"content":"// String deadlineTask \u003d deadlineParts[0];","lastModifiedDate":"2023-09-09"},{"lineNumber":45,"author":{"gitId":"Chen-Kuei"},"content":"// String deadlineTime \u003d deadlineParts[1];","lastModifiedDate":"2023-09-09"},{"lineNumber":46,"author":{"gitId":"Chen-Kuei"},"content":"// if (deadlineTask.trim().isEmpty()) {","lastModifiedDate":"2023-09-09"},{"lineNumber":47,"author":{"gitId":"Chen-Kuei"},"content":"// System.out.println(\"What kind of deadline do you have??\");","lastModifiedDate":"2023-09-09"},{"lineNumber":48,"author":{"gitId":"Chen-Kuei"},"content":"// } else if (deadlineTime.trim().isEmpty()) {","lastModifiedDate":"2023-09-09"},{"lineNumber":49,"author":{"gitId":"Chen-Kuei"},"content":"// System.out.println(\"Can you tell me when is your deadline??\");","lastModifiedDate":"2023-09-09"},{"lineNumber":50,"author":{"gitId":"Chen-Kuei"},"content":"// } else {","lastModifiedDate":"2023-09-09"},{"lineNumber":51,"author":{"gitId":"Chen-Kuei"},"content":"// tasks.add(new duke.Deadline(deadlineParts[0], deadlineParts[1]));","lastModifiedDate":"2023-09-09"},{"lineNumber":52,"author":{"gitId":"Chen-Kuei"},"content":"// taskCount++;","lastModifiedDate":"2023-09-09"},{"lineNumber":53,"author":{"gitId":"Chen-Kuei"},"content":"// }","lastModifiedDate":"2023-09-09"},{"lineNumber":54,"author":{"gitId":"Chen-Kuei"},"content":"// if (taskCount \u003e 0) {","lastModifiedDate":"2023-09-09"},{"lineNumber":55,"author":{"gitId":"Chen-Kuei"},"content":"// System.out.println(\"Got it. I\u0027ve added this task:\");","lastModifiedDate":"2023-09-09"},{"lineNumber":56,"author":{"gitId":"Chen-Kuei"},"content":"// System.out.println(\" \" + tasks.get(taskCount - 1));","lastModifiedDate":"2023-09-09"},{"lineNumber":57,"author":{"gitId":"Chen-Kuei"},"content":"// System.out.println(\"Now you have \" + taskCount + \" tasks in the list.\");","lastModifiedDate":"2023-09-09"},{"lineNumber":58,"author":{"gitId":"Chen-Kuei"},"content":"// }","lastModifiedDate":"2023-09-09"},{"lineNumber":59,"author":{"gitId":"Chen-Kuei"},"content":"// } else {","lastModifiedDate":"2023-09-09"},{"lineNumber":60,"author":{"gitId":"Chen-Kuei"},"content":"// System.out.println(\"Invalid deadline format.\");","lastModifiedDate":"2023-09-09"},{"lineNumber":61,"author":{"gitId":"Chen-Kuei"},"content":"// }","lastModifiedDate":"2023-09-09"},{"lineNumber":62,"author":{"gitId":"Chen-Kuei"},"content":"// break;","lastModifiedDate":"2023-09-09"},{"lineNumber":63,"author":{"gitId":"Chen-Kuei"},"content":"// case \"event\":","lastModifiedDate":"2023-09-09"},{"lineNumber":64,"author":{"gitId":"Chen-Kuei"},"content":"// String[] eventParts \u003d taskDescription.split(\" /from | /to \");","lastModifiedDate":"2023-09-09"},{"lineNumber":65,"author":{"gitId":"Chen-Kuei"},"content":"// if (eventParts.length \u003d\u003d 3) {","lastModifiedDate":"2023-09-09"},{"lineNumber":66,"author":{"gitId":"Chen-Kuei"},"content":"// String eventTask \u003d eventParts[0];","lastModifiedDate":"2023-09-09"},{"lineNumber":67,"author":{"gitId":"Chen-Kuei"},"content":"// String eventStartTime \u003d eventParts[1];","lastModifiedDate":"2023-09-09"},{"lineNumber":68,"author":{"gitId":"Chen-Kuei"},"content":"// String eventEndTime \u003d eventParts[2];","lastModifiedDate":"2023-09-09"},{"lineNumber":69,"author":{"gitId":"Chen-Kuei"},"content":"// if (eventTask.trim().isEmpty()) {","lastModifiedDate":"2023-09-09"},{"lineNumber":70,"author":{"gitId":"Chen-Kuei"},"content":"// System.out.println(\"What event do you have?\");","lastModifiedDate":"2023-09-09"},{"lineNumber":71,"author":{"gitId":"Chen-Kuei"},"content":"// } else if (eventStartTime.trim().isEmpty()) {","lastModifiedDate":"2023-09-09"},{"lineNumber":72,"author":{"gitId":"Chen-Kuei"},"content":"// System.out.println(\"When will the event start?\");","lastModifiedDate":"2023-09-09"},{"lineNumber":73,"author":{"gitId":"Chen-Kuei"},"content":"// } else if (eventEndTime.trim().isEmpty()) {","lastModifiedDate":"2023-09-09"},{"lineNumber":74,"author":{"gitId":"Chen-Kuei"},"content":"// System.out.println(\"When will the event end?\");","lastModifiedDate":"2023-09-09"},{"lineNumber":75,"author":{"gitId":"Chen-Kuei"},"content":"// } else {","lastModifiedDate":"2023-09-09"},{"lineNumber":76,"author":{"gitId":"Chen-Kuei"},"content":"// tasks.add(new duke.Event(eventParts[0], eventParts[1], eventParts[2]));","lastModifiedDate":"2023-09-09"},{"lineNumber":77,"author":{"gitId":"Chen-Kuei"},"content":"// taskCount++;","lastModifiedDate":"2023-09-09"},{"lineNumber":78,"author":{"gitId":"Chen-Kuei"},"content":"// }","lastModifiedDate":"2023-09-09"},{"lineNumber":79,"author":{"gitId":"Chen-Kuei"},"content":"// if (taskCount \u003e 0) {","lastModifiedDate":"2023-09-09"},{"lineNumber":80,"author":{"gitId":"Chen-Kuei"},"content":"// System.out.println(\"Got it. I\u0027ve added this task:\");","lastModifiedDate":"2023-09-09"},{"lineNumber":81,"author":{"gitId":"Chen-Kuei"},"content":"// System.out.println(\" \" + tasks.get(taskCount - 1));","lastModifiedDate":"2023-09-09"},{"lineNumber":82,"author":{"gitId":"Chen-Kuei"},"content":"// System.out.println(\"Now you have \" + taskCount + \" tasks in the list.\");","lastModifiedDate":"2023-09-09"},{"lineNumber":83,"author":{"gitId":"Chen-Kuei"},"content":"// }","lastModifiedDate":"2023-09-09"},{"lineNumber":84,"author":{"gitId":"Chen-Kuei"},"content":"// } else {","lastModifiedDate":"2023-09-09"},{"lineNumber":85,"author":{"gitId":"Chen-Kuei"},"content":"// System.out.println(\"Invalid event format.\");","lastModifiedDate":"2023-09-09"},{"lineNumber":86,"author":{"gitId":"Chen-Kuei"},"content":"// }","lastModifiedDate":"2023-09-09"},{"lineNumber":87,"author":{"gitId":"Chen-Kuei"},"content":"// break;","lastModifiedDate":"2023-09-09"},{"lineNumber":88,"author":{"gitId":"Chen-Kuei"},"content":"// default:","lastModifiedDate":"2023-09-09"},{"lineNumber":89,"author":{"gitId":"Chen-Kuei"},"content":"// System.out.println(\"Invalid command format.\");","lastModifiedDate":"2023-09-09"},{"lineNumber":90,"author":{"gitId":"Chen-Kuei"},"content":"// break;","lastModifiedDate":"2023-09-09"},{"lineNumber":91,"author":{"gitId":"Chen-Kuei"},"content":"// }","lastModifiedDate":"2023-09-09"},{"lineNumber":92,"author":{"gitId":"Chen-Kuei"},"content":"//","lastModifiedDate":"2023-09-09"},{"lineNumber":93,"author":{"gitId":"Chen-Kuei"},"content":"// } else {","lastModifiedDate":"2023-09-09"},{"lineNumber":94,"author":{"gitId":"Chen-Kuei"},"content":"// if (parts[0].equalsIgnoreCase(\"todo\")) {","lastModifiedDate":"2023-09-09"},{"lineNumber":95,"author":{"gitId":"Chen-Kuei"},"content":"// System.out.println(\"What you want to do?\");","lastModifiedDate":"2023-09-09"},{"lineNumber":96,"author":{"gitId":"Chen-Kuei"},"content":"// } else if (parts[0].equalsIgnoreCase(\"deadline\")) {","lastModifiedDate":"2023-09-09"},{"lineNumber":97,"author":{"gitId":"Chen-Kuei"},"content":"// System.out.println(\"What deadline do you have??\");","lastModifiedDate":"2023-09-09"},{"lineNumber":98,"author":{"gitId":"Chen-Kuei"},"content":"// } else if (parts[0].equalsIgnoreCase(\"event\")) {","lastModifiedDate":"2023-09-09"},{"lineNumber":99,"author":{"gitId":"Chen-Kuei"},"content":"// System.out.println(\"What event are you going to attend??\");","lastModifiedDate":"2023-09-09"},{"lineNumber":100,"author":{"gitId":"Chen-Kuei"},"content":"// } else {","lastModifiedDate":"2023-09-09"},{"lineNumber":101,"author":{"gitId":"Chen-Kuei"},"content":"// System.out.println(\"Sorry, I don\u0027t know what that means :(\");","lastModifiedDate":"2023-09-09"},{"lineNumber":102,"author":{"gitId":"Chen-Kuei"},"content":"// }","lastModifiedDate":"2023-09-09"},{"lineNumber":103,"author":{"gitId":"Chen-Kuei"},"content":"// }","lastModifiedDate":"2023-09-09"},{"lineNumber":104,"author":{"gitId":"Chen-Kuei"},"content":"// } else {","lastModifiedDate":"2023-09-09"},{"lineNumber":105,"author":{"gitId":"Chen-Kuei"},"content":"// System.out.println(\"Sorry, the task list is full.\");","lastModifiedDate":"2023-09-09"},{"lineNumber":106,"author":{"gitId":"Chen-Kuei"},"content":"// }","lastModifiedDate":"2023-09-09"},{"lineNumber":107,"author":{"gitId":"Chen-Kuei"},"content":"// }","lastModifiedDate":"2023-09-09"},{"lineNumber":108,"author":{"gitId":"Chen-Kuei"},"content":"// private static void deleteTask (String userCommand) {","lastModifiedDate":"2023-09-09"},{"lineNumber":109,"author":{"gitId":"Chen-Kuei"},"content":"// try {","lastModifiedDate":"2023-09-09"},{"lineNumber":110,"author":{"gitId":"Chen-Kuei"},"content":"// int index \u003d Integer.parseInt(userCommand.split(\" \")[1]) - 1;","lastModifiedDate":"2023-09-09"},{"lineNumber":111,"author":{"gitId":"Chen-Kuei"},"content":"// if (index \u003e\u003d 1 \u0026\u0026 index \u003c\u003d taskCount) {","lastModifiedDate":"2023-09-09"},{"lineNumber":112,"author":{"gitId":"Chen-Kuei"},"content":"// duke.Task removedTask \u003d tasks.remove(index);","lastModifiedDate":"2023-09-09"},{"lineNumber":113,"author":{"gitId":"Chen-Kuei"},"content":"// taskCount--;","lastModifiedDate":"2023-09-09"},{"lineNumber":114,"author":{"gitId":"Chen-Kuei"},"content":"// System.out.println(\"OK, I\u0027ve removed this task.\");","lastModifiedDate":"2023-09-09"},{"lineNumber":115,"author":{"gitId":"Chen-Kuei"},"content":"// } else {","lastModifiedDate":"2023-09-09"},{"lineNumber":116,"author":{"gitId":"Chen-Kuei"},"content":"// System.out.println(\"Invalid task index.\");","lastModifiedDate":"2023-09-09"},{"lineNumber":117,"author":{"gitId":"Chen-Kuei"},"content":"// }","lastModifiedDate":"2023-09-09"},{"lineNumber":118,"author":{"gitId":"Chen-Kuei"},"content":"// } catch (NumberFormatException | IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-09"},{"lineNumber":119,"author":{"gitId":"Chen-Kuei"},"content":"// System.out.println(\"Invalid command format.\");","lastModifiedDate":"2023-09-09"},{"lineNumber":120,"author":{"gitId":"Chen-Kuei"},"content":"// }","lastModifiedDate":"2023-09-09"},{"lineNumber":121,"author":{"gitId":"Chen-Kuei"},"content":"//","lastModifiedDate":"2023-09-09"},{"lineNumber":122,"author":{"gitId":"Chen-Kuei"},"content":"// }","lastModifiedDate":"2023-09-09"},{"lineNumber":123,"author":{"gitId":"Chen-Kuei"},"content":"// private static void listTasks() {","lastModifiedDate":"2023-09-09"},{"lineNumber":124,"author":{"gitId":"Chen-Kuei"},"content":"// if (taskCount \u003d\u003d 0) {","lastModifiedDate":"2023-09-09"},{"lineNumber":125,"author":{"gitId":"Chen-Kuei"},"content":"// System.out.println(\"The task list is empty!\");","lastModifiedDate":"2023-09-09"},{"lineNumber":126,"author":{"gitId":"Chen-Kuei"},"content":"// } else {","lastModifiedDate":"2023-09-09"},{"lineNumber":127,"author":{"gitId":"Chen-Kuei"},"content":"// for(int i \u003d 0; i \u003c taskCount; i++) {","lastModifiedDate":"2023-09-09"},{"lineNumber":128,"author":{"gitId":"Chen-Kuei"},"content":"// System.out.println((i + 1) + \". \" + tasks.get(i));","lastModifiedDate":"2023-09-09"},{"lineNumber":129,"author":{"gitId":"Chen-Kuei"},"content":"// }","lastModifiedDate":"2023-09-09"},{"lineNumber":130,"author":{"gitId":"Chen-Kuei"},"content":"// }","lastModifiedDate":"2023-09-09"},{"lineNumber":131,"author":{"gitId":"Chen-Kuei"},"content":"// }","lastModifiedDate":"2023-09-09"},{"lineNumber":132,"author":{"gitId":"Chen-Kuei"},"content":"// private static boolean isValidTaskIndex(int taskIndex) {","lastModifiedDate":"2023-09-09"},{"lineNumber":133,"author":{"gitId":"Chen-Kuei"},"content":"// return taskIndex \u003e\u003d 0 \u0026\u0026 taskIndex \u003c taskCount;","lastModifiedDate":"2023-09-09"},{"lineNumber":134,"author":{"gitId":"Chen-Kuei"},"content":"// }","lastModifiedDate":"2023-09-09"},{"lineNumber":135,"author":{"gitId":"Chen-Kuei"},"content":"// private static void markTask(String userCommand) {","lastModifiedDate":"2023-09-09"},{"lineNumber":136,"author":{"gitId":"Chen-Kuei"},"content":"// try {","lastModifiedDate":"2023-09-09"},{"lineNumber":137,"author":{"gitId":"Chen-Kuei"},"content":"// int taskIndex \u003d Integer.parseInt(userCommand.split(\" \")[1]) - 1;","lastModifiedDate":"2023-09-09"},{"lineNumber":138,"author":{"gitId":"Chen-Kuei"},"content":"// if (isValidTaskIndex(taskIndex)) {","lastModifiedDate":"2023-09-09"},{"lineNumber":139,"author":{"gitId":"Chen-Kuei"},"content":"// duke.Task taskToMark \u003d tasks.get(taskIndex);","lastModifiedDate":"2023-09-09"},{"lineNumber":140,"author":{"gitId":"Chen-Kuei"},"content":"// taskToMark.markAsDone();","lastModifiedDate":"2023-09-09"},{"lineNumber":141,"author":{"gitId":"Chen-Kuei"},"content":"// System.out.println(\"Nice! I\u0027ve marked this task as done:\\n \" + taskToMark);","lastModifiedDate":"2023-09-09"},{"lineNumber":142,"author":{"gitId":"Chen-Kuei"},"content":"// } else {","lastModifiedDate":"2023-09-09"},{"lineNumber":143,"author":{"gitId":"Chen-Kuei"},"content":"// System.out.println(\"Invalid task number. Please enter a valid task number.\");","lastModifiedDate":"2023-09-09"},{"lineNumber":144,"author":{"gitId":"Chen-Kuei"},"content":"// }","lastModifiedDate":"2023-09-09"},{"lineNumber":145,"author":{"gitId":"Chen-Kuei"},"content":"// } catch (NumberFormatException | ArrayIndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-09"},{"lineNumber":146,"author":{"gitId":"Chen-Kuei"},"content":"// System.out.println(\"Invalid command format. Please use \u0027mark [task number]\u0027.\");","lastModifiedDate":"2023-09-09"},{"lineNumber":147,"author":{"gitId":"Chen-Kuei"},"content":"// }","lastModifiedDate":"2023-09-09"},{"lineNumber":148,"author":{"gitId":"Chen-Kuei"},"content":"// }","lastModifiedDate":"2023-09-09"},{"lineNumber":149,"author":{"gitId":"Chen-Kuei"},"content":"// private static void unmarkTask(String userCommand) {","lastModifiedDate":"2023-09-09"},{"lineNumber":150,"author":{"gitId":"Chen-Kuei"},"content":"// try {","lastModifiedDate":"2023-09-09"},{"lineNumber":151,"author":{"gitId":"Chen-Kuei"},"content":"// int taskIndex \u003d Integer.parseInt(userCommand.split(\" \")[1]) - 1;","lastModifiedDate":"2023-09-09"},{"lineNumber":152,"author":{"gitId":"Chen-Kuei"},"content":"// if (isValidTaskIndex(taskIndex)) {","lastModifiedDate":"2023-09-09"},{"lineNumber":153,"author":{"gitId":"Chen-Kuei"},"content":"// duke.Task taskToUnmark \u003d tasks.get(taskIndex);","lastModifiedDate":"2023-09-09"},{"lineNumber":154,"author":{"gitId":"Chen-Kuei"},"content":"// taskToUnmark.markAsNotDone();","lastModifiedDate":"2023-09-09"},{"lineNumber":155,"author":{"gitId":"Chen-Kuei"},"content":"// System.out.println(\"OK, I\u0027ve marked this task as not done yet:\\n \" + taskToUnmark);","lastModifiedDate":"2023-09-09"},{"lineNumber":156,"author":{"gitId":"Chen-Kuei"},"content":"// } else {","lastModifiedDate":"2023-09-09"},{"lineNumber":157,"author":{"gitId":"Chen-Kuei"},"content":"// System.out.println(\"Invalid task number. Please enter a valid task number.\");","lastModifiedDate":"2023-09-09"},{"lineNumber":158,"author":{"gitId":"Chen-Kuei"},"content":"// }","lastModifiedDate":"2023-09-09"},{"lineNumber":159,"author":{"gitId":"Chen-Kuei"},"content":"// } catch (NumberFormatException | ArrayIndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-09"},{"lineNumber":160,"author":{"gitId":"Chen-Kuei"},"content":"// System.out.println(\"Invalid command format. Please use \u0027unmark [task number]\u0027.\");","lastModifiedDate":"2023-09-09"},{"lineNumber":161,"author":{"gitId":"Chen-Kuei"},"content":"// }","lastModifiedDate":"2023-09-09"},{"lineNumber":162,"author":{"gitId":"Chen-Kuei"},"content":"// }","lastModifiedDate":"2023-09-09"},{"lineNumber":163,"author":{"gitId":"Chen-Kuei"},"content":"//","lastModifiedDate":"2023-09-09"},{"lineNumber":164,"author":{"gitId":"Chen-Kuei"},"content":"// private static void loadTasks() {","lastModifiedDate":"2023-09-09"},{"lineNumber":165,"author":{"gitId":"Chen-Kuei"},"content":"// File file \u003d new File(DATA_FILE_PATH);","lastModifiedDate":"2023-09-09"},{"lineNumber":166,"author":{"gitId":"Chen-Kuei"},"content":"//","lastModifiedDate":"2023-09-09"},{"lineNumber":167,"author":{"gitId":"Chen-Kuei"},"content":"// if (file.exists()) {","lastModifiedDate":"2023-09-09"},{"lineNumber":168,"author":{"gitId":"Chen-Kuei"},"content":"// try (BufferedReader reader \u003d new BufferedReader(new FileReader(file))) {","lastModifiedDate":"2023-09-09"},{"lineNumber":169,"author":{"gitId":"Chen-Kuei"},"content":"// String line;","lastModifiedDate":"2023-09-09"},{"lineNumber":170,"author":{"gitId":"Chen-Kuei"},"content":"// while ((line \u003d reader.readLine()) !\u003d null) {","lastModifiedDate":"2023-09-09"},{"lineNumber":171,"author":{"gitId":"Chen-Kuei"},"content":"// String[] taskData \u003d line.split(\" \\\\| \");","lastModifiedDate":"2023-09-09"},{"lineNumber":172,"author":{"gitId":"Chen-Kuei"},"content":"// if (taskData.length \u003e\u003d 2) {","lastModifiedDate":"2023-09-09"},{"lineNumber":173,"author":{"gitId":"Chen-Kuei"},"content":"// TaskType taskType \u003d TaskType.valueOf(taskData[0]);","lastModifiedDate":"2023-09-09"},{"lineNumber":174,"author":{"gitId":"Chen-Kuei"},"content":"// String taskDescription \u003d taskData[1];","lastModifiedDate":"2023-09-09"},{"lineNumber":175,"author":{"gitId":"Chen-Kuei"},"content":"// String taskTime1 \u003d (taskData.length \u003e 2) ? taskData[2] : \"\";","lastModifiedDate":"2023-09-09"},{"lineNumber":176,"author":{"gitId":"Chen-Kuei"},"content":"// String taskTime2 \u003d (taskData.length \u003e 3) ? taskData[3] : \"\";","lastModifiedDate":"2023-09-09"},{"lineNumber":177,"author":{"gitId":"Chen-Kuei"},"content":"//","lastModifiedDate":"2023-09-09"},{"lineNumber":178,"author":{"gitId":"Chen-Kuei"},"content":"// switch (taskType) {","lastModifiedDate":"2023-09-09"},{"lineNumber":179,"author":{"gitId":"Chen-Kuei"},"content":"// case TODO:","lastModifiedDate":"2023-09-09"},{"lineNumber":180,"author":{"gitId":"Chen-Kuei"},"content":"// tasks.add(new duke.Todo(taskDescription));","lastModifiedDate":"2023-09-09"},{"lineNumber":181,"author":{"gitId":"Chen-Kuei"},"content":"// break;","lastModifiedDate":"2023-09-09"},{"lineNumber":182,"author":{"gitId":"Chen-Kuei"},"content":"// case DEADLINE:","lastModifiedDate":"2023-09-09"},{"lineNumber":183,"author":{"gitId":"Chen-Kuei"},"content":"// tasks.add(new duke.Deadline(taskDescription, taskTime1));","lastModifiedDate":"2023-09-09"},{"lineNumber":184,"author":{"gitId":"Chen-Kuei"},"content":"// break;","lastModifiedDate":"2023-09-09"},{"lineNumber":185,"author":{"gitId":"Chen-Kuei"},"content":"// case EVENT:","lastModifiedDate":"2023-09-09"},{"lineNumber":186,"author":{"gitId":"Chen-Kuei"},"content":"// tasks.add(new duke.Event(taskDescription, taskTime1, taskTime2));","lastModifiedDate":"2023-09-09"},{"lineNumber":187,"author":{"gitId":"Chen-Kuei"},"content":"// break;","lastModifiedDate":"2023-09-09"},{"lineNumber":188,"author":{"gitId":"Chen-Kuei"},"content":"// default:","lastModifiedDate":"2023-09-09"},{"lineNumber":189,"author":{"gitId":"Chen-Kuei"},"content":"// System.out.println(\"Invalid task type: \" + taskType);","lastModifiedDate":"2023-09-09"},{"lineNumber":190,"author":{"gitId":"Chen-Kuei"},"content":"// break;","lastModifiedDate":"2023-09-09"},{"lineNumber":191,"author":{"gitId":"Chen-Kuei"},"content":"// }","lastModifiedDate":"2023-09-09"},{"lineNumber":192,"author":{"gitId":"Chen-Kuei"},"content":"// taskCount++;","lastModifiedDate":"2023-09-09"},{"lineNumber":193,"author":{"gitId":"Chen-Kuei"},"content":"// } else {","lastModifiedDate":"2023-09-09"},{"lineNumber":194,"author":{"gitId":"Chen-Kuei"},"content":"// System.out.println(\"Skipping corrupted task data: \" + line);","lastModifiedDate":"2023-09-09"},{"lineNumber":195,"author":{"gitId":"Chen-Kuei"},"content":"// }","lastModifiedDate":"2023-09-09"},{"lineNumber":196,"author":{"gitId":"Chen-Kuei"},"content":"// }","lastModifiedDate":"2023-09-09"},{"lineNumber":197,"author":{"gitId":"Chen-Kuei"},"content":"// } catch (IOException e) {","lastModifiedDate":"2023-09-09"},{"lineNumber":198,"author":{"gitId":"Chen-Kuei"},"content":"// System.out.println(\"Error loading tasks.\");","lastModifiedDate":"2023-09-09"},{"lineNumber":199,"author":{"gitId":"Chen-Kuei"},"content":"// }","lastModifiedDate":"2023-09-09"},{"lineNumber":200,"author":{"gitId":"Chen-Kuei"},"content":"// } else {","lastModifiedDate":"2023-09-09"},{"lineNumber":201,"author":{"gitId":"Chen-Kuei"},"content":"// System.out.println(\"Data file does not exist.\");","lastModifiedDate":"2023-09-09"},{"lineNumber":202,"author":{"gitId":"Chen-Kuei"},"content":"// }","lastModifiedDate":"2023-09-09"},{"lineNumber":203,"author":{"gitId":"Chen-Kuei"},"content":"// }","lastModifiedDate":"2023-09-09"},{"lineNumber":204,"author":{"gitId":"Chen-Kuei"},"content":"//","lastModifiedDate":"2023-09-09"},{"lineNumber":205,"author":{"gitId":"Chen-Kuei"},"content":"// private static void saveTask() {","lastModifiedDate":"2023-09-09"},{"lineNumber":206,"author":{"gitId":"Chen-Kuei"},"content":"// File file \u003d new File(DATA_FILE_PATH);","lastModifiedDate":"2023-09-09"},{"lineNumber":207,"author":{"gitId":"Chen-Kuei"},"content":"// file.getParentFile().mkdirs();","lastModifiedDate":"2023-09-09"},{"lineNumber":208,"author":{"gitId":"Chen-Kuei"},"content":"//","lastModifiedDate":"2023-09-09"},{"lineNumber":209,"author":{"gitId":"Chen-Kuei"},"content":"// try (BufferedWriter writer \u003d new BufferedWriter(new FileWriter(file))) {","lastModifiedDate":"2023-09-09"},{"lineNumber":210,"author":{"gitId":"Chen-Kuei"},"content":"// for (duke.Task task : tasks) {","lastModifiedDate":"2023-09-09"},{"lineNumber":211,"author":{"gitId":"Chen-Kuei"},"content":"// writer.write(task.toDataString());","lastModifiedDate":"2023-09-09"},{"lineNumber":212,"author":{"gitId":"Chen-Kuei"},"content":"// writer.newLine();","lastModifiedDate":"2023-09-09"},{"lineNumber":213,"author":{"gitId":"Chen-Kuei"},"content":"// }","lastModifiedDate":"2023-09-09"},{"lineNumber":214,"author":{"gitId":"Chen-Kuei"},"content":"// } catch (IOException e) {","lastModifiedDate":"2023-09-09"},{"lineNumber":215,"author":{"gitId":"Chen-Kuei"},"content":"// System.out.println(\"Error saving tasks.\");","lastModifiedDate":"2023-09-09"},{"lineNumber":216,"author":{"gitId":"Chen-Kuei"},"content":"// }","lastModifiedDate":"2023-09-09"},{"lineNumber":217,"author":{"gitId":"Chen-Kuei"},"content":"// }","lastModifiedDate":"2023-09-09"},{"lineNumber":218,"author":{"gitId":"Chen-Kuei"},"content":"//","lastModifiedDate":"2023-09-09"},{"lineNumber":219,"author":{"gitId":"Chen-Kuei"},"content":"// public static void main(String[] args) {","lastModifiedDate":"2023-09-09"},{"lineNumber":220,"author":{"gitId":"Chen-Kuei"},"content":"// loadTasks(); // Load tasks from duke.txt","lastModifiedDate":"2023-09-09"},{"lineNumber":221,"author":{"gitId":"Chen-Kuei"},"content":"//","lastModifiedDate":"2023-09-09"},{"lineNumber":222,"author":{"gitId":"Chen-Kuei"},"content":"// String greeting \u003d \"Hi, I\u0027m BiuBiu.\\nWhat can I do for you?\";","lastModifiedDate":"2023-09-09"},{"lineNumber":223,"author":{"gitId":"Chen-Kuei"},"content":"// System.out.println(greeting);","lastModifiedDate":"2023-09-09"},{"lineNumber":224,"author":{"gitId":"Chen-Kuei"},"content":"// String exit \u003d \"Bye. Have a great day!\";","lastModifiedDate":"2023-09-09"},{"lineNumber":225,"author":{"gitId":"Chen-Kuei"},"content":"//","lastModifiedDate":"2023-09-09"},{"lineNumber":226,"author":{"gitId":"Chen-Kuei"},"content":"// Scanner scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-09"},{"lineNumber":227,"author":{"gitId":"Chen-Kuei"},"content":"// while(true) {","lastModifiedDate":"2023-09-09"},{"lineNumber":228,"author":{"gitId":"Chen-Kuei"},"content":"// String userCommand \u003d scanner.nextLine();","lastModifiedDate":"2023-09-09"},{"lineNumber":229,"author":{"gitId":"Chen-Kuei"},"content":"// if(userCommand.equalsIgnoreCase(\"bye\")) {","lastModifiedDate":"2023-09-09"},{"lineNumber":230,"author":{"gitId":"Chen-Kuei"},"content":"// System.out.println(exit);","lastModifiedDate":"2023-09-09"},{"lineNumber":231,"author":{"gitId":"Chen-Kuei"},"content":"// break;","lastModifiedDate":"2023-09-09"},{"lineNumber":232,"author":{"gitId":"Chen-Kuei"},"content":"// } else if (userCommand.equalsIgnoreCase(\"list\")) {","lastModifiedDate":"2023-09-09"},{"lineNumber":233,"author":{"gitId":"Chen-Kuei"},"content":"// System.out.println(\"Here are the tasks in your list:\");","lastModifiedDate":"2023-09-09"},{"lineNumber":234,"author":{"gitId":"Chen-Kuei"},"content":"// listTasks();","lastModifiedDate":"2023-09-09"},{"lineNumber":235,"author":{"gitId":"Chen-Kuei"},"content":"// } else if (userCommand.startsWith(\"mark \")) {","lastModifiedDate":"2023-09-09"},{"lineNumber":236,"author":{"gitId":"Chen-Kuei"},"content":"// markTask(userCommand);","lastModifiedDate":"2023-09-09"},{"lineNumber":237,"author":{"gitId":"Chen-Kuei"},"content":"// } else if (userCommand.startsWith(\"unmark \")) {","lastModifiedDate":"2023-09-09"},{"lineNumber":238,"author":{"gitId":"Chen-Kuei"},"content":"// unmarkTask(userCommand);","lastModifiedDate":"2023-09-09"},{"lineNumber":239,"author":{"gitId":"Chen-Kuei"},"content":"// } else if (userCommand.startsWith(\"delete \")) {","lastModifiedDate":"2023-09-09"},{"lineNumber":240,"author":{"gitId":"Chen-Kuei"},"content":"// deleteTask(userCommand);","lastModifiedDate":"2023-09-09"},{"lineNumber":241,"author":{"gitId":"Chen-Kuei"},"content":"// }else {","lastModifiedDate":"2023-09-09"},{"lineNumber":242,"author":{"gitId":"Chen-Kuei"},"content":"// addTask(userCommand);","lastModifiedDate":"2023-09-09"},{"lineNumber":243,"author":{"gitId":"Chen-Kuei"},"content":"// }","lastModifiedDate":"2023-09-09"},{"lineNumber":244,"author":{"gitId":"Chen-Kuei"},"content":"// saveTask();","lastModifiedDate":"2023-09-09"},{"lineNumber":245,"author":{"gitId":"Chen-Kuei"},"content":"// }","lastModifiedDate":"2023-09-09"},{"lineNumber":246,"author":{"gitId":"Chen-Kuei"},"content":"// }","lastModifiedDate":"2023-09-09"},{"lineNumber":247,"author":{"gitId":"Chen-Kuei"},"content":"//}","lastModifiedDate":"2023-09-09"},{"lineNumber":248,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":249,"author":{"gitId":"Chen-Kuei"},"content":" private static final int MAX_TASKS \u003d 100;","lastModifiedDate":"2023-09-03"},{"lineNumber":250,"author":{"gitId":"Chen-Kuei"},"content":" private static final String DATA_FILE_PATH \u003d \"./docs/duke.txt\";","lastModifiedDate":"2023-09-08"},{"lineNumber":251,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":252,"author":{"gitId":"Chen-Kuei"},"content":" private static TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-09-09"},{"lineNumber":253,"author":{"gitId":"Chen-Kuei"},"content":" private static Ui ui \u003d new Ui();","lastModifiedDate":"2023-09-09"},{"lineNumber":254,"author":{"gitId":"Chen-Kuei"},"content":" private static Storage storage \u003d new Storage(\"./docs/duke.txt\");","lastModifiedDate":"2023-09-09"},{"lineNumber":255,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":256,"author":{"gitId":"Chen-Kuei"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":257,"author":{"gitId":"Chen-Kuei"},"content":" * The main entry point of the Duke program.","lastModifiedDate":"2023-09-09"},{"lineNumber":258,"author":{"gitId":"Chen-Kuei"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":259,"author":{"gitId":"Chen-Kuei"},"content":" * @param args Command-line arguments (not used).","lastModifiedDate":"2023-09-09"},{"lineNumber":260,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":261,"author":{"gitId":"Chen-Kuei"},"content":" public static void main (String[] args) {","lastModifiedDate":"2023-09-09"},{"lineNumber":262,"author":{"gitId":"Chen-Kuei"},"content":" ui.showWelcome();","lastModifiedDate":"2023-09-09"},{"lineNumber":263,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":264,"author":{"gitId":"Chen-Kuei"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":265,"author":{"gitId":"Chen-Kuei"},"content":" tasks \u003d ui.loadTasks(\"./docs/duke.txt\");","lastModifiedDate":"2023-09-09"},{"lineNumber":266,"author":{"gitId":"Chen-Kuei"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-09"},{"lineNumber":267,"author":{"gitId":"Chen-Kuei"},"content":" ui.showLoadingError();","lastModifiedDate":"2023-09-09"},{"lineNumber":268,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":269,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":270,"author":{"gitId":"Chen-Kuei"},"content":" boolean isExit \u003d false;","lastModifiedDate":"2023-09-09"},{"lineNumber":271,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":272,"author":{"gitId":"Chen-Kuei"},"content":" while (!isExit) {","lastModifiedDate":"2023-09-09"},{"lineNumber":273,"author":{"gitId":"Chen-Kuei"},"content":" String userCommand \u003d ui.readCommand();","lastModifiedDate":"2023-09-09"},{"lineNumber":274,"author":{"gitId":"Chen-Kuei"},"content":" isExit \u003d ui.handleCommand(userCommand, tasks, storage);","lastModifiedDate":"2023-09-09"},{"lineNumber":275,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":276,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":277,"author":{"gitId":"Chen-Kuei"},"content":"}","lastModifiedDate":"2023-09-08"},{"lineNumber":278,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":279,"author":{"gitId":"Chen-Kuei"},"content":"/*","lastModifiedDate":"2023-09-09"},{"lineNumber":280,"author":{"gitId":"Chen-Kuei"},"content":"TODO | read book","lastModifiedDate":"2023-09-09"},{"lineNumber":281,"author":{"gitId":"Chen-Kuei"},"content":"DEADLINE | project | 2022-10-10","lastModifiedDate":"2023-09-09"},{"lineNumber":282,"author":{"gitId":"Chen-Kuei"},"content":"EVENT | meeting | 2023-06-12 1400 | 2023-06-12 1800","lastModifiedDate":"2023-09-09"},{"lineNumber":283,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"Chen-Kuei":282,"-":1}},{"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":" // protected String from;","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"Chen-Kuei"},"content":" // protected String to;","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"Chen-Kuei"},"content":" private LocalDateTime startTime;","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"Chen-Kuei"},"content":" private LocalDateTime endTime;","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"Chen-Kuei"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"Chen-Kuei"},"content":" * Initializes a new Event task.","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"Chen-Kuei"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"Chen-Kuei"},"content":" * @param description The description of the event task.","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"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":20,"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":21,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"Chen-Kuei"},"content":" public Event(String description, String startDateTimeString, String endDateTimeString) {","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.startTime \u003d parseDateTime(startDateTimeString);","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"Chen-Kuei"},"content":" this.endTime \u003d parseDateTime(endDateTimeString);","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":" private LocalDateTime parseDateTime (String dateTimeString) {","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"Chen-Kuei"},"content":" try {","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"Chen-Kuei"},"content":" if (!dateTimeString.isEmpty()) {","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"Chen-Kuei"},"content":" return LocalDateTime.parse(dateTimeString, DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\"));","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"Chen-Kuei"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"Chen-Kuei"},"content":" System.out.println(\"Error parsing date and time: \" + dateTimeString);","lastModifiedDate":"2023-09-09"},{"lineNumber":35,"author":{"gitId":"Chen-Kuei"},"content":" return null; // You may want to handle this case differently","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":37,"author":{"gitId":"Chen-Kuei"},"content":" return null;","lastModifiedDate":"2023-09-09"},{"lineNumber":38,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":39,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"Chen-Kuei"},"content":" private String formatDateTime (LocalDateTime dateTime) {","lastModifiedDate":"2023-09-09"},{"lineNumber":41,"author":{"gitId":"Chen-Kuei"},"content":" if (dateTime \u003d\u003d null) {","lastModifiedDate":"2023-09-09"},{"lineNumber":42,"author":{"gitId":"Chen-Kuei"},"content":" return \"Invalid Date and Time!\";","lastModifiedDate":"2023-09-09"},{"lineNumber":43,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":44,"author":{"gitId":"Chen-Kuei"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"MMM dd yyyy h:mm a\", Locale.ENGLISH);","lastModifiedDate":"2023-09-09"},{"lineNumber":45,"author":{"gitId":"Chen-Kuei"},"content":" return dateTime.format(formatter);","lastModifiedDate":"2023-09-09"},{"lineNumber":46,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":47,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":48,"author":{"gitId":"Chen-Kuei"},"content":" private String saveFormatDateTime (LocalDateTime dateTime) {","lastModifiedDate":"2023-09-09"},{"lineNumber":49,"author":{"gitId":"Chen-Kuei"},"content":" if (dateTime \u003d\u003d null) {","lastModifiedDate":"2023-09-09"},{"lineNumber":50,"author":{"gitId":"Chen-Kuei"},"content":" return \"\";","lastModifiedDate":"2023-09-09"},{"lineNumber":51,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":52,"author":{"gitId":"Chen-Kuei"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\");","lastModifiedDate":"2023-09-09"},{"lineNumber":53,"author":{"gitId":"Chen-Kuei"},"content":" return dateTime.format(formatter);","lastModifiedDate":"2023-09-09"},{"lineNumber":54,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":56,"author":{"gitId":"Chen-Kuei"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":57,"author":{"gitId":"Chen-Kuei"},"content":" * Converts the event task to a formatted string.","lastModifiedDate":"2023-09-09"},{"lineNumber":58,"author":{"gitId":"Chen-Kuei"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":59,"author":{"gitId":"Chen-Kuei"},"content":" * @return A string representation of the event task.","lastModifiedDate":"2023-09-09"},{"lineNumber":60,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":61,"author":{"gitId":"Chen-Kuei"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"Chen-Kuei"},"content":" public String toDataString() {","lastModifiedDate":"2023-09-08"},{"lineNumber":63,"author":{"gitId":"Chen-Kuei"},"content":" return \"EVENT | \" + super.toDataString() + \" | \" + saveFormatDateTime(startTime) + \" | \" + saveFormatDateTime(endTime);","lastModifiedDate":"2023-09-09"},{"lineNumber":64,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":65,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":66,"author":{"gitId":"Chen-Kuei"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":67,"author":{"gitId":"Chen-Kuei"},"content":" * Converts the event task to a string representation for displaying.","lastModifiedDate":"2023-09-09"},{"lineNumber":68,"author":{"gitId":"Chen-Kuei"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":69,"author":{"gitId":"Chen-Kuei"},"content":" * @return A string representation of the event task.","lastModifiedDate":"2023-09-09"},{"lineNumber":70,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":71,"author":{"gitId":"Chen-Kuei"},"content":" @Override","lastModifiedDate":"2023-09-08"},{"lineNumber":72,"author":{"gitId":"Chen-Kuei"},"content":" public String toString() {","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"Chen-Kuei"},"content":" return \"[E]\" + super.toString() + \" (from: \" + formatDateTime(startTime) + \" to: \" + formatDateTime(endTime) + \")\";","lastModifiedDate":"2023-09-09"},{"lineNumber":74,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"Chen-Kuei"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"Chen-Kuei":75}},{"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":" String[] commandParts \u003d userCommand.split(\" \", 2);","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"Chen-Kuei"},"content":" String taskType \u003d commandParts[0].toLowerCase();","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"Chen-Kuei"},"content":" switch (taskType) {","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"Chen-Kuei"},"content":" case \"todo\":","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"Chen-Kuei"},"content":" if (commandParts.length \u003d\u003d 2) {","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"Chen-Kuei"},"content":" return new Todo(commandParts[1]);","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"Chen-Kuei"},"content":" break;","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"Chen-Kuei"},"content":" case \"deadline\":","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"Chen-Kuei"},"content":" if (commandParts.length \u003d\u003d 2) {","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"Chen-Kuei"},"content":" String[] deadlineParts \u003d commandParts[1].split(\" /by \");","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"Chen-Kuei"},"content":" if (deadlineParts.length \u003d\u003d 2) {","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"Chen-Kuei"},"content":" return new Deadline(deadlineParts[0], deadlineParts[1]);","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"Chen-Kuei"},"content":" } else {","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"Chen-Kuei"},"content":" System.out.println(\"Please describe your deadline:)\");","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"Chen-Kuei"},"content":" return null;","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"Chen-Kuei"},"content":" break;","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"Chen-Kuei"},"content":" case \"event\":","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"Chen-Kuei"},"content":" if (commandParts.length \u003d\u003d 2) {","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"Chen-Kuei"},"content":" String[] eventParts \u003d commandParts[1].split(\" /from | /to \");","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"Chen-Kuei"},"content":" if (eventParts.length \u003d\u003d 3) {","lastModifiedDate":"2023-09-09"},{"lineNumber":35,"author":{"gitId":"Chen-Kuei"},"content":" return new Event(eventParts[0], eventParts[1], eventParts[2]);","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"Chen-Kuei"},"content":" } else {","lastModifiedDate":"2023-09-09"},{"lineNumber":37,"author":{"gitId":"Chen-Kuei"},"content":" System.out.println(\"Please describe your event.\");","lastModifiedDate":"2023-09-09"},{"lineNumber":38,"author":{"gitId":"Chen-Kuei"},"content":" return null;","lastModifiedDate":"2023-09-09"},{"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":" break;","lastModifiedDate":"2023-09-09"},{"lineNumber":42,"author":{"gitId":"Chen-Kuei"},"content":" default:","lastModifiedDate":"2023-09-09"},{"lineNumber":43,"author":{"gitId":"Chen-Kuei"},"content":" System.out.println(\"Sorry, I don\u0027t understand the command.\");","lastModifiedDate":"2023-09-09"},{"lineNumber":44,"author":{"gitId":"Chen-Kuei"},"content":" break;","lastModifiedDate":"2023-09-09"},{"lineNumber":45,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":46,"author":{"gitId":"Chen-Kuei"},"content":" return null;","lastModifiedDate":"2023-09-09"},{"lineNumber":47,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":48,"author":{"gitId":"Chen-Kuei"},"content":"}","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"Chen-Kuei":48}},{"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":" private String filePath;","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":" * 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-09"},{"lineNumber":18,"author":{"gitId":"Chen-Kuei"},"content":" * Marks the task as done.","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"Chen-Kuei"},"content":" public void markAsDone() {","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"Chen-Kuei"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-03"},{"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":" * Marks the tasks as not dome yet.","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"Chen-Kuei"},"content":" public void markAsNotDone() {","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"Chen-Kuei"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-03"},{"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":" * Returns a string representation of the task\u0027s description for data storage.","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"Chen-Kuei"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"Chen-Kuei"},"content":" * @return The task\u0027s description.","lastModifiedDate":"2023-09-09"},{"lineNumber":35,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"Chen-Kuei"},"content":" public String toDataString() {","lastModifiedDate":"2023-09-08"},{"lineNumber":37,"author":{"gitId":"Chen-Kuei"},"content":" return description;","lastModifiedDate":"2023-09-08"},{"lineNumber":38,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-08"},{"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.","lastModifiedDate":"2023-09-09"},{"lineNumber":42,"author":{"gitId":"Chen-Kuei"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":43,"author":{"gitId":"Chen-Kuei"},"content":" * @return A string representation of the task.","lastModifiedDate":"2023-09-09"},{"lineNumber":44,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":45,"author":{"gitId":"Chen-Kuei"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"Chen-Kuei"},"content":" public String toString() {","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"Chen-Kuei"},"content":" return (isDone ? \"[X] \" : \"[ ] \") + description;","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"Chen-Kuei"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"Chen-Kuei":49}},{"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 a empty TaskList.","lastModifiedDate":"2023-09-09"},{"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":" * Constructs a TaskList with the list of tasks.","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"Chen-Kuei"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"Chen-Kuei"},"content":" * @param tasks The list of the tasks.","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"Chen-Kuei"},"content":" public TaskList (List\u003cTask\u003e tasks) {","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"Chen-Kuei"},"content":" this.tasks \u003d new ArrayList\u003c\u003e(tasks);","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":" * Adds a task to 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 task The task to be added.","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"Chen-Kuei"},"content":" public void addTask (Task task) {","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"Chen-Kuei"},"content":" tasks.add(task);","lastModifiedDate":"2023-09-09"},{"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":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":35,"author":{"gitId":"Chen-Kuei"},"content":" * Deletes a task from the TaskList.","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"Chen-Kuei"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":37,"author":{"gitId":"Chen-Kuei"},"content":" * @param taskIndex The index of the task.","lastModifiedDate":"2023-09-09"},{"lineNumber":38,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":39,"author":{"gitId":"Chen-Kuei"},"content":" public void deleteTask (int taskIndex) {","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"Chen-Kuei"},"content":" if (taskIndex \u003e\u003d 0 \u0026\u0026 taskIndex \u003c tasks.size()) {","lastModifiedDate":"2023-09-09"},{"lineNumber":41,"author":{"gitId":"Chen-Kuei"},"content":" tasks.remove(taskIndex);","lastModifiedDate":"2023-09-09"},{"lineNumber":42,"author":{"gitId":"Chen-Kuei"},"content":" }","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 the number of tasks in the TaskList.","lastModifiedDate":"2023-09-09"},{"lineNumber":47,"author":{"gitId":"Chen-Kuei"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":48,"author":{"gitId":"Chen-Kuei"},"content":" * @return The number of tasks in the TaskList.","lastModifiedDate":"2023-09-09"},{"lineNumber":49,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":50,"author":{"gitId":"Chen-Kuei"},"content":" public int size() {","lastModifiedDate":"2023-09-09"},{"lineNumber":51,"author":{"gitId":"Chen-Kuei"},"content":" return tasks.size();","lastModifiedDate":"2023-09-09"},{"lineNumber":52,"author":{"gitId":"Chen-Kuei"},"content":" }","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":" * Gets a task from the TaskList at the specified index.","lastModifiedDate":"2023-09-09"},{"lineNumber":56,"author":{"gitId":"Chen-Kuei"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":57,"author":{"gitId":"Chen-Kuei"},"content":" * @param index The index of the task.","lastModifiedDate":"2023-09-09"},{"lineNumber":58,"author":{"gitId":"Chen-Kuei"},"content":" * @return The task at the specified index.","lastModifiedDate":"2023-09-09"},{"lineNumber":59,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":60,"author":{"gitId":"Chen-Kuei"},"content":" public Task getTask(int index) {","lastModifiedDate":"2023-09-09"},{"lineNumber":61,"author":{"gitId":"Chen-Kuei"},"content":" return tasks.get(index);","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":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":65,"author":{"gitId":"Chen-Kuei"},"content":" * Marks a task as done.","lastModifiedDate":"2023-09-09"},{"lineNumber":66,"author":{"gitId":"Chen-Kuei"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":67,"author":{"gitId":"Chen-Kuei"},"content":" * @param index The index of the task.","lastModifiedDate":"2023-09-09"},{"lineNumber":68,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":69,"author":{"gitId":"Chen-Kuei"},"content":" public void markTaskAsDone(int index) {","lastModifiedDate":"2023-09-09"},{"lineNumber":70,"author":{"gitId":"Chen-Kuei"},"content":" Task task \u003d tasks.get(index);","lastModifiedDate":"2023-09-09"},{"lineNumber":71,"author":{"gitId":"Chen-Kuei"},"content":" task.markAsDone();","lastModifiedDate":"2023-09-09"},{"lineNumber":72,"author":{"gitId":"Chen-Kuei"},"content":" }","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":" * Marks a task as not done.","lastModifiedDate":"2023-09-09"},{"lineNumber":76,"author":{"gitId":"Chen-Kuei"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":77,"author":{"gitId":"Chen-Kuei"},"content":" * @param index The index of the task.","lastModifiedDate":"2023-09-09"},{"lineNumber":78,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":79,"author":{"gitId":"Chen-Kuei"},"content":" public void markTaskAsNotDone(int index) {","lastModifiedDate":"2023-09-09"},{"lineNumber":80,"author":{"gitId":"Chen-Kuei"},"content":" Task task \u003d tasks.get(index);","lastModifiedDate":"2023-09-09"},{"lineNumber":81,"author":{"gitId":"Chen-Kuei"},"content":" task.markAsNotDone();","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":" * Finds the tasks that match the keyword.","lastModifiedDate":"2023-09-09"},{"lineNumber":86,"author":{"gitId":"Chen-Kuei"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":87,"author":{"gitId":"Chen-Kuei"},"content":" * @param keyword The keywords used to search matching tasks.","lastModifiedDate":"2023-09-09"},{"lineNumber":88,"author":{"gitId":"Chen-Kuei"},"content":" * @return Tasks that match the keyword.","lastModifiedDate":"2023-09-09"},{"lineNumber":89,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":90,"author":{"gitId":"Chen-Kuei"},"content":" public TaskList findTasksByKeyword (String keyword) {","lastModifiedDate":"2023-09-09"},{"lineNumber":91,"author":{"gitId":"Chen-Kuei"},"content":" TaskList matchingTasks \u003d new TaskList();","lastModifiedDate":"2023-09-09"},{"lineNumber":92,"author":{"gitId":"Chen-Kuei"},"content":" for (Task task : tasks) {","lastModifiedDate":"2023-09-09"},{"lineNumber":93,"author":{"gitId":"Chen-Kuei"},"content":" if (task.description.toLowerCase().contains(keyword.toLowerCase())) {","lastModifiedDate":"2023-09-09"},{"lineNumber":94,"author":{"gitId":"Chen-Kuei"},"content":" matchingTasks.addTask(task);","lastModifiedDate":"2023-09-09"},{"lineNumber":95,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":96,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":97,"author":{"gitId":"Chen-Kuei"},"content":" return matchingTasks;","lastModifiedDate":"2023-09-09"},{"lineNumber":98,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":99,"author":{"gitId":"Chen-Kuei"},"content":"}","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"Chen-Kuei":99}},{"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 tring representation of the Todo task.","lastModifiedDate":"2023-09-09"},{"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":" private Scanner scanner;","lastModifiedDate":"2023-09-09"},{"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":" * Constructs a Ui object.","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"Chen-Kuei"},"content":" public Ui() {","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"Chen-Kuei"},"content":" scanner \u003d new Scanner(System.in);","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":" * Reads a user command.","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"Chen-Kuei"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"Chen-Kuei"},"content":" * @return The user\u0027s command.","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"Chen-Kuei"},"content":" public String readCommand() {","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"Chen-Kuei"},"content":" return scanner.nextLine();","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"Chen-Kuei"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"Chen-Kuei"},"content":" * Loads tasks from the file path.","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"Chen-Kuei"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"Chen-Kuei"},"content":" * @param filePath The file path.","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"Chen-Kuei"},"content":" * @return A TaskList containing the loaded tasks.","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":35,"author":{"gitId":"Chen-Kuei"},"content":" public TaskList loadTasks(String filePath) {","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"Chen-Kuei"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-09-09"},{"lineNumber":37,"author":{"gitId":"Chen-Kuei"},"content":" File file \u003d new File(filePath);","lastModifiedDate":"2023-09-09"},{"lineNumber":38,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":39,"author":{"gitId":"Chen-Kuei"},"content":" if (file.exists()) {","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"Chen-Kuei"},"content":" try (BufferedReader reader \u003d new BufferedReader(new FileReader(file))) {","lastModifiedDate":"2023-09-09"},{"lineNumber":41,"author":{"gitId":"Chen-Kuei"},"content":" String line;","lastModifiedDate":"2023-09-09"},{"lineNumber":42,"author":{"gitId":"Chen-Kuei"},"content":" while ((line \u003d reader.readLine()) !\u003d null) {","lastModifiedDate":"2023-09-09"},{"lineNumber":43,"author":{"gitId":"Chen-Kuei"},"content":" String[] taskData \u003d line.split(\" \\\\| \");","lastModifiedDate":"2023-09-09"},{"lineNumber":44,"author":{"gitId":"Chen-Kuei"},"content":" if (taskData.length \u003e\u003d 2) {","lastModifiedDate":"2023-09-09"},{"lineNumber":45,"author":{"gitId":"Chen-Kuei"},"content":" Storage.TaskType taskType \u003d Storage.TaskType.valueOf(taskData[0]);","lastModifiedDate":"2023-09-09"},{"lineNumber":46,"author":{"gitId":"Chen-Kuei"},"content":" String taskDescription \u003d taskData[1];","lastModifiedDate":"2023-09-09"},{"lineNumber":47,"author":{"gitId":"Chen-Kuei"},"content":" String taskTime1 \u003d (taskData.length \u003e 2) ? taskData[2] : \"\";","lastModifiedDate":"2023-09-09"},{"lineNumber":48,"author":{"gitId":"Chen-Kuei"},"content":" String taskTime2 \u003d (taskData.length \u003e 3) ? taskData[3] : \"\";","lastModifiedDate":"2023-09-09"},{"lineNumber":49,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":50,"author":{"gitId":"Chen-Kuei"},"content":" switch (taskType) {","lastModifiedDate":"2023-09-09"},{"lineNumber":51,"author":{"gitId":"Chen-Kuei"},"content":" case TODO:","lastModifiedDate":"2023-09-09"},{"lineNumber":52,"author":{"gitId":"Chen-Kuei"},"content":" tasks.addTask(new Todo(taskDescription));","lastModifiedDate":"2023-09-09"},{"lineNumber":53,"author":{"gitId":"Chen-Kuei"},"content":" break;","lastModifiedDate":"2023-09-09"},{"lineNumber":54,"author":{"gitId":"Chen-Kuei"},"content":" case DEADLINE:","lastModifiedDate":"2023-09-09"},{"lineNumber":55,"author":{"gitId":"Chen-Kuei"},"content":" tasks.addTask(new Deadline(taskDescription, taskTime1));","lastModifiedDate":"2023-09-09"},{"lineNumber":56,"author":{"gitId":"Chen-Kuei"},"content":" break;","lastModifiedDate":"2023-09-09"},{"lineNumber":57,"author":{"gitId":"Chen-Kuei"},"content":" case EVENT:","lastModifiedDate":"2023-09-09"},{"lineNumber":58,"author":{"gitId":"Chen-Kuei"},"content":" tasks.addTask(new Event(taskDescription, taskTime1, taskTime2));","lastModifiedDate":"2023-09-09"},{"lineNumber":59,"author":{"gitId":"Chen-Kuei"},"content":" break;","lastModifiedDate":"2023-09-09"},{"lineNumber":60,"author":{"gitId":"Chen-Kuei"},"content":" default:","lastModifiedDate":"2023-09-09"},{"lineNumber":61,"author":{"gitId":"Chen-Kuei"},"content":" System.out.println(\"Invalid task type: \" + taskType);","lastModifiedDate":"2023-09-09"},{"lineNumber":62,"author":{"gitId":"Chen-Kuei"},"content":" break;","lastModifiedDate":"2023-09-09"},{"lineNumber":63,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":64,"author":{"gitId":"Chen-Kuei"},"content":" } else {","lastModifiedDate":"2023-09-09"},{"lineNumber":65,"author":{"gitId":"Chen-Kuei"},"content":" System.out.println(\"Skipping corrupted task data: \" + line);","lastModifiedDate":"2023-09-09"},{"lineNumber":66,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":67,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":68,"author":{"gitId":"Chen-Kuei"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-09"},{"lineNumber":69,"author":{"gitId":"Chen-Kuei"},"content":" System.out.println(\"Error loading tasks.\");","lastModifiedDate":"2023-09-09"},{"lineNumber":70,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":71,"author":{"gitId":"Chen-Kuei"},"content":" } else {","lastModifiedDate":"2023-09-09"},{"lineNumber":72,"author":{"gitId":"Chen-Kuei"},"content":" System.out.println(\"Data file does not exist.\");","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":" return tasks;","lastModifiedDate":"2023-09-09"},{"lineNumber":76,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":77,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":78,"author":{"gitId":"Chen-Kuei"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":79,"author":{"gitId":"Chen-Kuei"},"content":" * Handles user commands.","lastModifiedDate":"2023-09-09"},{"lineNumber":80,"author":{"gitId":"Chen-Kuei"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":81,"author":{"gitId":"Chen-Kuei"},"content":" * @param userCommand The user\u0027s command.","lastModifiedDate":"2023-09-09"},{"lineNumber":82,"author":{"gitId":"Chen-Kuei"},"content":" * @param tasks The list of tasks.","lastModifiedDate":"2023-09-09"},{"lineNumber":83,"author":{"gitId":"Chen-Kuei"},"content":" * @param storage The storage object to save tasks.","lastModifiedDate":"2023-09-09"},{"lineNumber":84,"author":{"gitId":"Chen-Kuei"},"content":" * @return True if the program should exit.","lastModifiedDate":"2023-09-09"},{"lineNumber":85,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":86,"author":{"gitId":"Chen-Kuei"},"content":" public boolean handleCommand(String userCommand, TaskList tasks, Storage storage) {","lastModifiedDate":"2023-09-09"},{"lineNumber":87,"author":{"gitId":"Chen-Kuei"},"content":" try {","lastModifiedDate":"2023-09-09"},{"lineNumber":88,"author":{"gitId":"Chen-Kuei"},"content":" String[] parts \u003d userCommand.split(\" \", 2);","lastModifiedDate":"2023-09-09"},{"lineNumber":89,"author":{"gitId":"Chen-Kuei"},"content":" String commandType \u003d parts[0].toLowerCase();","lastModifiedDate":"2023-09-09"},{"lineNumber":90,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":91,"author":{"gitId":"Chen-Kuei"},"content":" switch (commandType) {","lastModifiedDate":"2023-09-09"},{"lineNumber":92,"author":{"gitId":"Chen-Kuei"},"content":" case \"bye\":","lastModifiedDate":"2023-09-09"},{"lineNumber":93,"author":{"gitId":"Chen-Kuei"},"content":" showExit();","lastModifiedDate":"2023-09-09"},{"lineNumber":94,"author":{"gitId":"Chen-Kuei"},"content":" storage.saveTasks(tasks);","lastModifiedDate":"2023-09-09"},{"lineNumber":95,"author":{"gitId":"Chen-Kuei"},"content":" return true;","lastModifiedDate":"2023-09-09"},{"lineNumber":96,"author":{"gitId":"Chen-Kuei"},"content":" case \"list\":","lastModifiedDate":"2023-09-09"},{"lineNumber":97,"author":{"gitId":"Chen-Kuei"},"content":" showTaskList(tasks);","lastModifiedDate":"2023-09-09"},{"lineNumber":98,"author":{"gitId":"Chen-Kuei"},"content":" break;","lastModifiedDate":"2023-09-09"},{"lineNumber":99,"author":{"gitId":"Chen-Kuei"},"content":" case \"mark\":","lastModifiedDate":"2023-09-09"},{"lineNumber":100,"author":{"gitId":"Chen-Kuei"},"content":" int doneTaskIndex \u003d Integer.parseInt(parts[1]) - 1;","lastModifiedDate":"2023-09-09"},{"lineNumber":101,"author":{"gitId":"Chen-Kuei"},"content":" tasks.markTaskAsDone(doneTaskIndex);","lastModifiedDate":"2023-09-09"},{"lineNumber":102,"author":{"gitId":"Chen-Kuei"},"content":" showTaskMarkedAsDone(tasks.getTask(doneTaskIndex));","lastModifiedDate":"2023-09-09"},{"lineNumber":103,"author":{"gitId":"Chen-Kuei"},"content":" storage.saveTasks(tasks);","lastModifiedDate":"2023-09-09"},{"lineNumber":104,"author":{"gitId":"Chen-Kuei"},"content":" break;","lastModifiedDate":"2023-09-09"},{"lineNumber":105,"author":{"gitId":"Chen-Kuei"},"content":" case \"unmark\":","lastModifiedDate":"2023-09-09"},{"lineNumber":106,"author":{"gitId":"Chen-Kuei"},"content":" int notDoneTaskIndex \u003d Integer.parseInt(parts[1]) - 1;","lastModifiedDate":"2023-09-09"},{"lineNumber":107,"author":{"gitId":"Chen-Kuei"},"content":" tasks.markTaskAsNotDone(notDoneTaskIndex);","lastModifiedDate":"2023-09-09"},{"lineNumber":108,"author":{"gitId":"Chen-Kuei"},"content":" showTaskMarkedAsNotDone(tasks.getTask(notDoneTaskIndex));","lastModifiedDate":"2023-09-09"},{"lineNumber":109,"author":{"gitId":"Chen-Kuei"},"content":" storage.saveTasks(tasks);","lastModifiedDate":"2023-09-09"},{"lineNumber":110,"author":{"gitId":"Chen-Kuei"},"content":" break;","lastModifiedDate":"2023-09-09"},{"lineNumber":111,"author":{"gitId":"Chen-Kuei"},"content":" case \"todo\":","lastModifiedDate":"2023-09-09"},{"lineNumber":112,"author":{"gitId":"Chen-Kuei"},"content":" if (parts.length \u003d\u003d 1) {","lastModifiedDate":"2023-09-09"},{"lineNumber":113,"author":{"gitId":"Chen-Kuei"},"content":" System.out.println(\"What you want to do?\");","lastModifiedDate":"2023-09-09"},{"lineNumber":114,"author":{"gitId":"Chen-Kuei"},"content":" break;","lastModifiedDate":"2023-09-09"},{"lineNumber":115,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":116,"author":{"gitId":"Chen-Kuei"},"content":" case \"deadline\":","lastModifiedDate":"2023-09-09"},{"lineNumber":117,"author":{"gitId":"Chen-Kuei"},"content":" if (parts.length \u003d\u003d 1) {","lastModifiedDate":"2023-09-09"},{"lineNumber":118,"author":{"gitId":"Chen-Kuei"},"content":" System.out.println(\"What deadline do you have?\");","lastModifiedDate":"2023-09-09"},{"lineNumber":119,"author":{"gitId":"Chen-Kuei"},"content":" break;","lastModifiedDate":"2023-09-09"},{"lineNumber":120,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":121,"author":{"gitId":"Chen-Kuei"},"content":" case \"event\":","lastModifiedDate":"2023-09-09"},{"lineNumber":122,"author":{"gitId":"Chen-Kuei"},"content":" if (parts.length \u003d\u003d 1) {","lastModifiedDate":"2023-09-09"},{"lineNumber":123,"author":{"gitId":"Chen-Kuei"},"content":" System.out.println(\"What event do you have?\");","lastModifiedDate":"2023-09-09"},{"lineNumber":124,"author":{"gitId":"Chen-Kuei"},"content":" break;","lastModifiedDate":"2023-09-09"},{"lineNumber":125,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":126,"author":{"gitId":"Chen-Kuei"},"content":" Task newTask \u003d Parser.parse(userCommand);","lastModifiedDate":"2023-09-09"},{"lineNumber":127,"author":{"gitId":"Chen-Kuei"},"content":" if (newTask \u003d\u003d null) {","lastModifiedDate":"2023-09-09"},{"lineNumber":128,"author":{"gitId":"Chen-Kuei"},"content":" break;","lastModifiedDate":"2023-09-09"},{"lineNumber":129,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":130,"author":{"gitId":"Chen-Kuei"},"content":" tasks.addTask(newTask);","lastModifiedDate":"2023-09-09"},{"lineNumber":131,"author":{"gitId":"Chen-Kuei"},"content":" showTaskAdded(newTask, tasks.size());","lastModifiedDate":"2023-09-09"},{"lineNumber":132,"author":{"gitId":"Chen-Kuei"},"content":" storage.saveTasks(tasks);","lastModifiedDate":"2023-09-09"},{"lineNumber":133,"author":{"gitId":"Chen-Kuei"},"content":" break;","lastModifiedDate":"2023-09-09"},{"lineNumber":134,"author":{"gitId":"Chen-Kuei"},"content":" case \"delete\":","lastModifiedDate":"2023-09-09"},{"lineNumber":135,"author":{"gitId":"Chen-Kuei"},"content":" int deletedTaskIndex \u003d Integer.parseInt(parts[1]) - 1;","lastModifiedDate":"2023-09-09"},{"lineNumber":136,"author":{"gitId":"Chen-Kuei"},"content":" tasks.deleteTask(deletedTaskIndex);","lastModifiedDate":"2023-09-09"},{"lineNumber":137,"author":{"gitId":"Chen-Kuei"},"content":" showTaskDeleted(tasks.size());","lastModifiedDate":"2023-09-09"},{"lineNumber":138,"author":{"gitId":"Chen-Kuei"},"content":" storage.saveTasks(tasks);","lastModifiedDate":"2023-09-09"},{"lineNumber":139,"author":{"gitId":"Chen-Kuei"},"content":" break;","lastModifiedDate":"2023-09-09"},{"lineNumber":140,"author":{"gitId":"Chen-Kuei"},"content":" case \"find\":","lastModifiedDate":"2023-09-09"},{"lineNumber":141,"author":{"gitId":"Chen-Kuei"},"content":" if (parts.length \u003d\u003d 1) {","lastModifiedDate":"2023-09-09"},{"lineNumber":142,"author":{"gitId":"Chen-Kuei"},"content":" System.out.println(\"Please specify a keywork to search for.\");","lastModifiedDate":"2023-09-09"},{"lineNumber":143,"author":{"gitId":"Chen-Kuei"},"content":" } else {","lastModifiedDate":"2023-09-09"},{"lineNumber":144,"author":{"gitId":"Chen-Kuei"},"content":" showFindCommand(parts[1], tasks);","lastModifiedDate":"2023-09-09"},{"lineNumber":145,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":146,"author":{"gitId":"Chen-Kuei"},"content":" break;","lastModifiedDate":"2023-09-09"},{"lineNumber":147,"author":{"gitId":"Chen-Kuei"},"content":" default:","lastModifiedDate":"2023-09-09"},{"lineNumber":148,"author":{"gitId":"Chen-Kuei"},"content":" showError(\"Invalid command format.\");","lastModifiedDate":"2023-09-09"},{"lineNumber":149,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":150,"author":{"gitId":"Chen-Kuei"},"content":" } catch (NumberFormatException | ArrayIndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-09"},{"lineNumber":151,"author":{"gitId":"Chen-Kuei"},"content":" showError(\"Invalid command format.\");","lastModifiedDate":"2023-09-09"},{"lineNumber":152,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":153,"author":{"gitId":"Chen-Kuei"},"content":" return false;","lastModifiedDate":"2023-09-09"},{"lineNumber":154,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":155,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":156,"author":{"gitId":"Chen-Kuei"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":157,"author":{"gitId":"Chen-Kuei"},"content":" * Displays a welcome message.","lastModifiedDate":"2023-09-09"},{"lineNumber":158,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":159,"author":{"gitId":"Chen-Kuei"},"content":" public void showWelcome() {","lastModifiedDate":"2023-09-09"},{"lineNumber":160,"author":{"gitId":"Chen-Kuei"},"content":" System.out.println(\"Hi, I\u0027m BiuBiu.\\nWhat can I do for you?\");","lastModifiedDate":"2023-09-09"},{"lineNumber":161,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":162,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":163,"author":{"gitId":"Chen-Kuei"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":164,"author":{"gitId":"Chen-Kuei"},"content":" * Displays an error message.","lastModifiedDate":"2023-09-09"},{"lineNumber":165,"author":{"gitId":"Chen-Kuei"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":166,"author":{"gitId":"Chen-Kuei"},"content":" * @param errorCommand The error message.","lastModifiedDate":"2023-09-09"},{"lineNumber":167,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":168,"author":{"gitId":"Chen-Kuei"},"content":" public void showError(String errorCommand) {","lastModifiedDate":"2023-09-09"},{"lineNumber":169,"author":{"gitId":"Chen-Kuei"},"content":" System.out.println(errorCommand);","lastModifiedDate":"2023-09-09"},{"lineNumber":170,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":171,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":172,"author":{"gitId":"Chen-Kuei"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":173,"author":{"gitId":"Chen-Kuei"},"content":" * Displays a message confirming the addition of a task.","lastModifiedDate":"2023-09-09"},{"lineNumber":174,"author":{"gitId":"Chen-Kuei"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":175,"author":{"gitId":"Chen-Kuei"},"content":" * @param task The task that we added.","lastModifiedDate":"2023-09-09"},{"lineNumber":176,"author":{"gitId":"Chen-Kuei"},"content":" * @param taskCount The current number of tasks in the list.","lastModifiedDate":"2023-09-09"},{"lineNumber":177,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":178,"author":{"gitId":"Chen-Kuei"},"content":" public void showTaskAdded (Task task, int taskCount) {","lastModifiedDate":"2023-09-09"},{"lineNumber":179,"author":{"gitId":"Chen-Kuei"},"content":" System.out.println(\"Got it. I\u0027ve added this task:\");","lastModifiedDate":"2023-09-09"},{"lineNumber":180,"author":{"gitId":"Chen-Kuei"},"content":" System.out.println(\" \" + task);","lastModifiedDate":"2023-09-09"},{"lineNumber":181,"author":{"gitId":"Chen-Kuei"},"content":" System.out.println(\"Now you have \" + taskCount + \" tasks in the list.\");","lastModifiedDate":"2023-09-09"},{"lineNumber":182,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":183,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":184,"author":{"gitId":"Chen-Kuei"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":185,"author":{"gitId":"Chen-Kuei"},"content":" * Displays a message confirming the deletion of a task.","lastModifiedDate":"2023-09-09"},{"lineNumber":186,"author":{"gitId":"Chen-Kuei"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":187,"author":{"gitId":"Chen-Kuei"},"content":" * @param taskCount The current number of tasks in the list.","lastModifiedDate":"2023-09-09"},{"lineNumber":188,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":189,"author":{"gitId":"Chen-Kuei"},"content":" public void showTaskDeleted (int taskCount) {","lastModifiedDate":"2023-09-09"},{"lineNumber":190,"author":{"gitId":"Chen-Kuei"},"content":" System.out.println(\"OK, I\u0027ve removed this task.\");","lastModifiedDate":"2023-09-09"},{"lineNumber":191,"author":{"gitId":"Chen-Kuei"},"content":" System.out.println(\"Now you have \" + taskCount + \" tasks in the list.\");","lastModifiedDate":"2023-09-09"},{"lineNumber":192,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":193,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":194,"author":{"gitId":"Chen-Kuei"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":195,"author":{"gitId":"Chen-Kuei"},"content":" * Displays the list of tasks.","lastModifiedDate":"2023-09-09"},{"lineNumber":196,"author":{"gitId":"Chen-Kuei"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":197,"author":{"gitId":"Chen-Kuei"},"content":" * @param taskList The task list.","lastModifiedDate":"2023-09-09"},{"lineNumber":198,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":199,"author":{"gitId":"Chen-Kuei"},"content":" public void showTaskList (TaskList taskList) {","lastModifiedDate":"2023-09-09"},{"lineNumber":200,"author":{"gitId":"Chen-Kuei"},"content":" System.out.println(\"Here are the tasks in your list:\");","lastModifiedDate":"2023-09-09"},{"lineNumber":201,"author":{"gitId":"Chen-Kuei"},"content":" for (int i \u003d 0; i \u003c taskList.size(); i++) {","lastModifiedDate":"2023-09-09"},{"lineNumber":202,"author":{"gitId":"Chen-Kuei"},"content":" System.out.println((i + 1) + \". \" + taskList.getTask(i));","lastModifiedDate":"2023-09-09"},{"lineNumber":203,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":204,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":205,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":206,"author":{"gitId":"Chen-Kuei"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":207,"author":{"gitId":"Chen-Kuei"},"content":" * Displays a message confirming that a task has been marked as done.","lastModifiedDate":"2023-09-09"},{"lineNumber":208,"author":{"gitId":"Chen-Kuei"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":209,"author":{"gitId":"Chen-Kuei"},"content":" * @param task The task that was marked as done.","lastModifiedDate":"2023-09-09"},{"lineNumber":210,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":211,"author":{"gitId":"Chen-Kuei"},"content":" public void showTaskMarkedAsDone (Task task) {","lastModifiedDate":"2023-09-09"},{"lineNumber":212,"author":{"gitId":"Chen-Kuei"},"content":" System.out.println(\"Nice! I\u0027ve marked this task as done:\");","lastModifiedDate":"2023-09-09"},{"lineNumber":213,"author":{"gitId":"Chen-Kuei"},"content":" System.out.println(\" \" + task);","lastModifiedDate":"2023-09-09"},{"lineNumber":214,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":215,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":216,"author":{"gitId":"Chen-Kuei"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":217,"author":{"gitId":"Chen-Kuei"},"content":" * Displays a message confirming that a task has been marked as not done.","lastModifiedDate":"2023-09-09"},{"lineNumber":218,"author":{"gitId":"Chen-Kuei"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":219,"author":{"gitId":"Chen-Kuei"},"content":" * @param task The task that was marked as not done.","lastModifiedDate":"2023-09-09"},{"lineNumber":220,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":221,"author":{"gitId":"Chen-Kuei"},"content":" public void showTaskMarkedAsNotDone (Task task) {","lastModifiedDate":"2023-09-09"},{"lineNumber":222,"author":{"gitId":"Chen-Kuei"},"content":" System.out.println(\"Noted, I\u0027ve marked this task as not done yet:\");","lastModifiedDate":"2023-09-09"},{"lineNumber":223,"author":{"gitId":"Chen-Kuei"},"content":" System.out.println(\" \" + task);","lastModifiedDate":"2023-09-09"},{"lineNumber":224,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":225,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":226,"author":{"gitId":"Chen-Kuei"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":227,"author":{"gitId":"Chen-Kuei"},"content":" * Displays an loading error message.","lastModifiedDate":"2023-09-09"},{"lineNumber":228,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":229,"author":{"gitId":"Chen-Kuei"},"content":" public void showLoadingError() {","lastModifiedDate":"2023-09-09"},{"lineNumber":230,"author":{"gitId":"Chen-Kuei"},"content":" System.out.println(\"Error loading tasks from file.\");","lastModifiedDate":"2023-09-09"},{"lineNumber":231,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":232,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":233,"author":{"gitId":"Chen-Kuei"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":234,"author":{"gitId":"Chen-Kuei"},"content":" * Displays tasks tha match the keyword.","lastModifiedDate":"2023-09-09"},{"lineNumber":235,"author":{"gitId":"Chen-Kuei"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":236,"author":{"gitId":"Chen-Kuei"},"content":" * @param keyword The keyword to search for the matching task.","lastModifiedDate":"2023-09-09"},{"lineNumber":237,"author":{"gitId":"Chen-Kuei"},"content":" * @param tasks The list of tasks to search within.","lastModifiedDate":"2023-09-09"},{"lineNumber":238,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":239,"author":{"gitId":"Chen-Kuei"},"content":" public void showFindCommand (String keyword, TaskList tasks) {","lastModifiedDate":"2023-09-09"},{"lineNumber":240,"author":{"gitId":"Chen-Kuei"},"content":" TaskList matchingTasks \u003d tasks.findTasksByKeyword(keyword);","lastModifiedDate":"2023-09-09"},{"lineNumber":241,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":242,"author":{"gitId":"Chen-Kuei"},"content":" System.out.println(\"Here are the matching tasks: \");","lastModifiedDate":"2023-09-09"},{"lineNumber":243,"author":{"gitId":"Chen-Kuei"},"content":" for (int i \u003d 0; i \u003c matchingTasks.size(); i++) {","lastModifiedDate":"2023-09-09"},{"lineNumber":244,"author":{"gitId":"Chen-Kuei"},"content":" System.out.println((i + 1) + \".\" + matchingTasks.getTask(i));","lastModifiedDate":"2023-09-09"},{"lineNumber":245,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":246,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":247,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":248,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":249,"author":{"gitId":"Chen-Kuei"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":250,"author":{"gitId":"Chen-Kuei"},"content":" * Displays an exit message.","lastModifiedDate":"2023-09-09"},{"lineNumber":251,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":252,"author":{"gitId":"Chen-Kuei"},"content":" public void showExit() {","lastModifiedDate":"2023-09-09"},{"lineNumber":253,"author":{"gitId":"Chen-Kuei"},"content":" System.out.println(\"Bye. Have a great day!\");","lastModifiedDate":"2023-09-09"},{"lineNumber":254,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":255,"author":{"gitId":"Chen-Kuei"},"content":"}","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"Chen-Kuei":255}},{"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 612a76b6..5cef6b3b 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}}}]}]},"authorFileTypeContributionMap":{"Chen-Kuei":{"java":724,"md":2,"fxml":0,"sh":0,"bat":1,"gradle":1,"txt":10}},"authorContributionVariance":{"Chen-Kuei":42507.637},"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}}}]}]},"authorFileTypeContributionMap":{"Chen-Kuei":{"java":1008,"md":2,"fxml":0,"sh":0,"bat":1,"gradle":1,"txt":11}},"authorContributionVariance":{"Chen-Kuei":114029.26},"authorDisplayNameMap":{"Chen-Kuei":"CS2103T-T14-1 CHEN..KUEI"}} diff --git a/D-Limiter_ip_master/authorship.json b/D-Limiter_ip_master/authorship.json index a987dd80..4a7cbc6d 100644 --- a/D-Limiter_ip_master/authorship.json +++ b/D-Limiter_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"src/main/java/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"D-Limiter"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"D-Limiter"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"D-Limiter"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"D-Limiter"},"content":" private String by;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"D-Limiter"},"content":" private String d1;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"D-Limiter"},"content":" int i \u003d 0;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"D-Limiter"},"content":" public Deadline(String description, String by) {","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"D-Limiter"},"content":" super(description);","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"D-Limiter"},"content":" this.by \u003d by.trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"D-Limiter"},"content":" String date \u003d \"\";","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"D-Limiter"},"content":" for (i \u003d 0; i \u003c by.length(); i++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"D-Limiter"},"content":" if (by.charAt(i) \u003d\u003d \u0027 \u0027) {","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"D-Limiter"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"D-Limiter"},"content":" date +\u003d by.charAt(i);","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"D-Limiter"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"D-Limiter"},"content":" DateTimeFormatter df \u003d DateTimeFormatter.ofPattern(\"MMM d yyyy\");","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"D-Limiter"},"content":" LocalDate d \u003d LocalDate.parse(date);","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"D-Limiter"},"content":" d1 \u003d d.format(df);","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"D-Limiter"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"D-Limiter"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"D-Limiter"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"D-Limiter"},"content":" * Used to evaluate String form of a Deadlien","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"D-Limiter"},"content":" * @return String form of a Deadline","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"D-Limiter"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"D-Limiter"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"D-Limiter"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"D-Limiter"},"content":" String s \u003d \"\";","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"D-Limiter"},"content":" by \u003d by.trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"D-Limiter"},"content":" s \u003d \"[D]\" + super.toString() + \" (by: \" + d1 + \" \" + by.substring(i) + \")\";","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"D-Limiter"},"content":" return s;","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":42,"author":{"gitId":"D-Limiter"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"D-Limiter":42}},{"path":"src/main/java/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"D-Limiter"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"D-Limiter"},"content":" protected String from;","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"D-Limiter"},"content":" protected String to;","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"D-Limiter"},"content":" public Event(String description, String from, String to) {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"D-Limiter"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"D-Limiter"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"D-Limiter"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"D-Limiter"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"D-Limiter"},"content":" * Used to evaluate String form of a Event","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"D-Limiter"},"content":" * @return String form of an Eventgit","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"D-Limiter"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"D-Limiter"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"D-Limiter"},"content":" public String toString() {","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"D-Limiter"},"content":" return \"[E]\" + super.toString() + \" (from: \" + from + \" to: \" + to.trim() + \")\";","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"D-Limiter"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"D-Limiter":20}},{"path":"src/main/java/InvalidArgumentException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"D-Limiter"},"content":"public class InvalidArgumentException extends Exception {","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"D-Limiter"},"content":" InvalidArgumentException(String msg) {","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"D-Limiter"},"content":" super(msg);","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"D-Limiter"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"D-Limiter":5}},{"path":"src/main/java/InvalidSerialException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"D-Limiter"},"content":"public class InvalidSerialException extends Exception{","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"D-Limiter"},"content":" InvalidSerialException(String msg) {","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"D-Limiter"},"content":" super(msg);","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"D-Limiter"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"D-Limiter":5}},{"path":"src/main/java/InvalidTaskException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"D-Limiter"},"content":"public class InvalidTaskException extends Exception {","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"D-Limiter"},"content":" InvalidTaskException(String msg) {","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"D-Limiter"},"content":" super(\"☹ OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"D-Limiter"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"D-Limiter":5}},{"path":"src/main/java/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"D-Limiter"},"content":"public class Parser {","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"D-Limiter"},"content":" public void parse(String prompt, TaskList tasks, Ui ui, Storage storage) throws InvalidArgumentException, InvalidTaskException, InvalidSerialException {","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"D-Limiter"},"content":" if (prompt.equals(\"list\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"D-Limiter"},"content":" ui.showLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"D-Limiter"},"content":" System.out.println(\"Here are the tasks in your list:\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"D-Limiter"},"content":" + tasks.getTasks());","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"D-Limiter"},"content":" ui.showLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"D-Limiter"},"content":" } else if (prompt.contains(\"mark\") || prompt.contains(\"unmark\") ||","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"D-Limiter"},"content":" prompt.contains(\"delete\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"D-Limiter"},"content":" int index \u003d Integer.parseInt(prompt.charAt(prompt.length() - 1) + \"\");","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"D-Limiter"},"content":" if(index \u003e tasks.size()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"D-Limiter"},"content":" throw new InvalidSerialException(\"☹ OOPS!!! I think you have added\" +","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"D-Limiter"},"content":" \"an incorrect serial number greater than \" + (tasks.size() - 1));","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"D-Limiter"},"content":" if (prompt.contains(\"unmark\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"D-Limiter"},"content":" tasks.unmarkElement(index - 1);","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"D-Limiter"},"content":" storage.writeUp(tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"D-Limiter"},"content":" ui.showLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"D-Limiter"},"content":" System.out.println(","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"D-Limiter"},"content":" \"OK, I\u0027ve marked this task as not done yet:\\n\" +","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"D-Limiter"},"content":" tasks.elementAt(index - 1) + \"\\n\");","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"D-Limiter"},"content":" ui.showLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"D-Limiter"},"content":" } else if (prompt.contains(\"delete\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"D-Limiter"},"content":" ui.showLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"D-Limiter"},"content":" System.out.print(","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"D-Limiter"},"content":" \"Noted. I\u0027ve removed this task:\\n\" + \" \" +","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"D-Limiter"},"content":" tasks.elementAt(index - 1) + \"\\n\");","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"D-Limiter"},"content":" tasks.delete(index - 1);","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"D-Limiter"},"content":" storage.writeUp(tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"D-Limiter"},"content":" System.out.println(\"Now you have \" + tasks.size() + \" tasks in the list\\n\" );","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"D-Limiter"},"content":" ui.showLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"D-Limiter"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"D-Limiter"},"content":" tasks.markElement(index - 1);","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"D-Limiter"},"content":" storage.writeUp(tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"D-Limiter"},"content":" ui.showLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"D-Limiter"},"content":" System.out.println(","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"D-Limiter"},"content":" \"Nice! I\u0027ve marked this task as done:\\n\" +","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"D-Limiter"},"content":" tasks.elementAt(index - 1) + \"\\n\");","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"D-Limiter"},"content":" ui.showLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"D-Limiter"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"D-Limiter"},"content":" if (prompt.contains(\"deadline\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"D-Limiter"},"content":" String deadLine[] \u003d this.extractDeadline(this.textAfter(prompt));","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"D-Limiter"},"content":" System.out.println(deadLine[0] + \" ,, \" + deadLine[1] );","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"D-Limiter"},"content":" tasks.add(new Deadline(deadLine[0], deadLine[1]));","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"D-Limiter"},"content":" System.out.println(\"LOLOLOL\\n\"+tasks.elementAt(tasks.size()-1));","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"D-Limiter"},"content":" storage.writeUp(tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"D-Limiter"},"content":" } else if (prompt.contains(\"event\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"D-Limiter"},"content":" String eventData[] \u003d this.extractEvent(this.textAfter(prompt));","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"D-Limiter"},"content":" tasks.add(new Event(eventData[2], eventData[0], eventData[1]));","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"D-Limiter"},"content":" storage.writeUp(tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"D-Limiter"},"content":" } else if (prompt.contains(\"todo\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"D-Limiter"},"content":" tasks.add(new ToDo(this.textAfter(prompt)));","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"D-Limiter"},"content":" storage.writeUp(tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"D-Limiter"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"D-Limiter"},"content":" throw new InvalidTaskException(","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"D-Limiter"},"content":" \"☹ OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\"","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"D-Limiter"},"content":" );","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"D-Limiter"},"content":" ui.showLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"D-Limiter"},"content":" System.out.println(\"Got it. I\u0027ve added this task:\\n \"","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"D-Limiter"},"content":" + tasks.elementAt(tasks.size() - 1) + \"\\n\" +","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"D-Limiter"},"content":" \"Now you have \" + tasks.size() + \" tasks in the list\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"D-Limiter"},"content":" );","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"D-Limiter"},"content":" ui.showLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"D-Limiter"},"content":"// prompt \u003d chatBot.inputText();","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"D-Limiter"},"content":" public boolean isExit(String prompt) {","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"D-Limiter"},"content":" return prompt.contains(\"bye\");","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"D-Limiter"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"D-Limiter"},"content":" * Method to extract the content of the command","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"D-Limiter"},"content":" * @param sent The String that contains the command content after","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"D-Limiter"},"content":" * the specified command.","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"D-Limiter"},"content":" * @throws InvalidArgumentException if there is not content in the command","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"D-Limiter"},"content":" * @return Sentinel object of type R.","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"D-Limiter"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"D-Limiter"},"content":" public String textAfter(String sent) throws InvalidArgumentException {","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"D-Limiter"},"content":" String reText \u003d \"\";","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"D-Limiter"},"content":" String command \u003d \"\";","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"D-Limiter"},"content":" boolean flag \u003d false;","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"D-Limiter"},"content":" for (int i \u003d 0; i \u003c sent.length(); i++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"D-Limiter"},"content":" char ch \u003d sent.charAt(i);","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"D-Limiter"},"content":" if (flag) {","lastModifiedDate":"2023-09-02"},{"lineNumber":89,"author":{"gitId":"D-Limiter"},"content":" reText +\u003d ch;","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"D-Limiter"},"content":" } else if (ch \u003d\u003d \u0027 \u0027) {","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"D-Limiter"},"content":" command +\u003d ch;","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"D-Limiter"},"content":" flag \u003d true;","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":95,"author":{"gitId":"D-Limiter"},"content":" if(reText \u003d\u003d \"\") {","lastModifiedDate":"2023-09-02"},{"lineNumber":96,"author":{"gitId":"D-Limiter"},"content":" throw new InvalidArgumentException(\"☹ OOPS!!! The description of a \"","lastModifiedDate":"2023-09-02"},{"lineNumber":97,"author":{"gitId":"D-Limiter"},"content":" + command + \" cannot be empty.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":98,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":99,"author":{"gitId":"D-Limiter"},"content":" return reText;","lastModifiedDate":"2023-09-02"},{"lineNumber":100,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":101,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"D-Limiter"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"D-Limiter"},"content":" * Extracts the end timing of the deadline.","lastModifiedDate":"2023-09-02"},{"lineNumber":104,"author":{"gitId":"D-Limiter"},"content":" * @param text The input prompt","lastModifiedDate":"2023-09-02"},{"lineNumber":105,"author":{"gitId":"D-Limiter"},"content":" * @return An array containing the command content and end timing of","lastModifiedDate":"2023-09-02"},{"lineNumber":106,"author":{"gitId":"D-Limiter"},"content":" * the Deadline.","lastModifiedDate":"2023-09-02"},{"lineNumber":107,"author":{"gitId":"D-Limiter"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":108,"author":{"gitId":"D-Limiter"},"content":" public String[] extractDeadline(String text) {","lastModifiedDate":"2023-09-02"},{"lineNumber":109,"author":{"gitId":"D-Limiter"},"content":" String wrd \u003d \"\";","lastModifiedDate":"2023-09-02"},{"lineNumber":110,"author":{"gitId":"D-Limiter"},"content":" String str \u003d \"\";","lastModifiedDate":"2023-09-02"},{"lineNumber":111,"author":{"gitId":"D-Limiter"},"content":" int i;","lastModifiedDate":"2023-09-02"},{"lineNumber":112,"author":{"gitId":"D-Limiter"},"content":" for (i \u003d 0; i \u003c text.length(); i++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":113,"author":{"gitId":"D-Limiter"},"content":" char ch \u003d text.charAt(i);","lastModifiedDate":"2023-09-02"},{"lineNumber":114,"author":{"gitId":"D-Limiter"},"content":" if (ch \u003d\u003d \u0027 \u0027) {","lastModifiedDate":"2023-09-02"},{"lineNumber":115,"author":{"gitId":"D-Limiter"},"content":" if (wrd.equals(\"/by\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":116,"author":{"gitId":"D-Limiter"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":117,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":118,"author":{"gitId":"D-Limiter"},"content":" str +\u003d wrd + \" \";","lastModifiedDate":"2023-09-02"},{"lineNumber":119,"author":{"gitId":"D-Limiter"},"content":" wrd \u003d \"\";","lastModifiedDate":"2023-09-02"},{"lineNumber":120,"author":{"gitId":"D-Limiter"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":121,"author":{"gitId":"D-Limiter"},"content":" wrd +\u003d ch;","lastModifiedDate":"2023-09-02"},{"lineNumber":122,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":123,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":124,"author":{"gitId":"D-Limiter"},"content":" String deadArray[] \u003d new String[2];","lastModifiedDate":"2023-09-02"},{"lineNumber":125,"author":{"gitId":"D-Limiter"},"content":" deadArray[0] \u003d str.trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":126,"author":{"gitId":"D-Limiter"},"content":" deadArray[1] \u003d text.substring(i + 1);","lastModifiedDate":"2023-09-02"},{"lineNumber":127,"author":{"gitId":"D-Limiter"},"content":" return deadArray;","lastModifiedDate":"2023-09-02"},{"lineNumber":128,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":129,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":130,"author":{"gitId":"D-Limiter"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":131,"author":{"gitId":"D-Limiter"},"content":" * Method to extract the start and end timings of a deadline","lastModifiedDate":"2023-09-02"},{"lineNumber":132,"author":{"gitId":"D-Limiter"},"content":" * @param text The input text","lastModifiedDate":"2023-09-02"},{"lineNumber":133,"author":{"gitId":"D-Limiter"},"content":" * @return Returns and array containing the command content,","lastModifiedDate":"2023-09-02"},{"lineNumber":134,"author":{"gitId":"D-Limiter"},"content":" * the start and the end times","lastModifiedDate":"2023-09-02"},{"lineNumber":135,"author":{"gitId":"D-Limiter"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":136,"author":{"gitId":"D-Limiter"},"content":" public String[] extractEvent(String text) {","lastModifiedDate":"2023-09-02"},{"lineNumber":137,"author":{"gitId":"D-Limiter"},"content":" String str[] \u003d new String[3];","lastModifiedDate":"2023-09-02"},{"lineNumber":138,"author":{"gitId":"D-Limiter"},"content":" str[0] \u003d \"\";","lastModifiedDate":"2023-09-02"},{"lineNumber":139,"author":{"gitId":"D-Limiter"},"content":" str[1] \u003d \"\";","lastModifiedDate":"2023-09-02"},{"lineNumber":140,"author":{"gitId":"D-Limiter"},"content":" str[2] \u003d \"\";","lastModifiedDate":"2023-09-02"},{"lineNumber":141,"author":{"gitId":"D-Limiter"},"content":" String wrd \u003d \"\";","lastModifiedDate":"2023-09-02"},{"lineNumber":142,"author":{"gitId":"D-Limiter"},"content":" text \u003d text + \" \";","lastModifiedDate":"2023-09-02"},{"lineNumber":143,"author":{"gitId":"D-Limiter"},"content":" boolean fromFlag \u003d false;","lastModifiedDate":"2023-09-02"},{"lineNumber":144,"author":{"gitId":"D-Limiter"},"content":" boolean toFlag \u003d false;","lastModifiedDate":"2023-09-02"},{"lineNumber":145,"author":{"gitId":"D-Limiter"},"content":" for (int i \u003d 0; i \u003c text.length(); i++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":146,"author":{"gitId":"D-Limiter"},"content":" char ch \u003d text.charAt(i);","lastModifiedDate":"2023-09-02"},{"lineNumber":147,"author":{"gitId":"D-Limiter"},"content":" if (ch \u003d\u003d \u0027 \u0027) {","lastModifiedDate":"2023-09-02"},{"lineNumber":148,"author":{"gitId":"D-Limiter"},"content":" if (wrd.equals(\"/from\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":149,"author":{"gitId":"D-Limiter"},"content":" fromFlag \u003d true;","lastModifiedDate":"2023-09-02"},{"lineNumber":150,"author":{"gitId":"D-Limiter"},"content":" } else if (wrd.equals(\"/to\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":151,"author":{"gitId":"D-Limiter"},"content":" toFlag \u003d true;","lastModifiedDate":"2023-09-02"},{"lineNumber":152,"author":{"gitId":"D-Limiter"},"content":" fromFlag \u003d false;","lastModifiedDate":"2023-09-02"},{"lineNumber":153,"author":{"gitId":"D-Limiter"},"content":" } else if (fromFlag) {","lastModifiedDate":"2023-09-02"},{"lineNumber":154,"author":{"gitId":"D-Limiter"},"content":" str[0] +\u003d wrd + \" \";","lastModifiedDate":"2023-09-02"},{"lineNumber":155,"author":{"gitId":"D-Limiter"},"content":" } else if (toFlag) {","lastModifiedDate":"2023-09-02"},{"lineNumber":156,"author":{"gitId":"D-Limiter"},"content":" str[1] +\u003d wrd + \" \";","lastModifiedDate":"2023-09-02"},{"lineNumber":157,"author":{"gitId":"D-Limiter"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":158,"author":{"gitId":"D-Limiter"},"content":" str[2] +\u003d wrd + \" \";","lastModifiedDate":"2023-09-02"},{"lineNumber":159,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":160,"author":{"gitId":"D-Limiter"},"content":" wrd \u003d \"\";","lastModifiedDate":"2023-09-02"},{"lineNumber":161,"author":{"gitId":"D-Limiter"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":162,"author":{"gitId":"D-Limiter"},"content":" wrd +\u003d ch;","lastModifiedDate":"2023-09-02"},{"lineNumber":163,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":164,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":165,"author":{"gitId":"D-Limiter"},"content":" str[2] \u003d str[2].trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":166,"author":{"gitId":"D-Limiter"},"content":" return str;","lastModifiedDate":"2023-09-02"},{"lineNumber":167,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":168,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":169,"author":{"gitId":"D-Limiter"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"D-Limiter":169}},{"path":"src/main/java/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"D-Limiter"},"content":"import java.io.File;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"D-Limiter"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"D-Limiter"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"D-Limiter"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"D-Limiter"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"D-Limiter"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"D-Limiter"},"content":"public class Storage {","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"D-Limiter"},"content":" private String filePath;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"D-Limiter"},"content":" Storage(String filePath) {","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"D-Limiter"},"content":" this.filePath \u003dfilePath;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"D-Limiter"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"D-Limiter"},"content":" printTasks();","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"D-Limiter"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"D-Limiter"},"content":" System.out.println(\"Error loading file\");","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"D-Limiter"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"D-Limiter"},"content":" * Prints the contents of the file stored at filePath","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"D-Limiter"},"content":" * @throws FileNotFoundException It is thrown in a situation where the file","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"D-Limiter"},"content":" * does not exist at the given filePath","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"D-Limiter"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"D-Limiter"},"content":" public void printTasks() throws FileNotFoundException {","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"D-Limiter"},"content":" File f \u003d new File(filePath);","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"D-Limiter"},"content":" Scanner s \u003d new Scanner(f);","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"D-Limiter"},"content":" while (s.hasNext()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"D-Limiter"},"content":" System.out.println(s.nextLine());","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"D-Limiter"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"D-Limiter"},"content":" * Writes any changes in the tasks to the hard disk","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"D-Limiter"},"content":" * @param filePath Stores the address to the file with the stored tasks","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"D-Limiter"},"content":" * @param tasks The ArrayList containing all the tasks","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"D-Limiter"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"D-Limiter"},"content":" public void writeUp(TaskList t) {","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"D-Limiter"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"D-Limiter"},"content":" FileWriter fw \u003d new FileWriter(filePath);","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"D-Limiter"},"content":" fw.write(t.getTasks());","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"D-Limiter"},"content":" fw.close();","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"D-Limiter"},"content":" this.printTasks();","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"D-Limiter"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"D-Limiter"},"content":" System.out.println(\"An exception occurred: \" + e.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"D-Limiter"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"D-Limiter"},"content":" * Converts the input text into its equivalent ToDo Task","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"D-Limiter"},"content":" * @param text String to be converted to a ToDo task","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"D-Limiter"},"content":" * @return The ToDo task converted from text","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"D-Limiter"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"D-Limiter"},"content":" public ToDo taskToDo(String text) {","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"D-Limiter"},"content":" ToDo t \u003d new ToDo(text.substring(10).trim());","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"D-Limiter"},"content":" if (text.charAt(7) \u003d\u003d \u0027X\u0027) {","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"D-Limiter"},"content":" t.markTask();","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"D-Limiter"},"content":" return t;","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"D-Limiter"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"D-Limiter"},"content":" * Converts the input text into its equivalent Event Task","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"D-Limiter"},"content":" * @param text String to be converted to Event Task","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"D-Limiter"},"content":" * @return The Event task converted from text","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"D-Limiter"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"D-Limiter"},"content":" public Event taskEvent(String text) {","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"D-Limiter"},"content":" boolean isMarked \u003d text.charAt(7) \u003d\u003d \u0027X\u0027;","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"D-Limiter"},"content":" String[] parts \u003d text.split(\"[()]\");","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"D-Limiter"},"content":" String taskDescription \u003d parts[0].trim().substring(10);","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"D-Limiter"},"content":" String timeInfo \u003d parts[1].trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"D-Limiter"},"content":" String[] timeParts \u003d timeInfo.split(\"from:|to:\");","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"D-Limiter"},"content":" String startTime \u003d timeParts[1].trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"D-Limiter"},"content":" String endTime \u003d timeParts[2].trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"D-Limiter"},"content":" String[] extractedValues \u003d { taskDescription, startTime, endTime };","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"D-Limiter"},"content":" Event e \u003d new Event(extractedValues[0], extractedValues[1], extractedValues[2]);","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"D-Limiter"},"content":" if (isMarked) {","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"D-Limiter"},"content":" e.markTask();","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"D-Limiter"},"content":" return e;","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"D-Limiter"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"D-Limiter"},"content":" * Converts the input text into its equivalent Deadline Task","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"D-Limiter"},"content":" * @param text The String to be converted to a Deadline Task","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"D-Limiter"},"content":" * @return The Deadline Task from the converted String","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"D-Limiter"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"D-Limiter"},"content":" public Deadline taskDeadline(String text) {","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"D-Limiter"},"content":" boolean isMarked \u003d text.charAt(7) \u003d\u003d \u0027X\u0027;","lastModifiedDate":"2023-09-02"},{"lineNumber":89,"author":{"gitId":"D-Limiter"},"content":" text \u003d text.substring(10);","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"D-Limiter"},"content":" String wrd \u003d \"\";","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"D-Limiter"},"content":" String str \u003d \"\";","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"D-Limiter"},"content":" int i;","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"D-Limiter"},"content":" for (i \u003d 0; i \u003c text.length(); i++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"D-Limiter"},"content":" char ch \u003d text.charAt(i);","lastModifiedDate":"2023-09-02"},{"lineNumber":95,"author":{"gitId":"D-Limiter"},"content":" if (ch \u003d\u003d \u0027 \u0027) {","lastModifiedDate":"2023-09-02"},{"lineNumber":96,"author":{"gitId":"D-Limiter"},"content":" if (wrd.equals(\"(by:\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":97,"author":{"gitId":"D-Limiter"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":98,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":99,"author":{"gitId":"D-Limiter"},"content":" str +\u003d wrd + \" \";","lastModifiedDate":"2023-09-02"},{"lineNumber":100,"author":{"gitId":"D-Limiter"},"content":" wrd \u003d \"\";","lastModifiedDate":"2023-09-02"},{"lineNumber":101,"author":{"gitId":"D-Limiter"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"D-Limiter"},"content":" wrd +\u003d ch;","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":104,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":105,"author":{"gitId":"D-Limiter"},"content":" String deadArray[] \u003d new String[2];","lastModifiedDate":"2023-09-02"},{"lineNumber":106,"author":{"gitId":"D-Limiter"},"content":" deadArray[0] \u003d str.trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":107,"author":{"gitId":"D-Limiter"},"content":" deadArray[1] \u003d text.substring(i + 1, text.length() - 1);","lastModifiedDate":"2023-09-02"},{"lineNumber":108,"author":{"gitId":"D-Limiter"},"content":" Deadline d \u003d new Deadline(deadArray[0], deadArray[1]);","lastModifiedDate":"2023-09-02"},{"lineNumber":109,"author":{"gitId":"D-Limiter"},"content":" if (isMarked) {","lastModifiedDate":"2023-09-02"},{"lineNumber":110,"author":{"gitId":"D-Limiter"},"content":" d.markTask();","lastModifiedDate":"2023-09-02"},{"lineNumber":111,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":112,"author":{"gitId":"D-Limiter"},"content":" return d;","lastModifiedDate":"2023-09-02"},{"lineNumber":113,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":114,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":115,"author":{"gitId":"D-Limiter"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":116,"author":{"gitId":"D-Limiter"},"content":" * This method reads a file and converts its text into an ArrayList of Task objects","lastModifiedDate":"2023-09-02"},{"lineNumber":117,"author":{"gitId":"D-Limiter"},"content":" * @param filePath The path to the destination where the Tasks are stored","lastModifiedDate":"2023-09-02"},{"lineNumber":118,"author":{"gitId":"D-Limiter"},"content":" * @return ArrayList of Tasks","lastModifiedDate":"2023-09-02"},{"lineNumber":119,"author":{"gitId":"D-Limiter"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":120,"author":{"gitId":"D-Limiter"},"content":" public ArrayList\u003cTask\u003e load() {","lastModifiedDate":"2023-09-02"},{"lineNumber":121,"author":{"gitId":"D-Limiter"},"content":" ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-02"},{"lineNumber":122,"author":{"gitId":"D-Limiter"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":123,"author":{"gitId":"D-Limiter"},"content":" File f \u003d new File(filePath);","lastModifiedDate":"2023-09-02"},{"lineNumber":124,"author":{"gitId":"D-Limiter"},"content":" Scanner s \u003d new Scanner(f);","lastModifiedDate":"2023-09-02"},{"lineNumber":125,"author":{"gitId":"D-Limiter"},"content":" while (s.hasNext()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":126,"author":{"gitId":"D-Limiter"},"content":" String prompt \u003d s.nextLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":127,"author":{"gitId":"D-Limiter"},"content":" char ch \u003d prompt.charAt(4);","lastModifiedDate":"2023-09-02"},{"lineNumber":128,"author":{"gitId":"D-Limiter"},"content":" if (ch \u003d\u003d \u0027T\u0027) {","lastModifiedDate":"2023-09-02"},{"lineNumber":129,"author":{"gitId":"D-Limiter"},"content":" tasks.add(taskToDo(prompt));","lastModifiedDate":"2023-09-02"},{"lineNumber":130,"author":{"gitId":"D-Limiter"},"content":" } else if (ch \u003d\u003d \u0027E\u0027) {","lastModifiedDate":"2023-09-02"},{"lineNumber":131,"author":{"gitId":"D-Limiter"},"content":" tasks.add(taskEvent(prompt));","lastModifiedDate":"2023-09-02"},{"lineNumber":132,"author":{"gitId":"D-Limiter"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":133,"author":{"gitId":"D-Limiter"},"content":" tasks.add(taskDeadline(prompt));","lastModifiedDate":"2023-09-02"},{"lineNumber":134,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":135,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":136,"author":{"gitId":"D-Limiter"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":137,"author":{"gitId":"D-Limiter"},"content":" System.out.println(\"Error! Could not find file!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":138,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":139,"author":{"gitId":"D-Limiter"},"content":" return tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":140,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":141,"author":{"gitId":"D-Limiter"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"D-Limiter":141}},{"path":"src/main/java/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"D-Limiter"},"content":"public class Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"D-Limiter"},"content":" private boolean isMarked;","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"D-Limiter"},"content":" private String taskPrompt;","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"D-Limiter"},"content":" Task(String taskPrompt) {","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"D-Limiter"},"content":" this.taskPrompt \u003d taskPrompt;","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"D-Limiter"},"content":" this.isMarked \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"D-Limiter"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"D-Limiter"},"content":" * Used to mark this task done.","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"D-Limiter"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"D-Limiter"},"content":" public void markTask() {","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"D-Limiter"},"content":" this.isMarked \u003d true;","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"D-Limiter"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"D-Limiter"},"content":" * Used to mark this task undone.","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"D-Limiter"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"D-Limiter"},"content":" public void unmarkTask() {","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"D-Limiter"},"content":" this.isMarked \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"D-Limiter"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"D-Limiter"},"content":" * Used to evaluate String form of a Task","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"D-Limiter"},"content":" * @return String form of a Task","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"D-Limiter"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"D-Limiter"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"D-Limiter"},"content":" String marked \u003d \"\";","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"D-Limiter"},"content":" if(this.isMarked) {","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"D-Limiter"},"content":" marked \u003d \"X\";","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"D-Limiter"},"content":" } else {","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"D-Limiter"},"content":" marked \u003d \" \";","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"D-Limiter"},"content":" return \"[\" + marked + \"] \" + this.taskPrompt;","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"D-Limiter"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"D-Limiter":36}},{"path":"src/main/java/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"D-Limiter"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"D-Limiter"},"content":"public class TaskList {","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"D-Limiter"},"content":" private ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"D-Limiter"},"content":" TaskList(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"D-Limiter"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"D-Limiter"},"content":" public int size() {","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"D-Limiter"},"content":" return this.tasks.size();","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"D-Limiter"},"content":" public void markElement(int index) {","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"D-Limiter"},"content":" this.tasks.get(index).markTask();","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"D-Limiter"},"content":" public void unmarkElement(int index) {","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"D-Limiter"},"content":" this.tasks.get(index).unmarkTask();","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"D-Limiter"},"content":" public Task elementAt(int index) {","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"D-Limiter"},"content":" return this.tasks.get(index);","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"D-Limiter"},"content":" public void delete(int index) {","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"D-Limiter"},"content":" this.tasks.remove(index);","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"D-Limiter"},"content":" public void add(Task t) {","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"D-Limiter"},"content":" this.tasks.add(t);","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"D-Limiter"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"D-Limiter"},"content":" * The method evaluates the list of the passed tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"D-Limiter"},"content":" * @param tasks The ArrayList containing all the passed commands","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"D-Limiter"},"content":" * @return String of all the passed tasks","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"D-Limiter"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"D-Limiter"},"content":" public String getTasks() {","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"D-Limiter"},"content":" String listedTasks \u003d \"\";","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"D-Limiter"},"content":" for(int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"D-Limiter"},"content":" listedTasks +\u003d (i + 1) + \". \" + tasks.get(i).toString() + \"\\n\";","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"D-Limiter"},"content":" return listedTasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"D-Limiter"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"D-Limiter":44}},{"path":"src/main/java/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"D-Limiter"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"D-Limiter"},"content":" public ToDo(String description) {","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"D-Limiter"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"D-Limiter"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"D-Limiter"},"content":" * Used to evaluate String form of a ToDo task","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"D-Limiter"},"content":" * @return String form of a ToDo Task","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"D-Limiter"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"D-Limiter"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"D-Limiter"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"D-Limiter"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"D-Limiter"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"D-Limiter":16}},{"path":"src/main/java/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"D-Limiter"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"D-Limiter"},"content":"public class Ui {","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"D-Limiter"},"content":" public void showWelcome() {","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"D-Limiter"},"content":" String line \u003d \"____________________________________________________________\\n\";","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"D-Limiter"},"content":" System.out.println(line + \" Hello! I\u0027m Alcazar\\n\" +","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"D-Limiter"},"content":" \" What can I do for you?\\n\" +","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"D-Limiter"},"content":" line);","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"D-Limiter"},"content":" public String readCommand() {","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"D-Limiter"},"content":" Scanner sc \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"D-Limiter"},"content":" String st \u003d sc.nextLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"D-Limiter"},"content":" return st;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"D-Limiter"},"content":" public void showLine() {","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"D-Limiter"},"content":" System.out.println(\"____________________________________________________________\\n\");","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"D-Limiter"},"content":" public void showError(String msg) {","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"D-Limiter"},"content":" System.out.println(msg);","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"D-Limiter"},"content":" public void showLoadingError() {","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"D-Limiter"},"content":" System.out.println(\"Error loading data from the file\");","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"D-Limiter"},"content":" public void showExitMsg() {","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"D-Limiter"},"content":" this.showLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"D-Limiter"},"content":" System.out.println(","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"D-Limiter"},"content":" \" Bye. Hope to see you again soon!\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"D-Limiter"},"content":" );","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"D-Limiter"},"content":" this.showLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"D-Limiter"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"D-Limiter":31}},{"path":"src/main/java/alcazar/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"D-Limiter"},"content":"package alcazar;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"D-Limiter"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"D-Limiter"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"D-Limiter"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"D-Limiter"},"content":" private String by;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"D-Limiter"},"content":" private String d1;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"D-Limiter"},"content":" int i \u003d 0;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"D-Limiter"},"content":" public Deadline(String description, String by) {","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"D-Limiter"},"content":" super(description);","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"D-Limiter"},"content":" this.by \u003d by.trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"D-Limiter"},"content":" String date \u003d \"\";","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"D-Limiter"},"content":" for (i \u003d 0; i \u003c by.length(); i++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"D-Limiter"},"content":" if (by.charAt(i) \u003d\u003d \u0027 \u0027) {","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"D-Limiter"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"D-Limiter"},"content":" date +\u003d by.charAt(i);","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"D-Limiter"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"D-Limiter"},"content":" DateTimeFormatter df \u003d DateTimeFormatter.ofPattern(\"MMM d yyyy\");","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"D-Limiter"},"content":" LocalDate d \u003d LocalDate.parse(date);","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"D-Limiter"},"content":" d1 \u003d d.format(df);","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"D-Limiter"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"D-Limiter"},"content":" /* Catch error*/","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"D-Limiter"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"D-Limiter"},"content":" * Used to evaluate String form of a Deadline","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"D-Limiter"},"content":" * @return String form of a Deadline","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"D-Limiter"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"D-Limiter"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"D-Limiter"},"content":" public String toString() {","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"D-Limiter"},"content":" String s \u003d \"\";","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"D-Limiter"},"content":" by \u003d by.trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"D-Limiter"},"content":" s \u003d \"[D]\" + super.toString() + \" (by: \" + d1 + \" \" + by.substring(i) + \")\";","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"D-Limiter"},"content":" return s;","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"D-Limiter"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"D-Limiter":43}},{"path":"src/main/java/alcazar/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"D-Limiter"},"content":"package alcazar;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"D-Limiter"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"D-Limiter"},"content":" * The class with the main method where all the functionality begins.","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"D-Limiter"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"D-Limiter"},"content":"import java.io.File;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"D-Limiter"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"D-Limiter"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"D-Limiter"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"D-Limiter"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"D-Limiter"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"D-Limiter"},"content":"public class Duke {","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"D-Limiter"},"content":" private Storage storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"D-Limiter"},"content":" private TaskList tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"D-Limiter"},"content":" private Ui ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"D-Limiter"},"content":" private Parser parser;","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"D-Limiter"},"content":" public Duke(String filePath) {","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"D-Limiter"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"D-Limiter"},"content":" storage \u003d new Storage(filePath);","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"D-Limiter"},"content":" tasks \u003d new TaskList(storage.load());","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"D-Limiter"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"D-Limiter"},"content":" * Method to run all the functionality to drive this project.","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"D-Limiter"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"D-Limiter"},"content":" public void run() {","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"D-Limiter"},"content":" ui.showWelcome();","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"D-Limiter"},"content":" boolean isExit \u003d false;","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"D-Limiter"},"content":" Parser p \u003d new Parser();","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"D-Limiter"},"content":" while (!isExit) {","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"D-Limiter"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"D-Limiter"},"content":" String fullCommand \u003d ui.readCommand();","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"D-Limiter"},"content":" isExit \u003d p.isExit(fullCommand);","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"D-Limiter"},"content":" if (isExit) {","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"D-Limiter"},"content":" continue;","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"D-Limiter"},"content":" ui.showLine(); // show the divider line (\"_______\")","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"D-Limiter"},"content":" p.parse(fullCommand, tasks, ui, storage);","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"D-Limiter"},"content":" } catch (InvalidTaskException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"D-Limiter"},"content":" ui.showLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"D-Limiter"},"content":" System.out.println(","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"D-Limiter"},"content":" e.getMessage() + \"\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"D-Limiter"},"content":" );","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"D-Limiter"},"content":" } catch (InvalidArgumentException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"D-Limiter"},"content":" ui.showLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"D-Limiter"},"content":" System.out.println(","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"D-Limiter"},"content":" e.getMessage() + \"\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"D-Limiter"},"content":" );","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"D-Limiter"},"content":" } catch(InvalidSerialException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"D-Limiter"},"content":" ui.showLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"D-Limiter"},"content":" System.out.println(","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"D-Limiter"},"content":" e.getMessage() + \"\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"D-Limiter"},"content":" );","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"D-Limiter"},"content":" } finally {","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"D-Limiter"},"content":" ui.showLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"D-Limiter"},"content":" ui.showExitMsg();","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"D-Limiter"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"D-Limiter"},"content":" Duke chatBot \u003d new Duke(\"./src/main/java/data/tasks.txt\");","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"D-Limiter"},"content":" chatBot.run();","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"D-Limiter"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"D-Limiter":69}},{"path":"src/main/java/alcazar/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"D-Limiter"},"content":"package alcazar;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"D-Limiter"},"content":"public class Event extends Task {","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"D-Limiter"},"content":" protected String from;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"D-Limiter"},"content":" protected String to;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"D-Limiter"},"content":" public Event(String description, String from, String to) {","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"D-Limiter"},"content":" super(description);","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"D-Limiter"},"content":" this.from \u003d from;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"D-Limiter"},"content":" this.to \u003d to;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"D-Limiter"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"D-Limiter"},"content":" * Used to evaluate String form of an Event","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"D-Limiter"},"content":" * @return String form of an Event","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"D-Limiter"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"D-Limiter"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"D-Limiter"},"content":" public String toString() {","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"D-Limiter"},"content":" return \"[E]\" + super.toString() + \" (from: \" + from + \" to: \" + to.trim() + \")\";","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"D-Limiter"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"D-Limiter":21}},{"path":"src/main/java/alcazar/InvalidArgumentException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"D-Limiter"},"content":"package alcazar;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"D-Limiter"},"content":"public class InvalidArgumentException extends Exception {","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"D-Limiter"},"content":" InvalidArgumentException(String msg) {","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"D-Limiter"},"content":" super(msg);","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"D-Limiter"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"D-Limiter":6}},{"path":"src/main/java/alcazar/InvalidSerialException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"D-Limiter"},"content":"package alcazar;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"D-Limiter"},"content":"public class InvalidSerialException extends Exception{","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"D-Limiter"},"content":" InvalidSerialException(String msg) {","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"D-Limiter"},"content":" super(msg);","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"D-Limiter"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"D-Limiter":6}},{"path":"src/main/java/alcazar/InvalidTaskException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"D-Limiter"},"content":"package alcazar;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"D-Limiter"},"content":"public class InvalidTaskException extends Exception {","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"D-Limiter"},"content":" InvalidTaskException(String msg) {","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"D-Limiter"},"content":" super(\"☹ OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"D-Limiter"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"D-Limiter":6}},{"path":"src/main/java/alcazar/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"D-Limiter"},"content":"package alcazar;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"D-Limiter"},"content":"public class Parser {","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"D-Limiter"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"D-Limiter"},"content":" * Method to interpret the command input.","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"D-Limiter"},"content":" * @param prompt The input text","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"D-Limiter"},"content":" * @param tasks The TaskList object containing current tasks","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"D-Limiter"},"content":" * @param ui Object to present different UI features","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"D-Limiter"},"content":" * @param storage Storage object containing methods to read and write to files","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"D-Limiter"},"content":" * @throws InvalidArgumentException In the situation when an InvalidArgument is passed","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"D-Limiter"},"content":" * @throws InvalidTaskException In the situation when an unrecognized task was passed","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"D-Limiter"},"content":" * @throws InvalidSerialException In the situation where an invalid serial number is passed","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"D-Limiter"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"D-Limiter"},"content":" public void parse(String prompt, TaskList tasks, Ui ui, Storage storage) throws InvalidArgumentException, InvalidTaskException, InvalidSerialException {","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"D-Limiter"},"content":" if (prompt.equals(\"list\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"D-Limiter"},"content":" ui.showLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"D-Limiter"},"content":" System.out.println(\"Here are the tasks in your list:\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"D-Limiter"},"content":" + tasks.getTasks());","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"D-Limiter"},"content":" ui.showLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"D-Limiter"},"content":" } else if(prompt.contains(\"find\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"D-Limiter"},"content":" ui.showLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"D-Limiter"},"content":" System.out.println(\"Here are the matching tasks in your list:\");","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"D-Limiter"},"content":" String search \u003d this.textAfter(prompt);","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"D-Limiter"},"content":" tasks.printEquals(search);","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"D-Limiter"},"content":" ui.showLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"D-Limiter"},"content":" } else if (prompt.contains(\"mark\") || prompt.contains(\"unmark\") ||","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"D-Limiter"},"content":" prompt.contains(\"delete\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"D-Limiter"},"content":" int index \u003d Integer.parseInt(prompt.charAt(prompt.length() - 1) + \"\");","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"D-Limiter"},"content":" if(index \u003e tasks.size()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"D-Limiter"},"content":" throw new InvalidSerialException(\"☹ OOPS!!! I think you have added\" +","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"D-Limiter"},"content":" \"an incorrect serial number greater than \" + (tasks.size() - 1));","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"D-Limiter"},"content":" if (prompt.contains(\"unmark\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"D-Limiter"},"content":" tasks.unmarkElement(index - 1);","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"D-Limiter"},"content":" storage.writeUp(tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"D-Limiter"},"content":" ui.showLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"D-Limiter"},"content":" System.out.println(","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"D-Limiter"},"content":" \"OK, I\u0027ve marked this task as not done yet:\\n\" +","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"D-Limiter"},"content":" tasks.elementAt(index - 1) + \"\\n\");","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"D-Limiter"},"content":" ui.showLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"D-Limiter"},"content":" } else if (prompt.contains(\"delete\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"D-Limiter"},"content":" ui.showLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"D-Limiter"},"content":" System.out.print(","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"D-Limiter"},"content":" \"Noted. I\u0027ve removed this task:\\n\" + \" \" +","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"D-Limiter"},"content":" tasks.elementAt(index - 1) + \"\\n\");","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"D-Limiter"},"content":" tasks.delete(index - 1);","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"D-Limiter"},"content":" storage.writeUp(tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"D-Limiter"},"content":" System.out.println(\"Now you have \" + tasks.size() + \" tasks in the list\\n\" );","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"D-Limiter"},"content":" ui.showLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"D-Limiter"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"D-Limiter"},"content":" tasks.markElement(index - 1);","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"D-Limiter"},"content":" storage.writeUp(tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"D-Limiter"},"content":" ui.showLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"D-Limiter"},"content":" System.out.println(","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"D-Limiter"},"content":" \"Nice! I\u0027ve marked this task as done:\\n\" +","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"D-Limiter"},"content":" tasks.elementAt(index - 1) + \"\\n\");","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"D-Limiter"},"content":" ui.showLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"D-Limiter"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"D-Limiter"},"content":" if (prompt.contains(\"deadline\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"D-Limiter"},"content":" String[] deadLine \u003d this.extractDeadline(this.textAfter(prompt));","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"D-Limiter"},"content":" System.out.println(deadLine[0] + \" ,, \" + deadLine[1] );","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"D-Limiter"},"content":" tasks.add(new Deadline(deadLine[0], deadLine[1]));","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"D-Limiter"},"content":" storage.writeUp(tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"D-Limiter"},"content":" } else if (prompt.contains(\"event\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"D-Limiter"},"content":" String[] eventData \u003d this.extractEvent(this.textAfter(prompt));","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"D-Limiter"},"content":" tasks.add(new Event(eventData[2], eventData[0], eventData[1]));","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"D-Limiter"},"content":" storage.writeUp(tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"D-Limiter"},"content":" } else if (prompt.contains(\"todo\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"D-Limiter"},"content":" tasks.add(new ToDo(this.textAfter(prompt)));","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"D-Limiter"},"content":" storage.writeUp(tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"D-Limiter"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"D-Limiter"},"content":" throw new InvalidTaskException(","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"D-Limiter"},"content":" \"☹ OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\"","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"D-Limiter"},"content":" );","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"D-Limiter"},"content":" ui.showLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"D-Limiter"},"content":" System.out.println(\"Got it. I\u0027ve added this task:\\n \"","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"D-Limiter"},"content":" + tasks.elementAt(tasks.size() - 1) + \"\\n\" +","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"D-Limiter"},"content":" \"Now you have \" + tasks.size() + \" tasks in the list\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"D-Limiter"},"content":" );","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"D-Limiter"},"content":" ui.showLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"D-Limiter"},"content":"// prompt \u003d chatBot.inputText();","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"D-Limiter"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":89,"author":{"gitId":"D-Limiter"},"content":" * To check if the input passed is an exit request.","lastModifiedDate":"2023-09-03"},{"lineNumber":90,"author":{"gitId":"D-Limiter"},"content":" * @param prompt Text input to the class\u0027s functions","lastModifiedDate":"2023-09-03"},{"lineNumber":91,"author":{"gitId":"D-Limiter"},"content":" * @return Returns a boolean","lastModifiedDate":"2023-09-03"},{"lineNumber":92,"author":{"gitId":"D-Limiter"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":93,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":94,"author":{"gitId":"D-Limiter"},"content":" public boolean isExit(String prompt) {","lastModifiedDate":"2023-09-02"},{"lineNumber":95,"author":{"gitId":"D-Limiter"},"content":" return prompt.contains(\"bye\");","lastModifiedDate":"2023-09-02"},{"lineNumber":96,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":97,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":98,"author":{"gitId":"D-Limiter"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":99,"author":{"gitId":"D-Limiter"},"content":" * Method to extract the content of the command","lastModifiedDate":"2023-09-02"},{"lineNumber":100,"author":{"gitId":"D-Limiter"},"content":" * @param sent The String that contains the command content after","lastModifiedDate":"2023-09-02"},{"lineNumber":101,"author":{"gitId":"D-Limiter"},"content":" * the specified command.","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"D-Limiter"},"content":" * @throws InvalidArgumentException if there is no content in the command","lastModifiedDate":"2023-09-03"},{"lineNumber":103,"author":{"gitId":"D-Limiter"},"content":" * @return Sentinel object of type R.","lastModifiedDate":"2023-09-02"},{"lineNumber":104,"author":{"gitId":"D-Limiter"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":105,"author":{"gitId":"D-Limiter"},"content":" public String textAfter(String sent) throws InvalidArgumentException {","lastModifiedDate":"2023-09-02"},{"lineNumber":106,"author":{"gitId":"D-Limiter"},"content":" String reText \u003d \"\";","lastModifiedDate":"2023-09-02"},{"lineNumber":107,"author":{"gitId":"D-Limiter"},"content":" String command \u003d \"\";","lastModifiedDate":"2023-09-02"},{"lineNumber":108,"author":{"gitId":"D-Limiter"},"content":" boolean flag \u003d false;","lastModifiedDate":"2023-09-02"},{"lineNumber":109,"author":{"gitId":"D-Limiter"},"content":" for (int i \u003d 0; i \u003c sent.length(); i++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":110,"author":{"gitId":"D-Limiter"},"content":" char ch \u003d sent.charAt(i);","lastModifiedDate":"2023-09-02"},{"lineNumber":111,"author":{"gitId":"D-Limiter"},"content":" if (flag) {","lastModifiedDate":"2023-09-02"},{"lineNumber":112,"author":{"gitId":"D-Limiter"},"content":" reText +\u003d ch;","lastModifiedDate":"2023-09-02"},{"lineNumber":113,"author":{"gitId":"D-Limiter"},"content":" } else if (ch \u003d\u003d \u0027 \u0027) {","lastModifiedDate":"2023-09-02"},{"lineNumber":114,"author":{"gitId":"D-Limiter"},"content":" command +\u003d ch;","lastModifiedDate":"2023-09-02"},{"lineNumber":115,"author":{"gitId":"D-Limiter"},"content":" flag \u003d true;","lastModifiedDate":"2023-09-02"},{"lineNumber":116,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":117,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":118,"author":{"gitId":"D-Limiter"},"content":" if(reText \u003d\u003d \"\") {","lastModifiedDate":"2023-09-02"},{"lineNumber":119,"author":{"gitId":"D-Limiter"},"content":" throw new InvalidArgumentException(\"☹ OOPS!!! The description of a \"","lastModifiedDate":"2023-09-02"},{"lineNumber":120,"author":{"gitId":"D-Limiter"},"content":" + command + \" cannot be empty.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":121,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":122,"author":{"gitId":"D-Limiter"},"content":" return reText;","lastModifiedDate":"2023-09-02"},{"lineNumber":123,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":124,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":125,"author":{"gitId":"D-Limiter"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":126,"author":{"gitId":"D-Limiter"},"content":" * Extracts the end timing of the deadline.","lastModifiedDate":"2023-09-02"},{"lineNumber":127,"author":{"gitId":"D-Limiter"},"content":" * @param text The input prompt","lastModifiedDate":"2023-09-02"},{"lineNumber":128,"author":{"gitId":"D-Limiter"},"content":" * @return An array containing the command content and end timing of","lastModifiedDate":"2023-09-02"},{"lineNumber":129,"author":{"gitId":"D-Limiter"},"content":" * the Deadline.","lastModifiedDate":"2023-09-02"},{"lineNumber":130,"author":{"gitId":"D-Limiter"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":131,"author":{"gitId":"D-Limiter"},"content":" public String[] extractDeadline(String text) {","lastModifiedDate":"2023-09-02"},{"lineNumber":132,"author":{"gitId":"D-Limiter"},"content":" String wrd \u003d \"\";","lastModifiedDate":"2023-09-02"},{"lineNumber":133,"author":{"gitId":"D-Limiter"},"content":" String str \u003d \"\";","lastModifiedDate":"2023-09-02"},{"lineNumber":134,"author":{"gitId":"D-Limiter"},"content":" int i;","lastModifiedDate":"2023-09-02"},{"lineNumber":135,"author":{"gitId":"D-Limiter"},"content":" for (i \u003d 0; i \u003c text.length(); i++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":136,"author":{"gitId":"D-Limiter"},"content":" char ch \u003d text.charAt(i);","lastModifiedDate":"2023-09-02"},{"lineNumber":137,"author":{"gitId":"D-Limiter"},"content":" if (ch \u003d\u003d \u0027 \u0027) {","lastModifiedDate":"2023-09-02"},{"lineNumber":138,"author":{"gitId":"D-Limiter"},"content":" if (wrd.equals(\"/by\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":139,"author":{"gitId":"D-Limiter"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":140,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":141,"author":{"gitId":"D-Limiter"},"content":" str +\u003d wrd + \" \";","lastModifiedDate":"2023-09-02"},{"lineNumber":142,"author":{"gitId":"D-Limiter"},"content":" wrd \u003d \"\";","lastModifiedDate":"2023-09-02"},{"lineNumber":143,"author":{"gitId":"D-Limiter"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":144,"author":{"gitId":"D-Limiter"},"content":" wrd +\u003d ch;","lastModifiedDate":"2023-09-02"},{"lineNumber":145,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":146,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":147,"author":{"gitId":"D-Limiter"},"content":" String[] deadArray \u003d new String[2];","lastModifiedDate":"2023-09-03"},{"lineNumber":148,"author":{"gitId":"D-Limiter"},"content":" deadArray[0] \u003d str.trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":149,"author":{"gitId":"D-Limiter"},"content":" deadArray[1] \u003d text.substring(i + 1);","lastModifiedDate":"2023-09-02"},{"lineNumber":150,"author":{"gitId":"D-Limiter"},"content":" return deadArray;","lastModifiedDate":"2023-09-02"},{"lineNumber":151,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":152,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":153,"author":{"gitId":"D-Limiter"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":154,"author":{"gitId":"D-Limiter"},"content":" * Method to extract the start and end timings of a deadline","lastModifiedDate":"2023-09-02"},{"lineNumber":155,"author":{"gitId":"D-Limiter"},"content":" * @param text The input text","lastModifiedDate":"2023-09-02"},{"lineNumber":156,"author":{"gitId":"D-Limiter"},"content":" * @return Returns and array containing the command content,","lastModifiedDate":"2023-09-02"},{"lineNumber":157,"author":{"gitId":"D-Limiter"},"content":" * the start and the end times","lastModifiedDate":"2023-09-02"},{"lineNumber":158,"author":{"gitId":"D-Limiter"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":159,"author":{"gitId":"D-Limiter"},"content":" public String[] extractEvent(String text) {","lastModifiedDate":"2023-09-02"},{"lineNumber":160,"author":{"gitId":"D-Limiter"},"content":" String str[] \u003d new String[3];","lastModifiedDate":"2023-09-02"},{"lineNumber":161,"author":{"gitId":"D-Limiter"},"content":" str[0] \u003d \"\";","lastModifiedDate":"2023-09-02"},{"lineNumber":162,"author":{"gitId":"D-Limiter"},"content":" str[1] \u003d \"\";","lastModifiedDate":"2023-09-02"},{"lineNumber":163,"author":{"gitId":"D-Limiter"},"content":" str[2] \u003d \"\";","lastModifiedDate":"2023-09-02"},{"lineNumber":164,"author":{"gitId":"D-Limiter"},"content":" String wrd \u003d \"\";","lastModifiedDate":"2023-09-02"},{"lineNumber":165,"author":{"gitId":"D-Limiter"},"content":" text \u003d text + \" \";","lastModifiedDate":"2023-09-02"},{"lineNumber":166,"author":{"gitId":"D-Limiter"},"content":" boolean fromFlag \u003d false;","lastModifiedDate":"2023-09-02"},{"lineNumber":167,"author":{"gitId":"D-Limiter"},"content":" boolean toFlag \u003d false;","lastModifiedDate":"2023-09-02"},{"lineNumber":168,"author":{"gitId":"D-Limiter"},"content":" for (int i \u003d 0; i \u003c text.length(); i++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":169,"author":{"gitId":"D-Limiter"},"content":" char ch \u003d text.charAt(i);","lastModifiedDate":"2023-09-02"},{"lineNumber":170,"author":{"gitId":"D-Limiter"},"content":" if (ch \u003d\u003d \u0027 \u0027) {","lastModifiedDate":"2023-09-02"},{"lineNumber":171,"author":{"gitId":"D-Limiter"},"content":" if (wrd.equals(\"/from\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":172,"author":{"gitId":"D-Limiter"},"content":" fromFlag \u003d true;","lastModifiedDate":"2023-09-02"},{"lineNumber":173,"author":{"gitId":"D-Limiter"},"content":" } else if (wrd.equals(\"/to\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":174,"author":{"gitId":"D-Limiter"},"content":" toFlag \u003d true;","lastModifiedDate":"2023-09-02"},{"lineNumber":175,"author":{"gitId":"D-Limiter"},"content":" fromFlag \u003d false;","lastModifiedDate":"2023-09-02"},{"lineNumber":176,"author":{"gitId":"D-Limiter"},"content":" } else if (fromFlag) {","lastModifiedDate":"2023-09-02"},{"lineNumber":177,"author":{"gitId":"D-Limiter"},"content":" str[0] +\u003d wrd + \" \";","lastModifiedDate":"2023-09-02"},{"lineNumber":178,"author":{"gitId":"D-Limiter"},"content":" } else if (toFlag) {","lastModifiedDate":"2023-09-02"},{"lineNumber":179,"author":{"gitId":"D-Limiter"},"content":" str[1] +\u003d wrd + \" \";","lastModifiedDate":"2023-09-02"},{"lineNumber":180,"author":{"gitId":"D-Limiter"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":181,"author":{"gitId":"D-Limiter"},"content":" str[2] +\u003d wrd + \" \";","lastModifiedDate":"2023-09-02"},{"lineNumber":182,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":183,"author":{"gitId":"D-Limiter"},"content":" wrd \u003d \"\";","lastModifiedDate":"2023-09-02"},{"lineNumber":184,"author":{"gitId":"D-Limiter"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":185,"author":{"gitId":"D-Limiter"},"content":" wrd +\u003d ch;","lastModifiedDate":"2023-09-02"},{"lineNumber":186,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":187,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":188,"author":{"gitId":"D-Limiter"},"content":" str[2] \u003d str[2].trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":189,"author":{"gitId":"D-Limiter"},"content":" return str;","lastModifiedDate":"2023-09-02"},{"lineNumber":190,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":191,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":192,"author":{"gitId":"D-Limiter"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"D-Limiter":192}},{"path":"src/main/java/alcazar/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"D-Limiter"},"content":"package alcazar;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"D-Limiter"},"content":"import java.io.File;","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"D-Limiter"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"D-Limiter"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"D-Limiter"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"D-Limiter"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"D-Limiter"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"D-Limiter"},"content":"public class Storage {","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"D-Limiter"},"content":" private final String filePath;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"D-Limiter"},"content":" Storage(String filePath) {","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"D-Limiter"},"content":" this.filePath \u003dfilePath;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"D-Limiter"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"D-Limiter"},"content":" printTasks();","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"D-Limiter"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"D-Limiter"},"content":" System.out.println(\"Error loading file\");","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"D-Limiter"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"D-Limiter"},"content":" * Prints the contents of the file stored at filePath","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"D-Limiter"},"content":" * @throws FileNotFoundException It is thrown in a situation where the file","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"D-Limiter"},"content":" * does not exist at the given filePath","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"D-Limiter"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"D-Limiter"},"content":" public void printTasks() throws FileNotFoundException {","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"D-Limiter"},"content":" File f \u003d new File(filePath);","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"D-Limiter"},"content":" Scanner s \u003d new Scanner(f);","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"D-Limiter"},"content":" while (s.hasNext()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"D-Limiter"},"content":" System.out.println(s.nextLine());","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"D-Limiter"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"D-Limiter"},"content":" * Writes the new tasks to file","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"D-Limiter"},"content":" * @param t Stores the tasks in a TaskList object","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"D-Limiter"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"D-Limiter"},"content":" public void writeUp(TaskList t) {","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"D-Limiter"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"D-Limiter"},"content":" FileWriter fw \u003d new FileWriter(filePath);","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"D-Limiter"},"content":" fw.write(t.getTasks());","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"D-Limiter"},"content":" fw.close();","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"D-Limiter"},"content":" this.printTasks();","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"D-Limiter"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"D-Limiter"},"content":" System.out.println(\"An exception occurred: \" + e.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"D-Limiter"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"D-Limiter"},"content":" * Converts the input text into its equivalent ToDo Task","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"D-Limiter"},"content":" * @param text String to be converted to a ToDo task","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"D-Limiter"},"content":" * @return The ToDo task converted from text","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"D-Limiter"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"D-Limiter"},"content":" public ToDo taskToDo(String text) {","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"D-Limiter"},"content":" ToDo t \u003d new ToDo(text.substring(10).trim());","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"D-Limiter"},"content":" if (text.charAt(7) \u003d\u003d \u0027X\u0027) {","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"D-Limiter"},"content":" t.markTask();","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"D-Limiter"},"content":" return t;","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"D-Limiter"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"D-Limiter"},"content":" * Converts the input text into its equivalent Event Task","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"D-Limiter"},"content":" * @param text String to be converted to Event Task","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"D-Limiter"},"content":" * @return The Event task converted from text","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"D-Limiter"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"D-Limiter"},"content":" public Event taskEvent(String text) {","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"D-Limiter"},"content":" boolean isMarked \u003d text.charAt(7) \u003d\u003d \u0027X\u0027;","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"D-Limiter"},"content":" String[] parts \u003d text.split(\"[()]\");","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"D-Limiter"},"content":" String taskDescription \u003d parts[0].trim().substring(10);","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"D-Limiter"},"content":" String timeInfo \u003d parts[1].trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"D-Limiter"},"content":" String[] timeParts \u003d timeInfo.split(\"from:|to:\");","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"D-Limiter"},"content":" String startTime \u003d timeParts[1].trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"D-Limiter"},"content":" String endTime \u003d timeParts[2].trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"D-Limiter"},"content":" String[] extractedValues \u003d { taskDescription, startTime, endTime };","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"D-Limiter"},"content":" Event e \u003d new Event(extractedValues[0], extractedValues[1], extractedValues[2]);","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"D-Limiter"},"content":" if (isMarked) {","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"D-Limiter"},"content":" e.markTask();","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"D-Limiter"},"content":" return e;","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"D-Limiter"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"D-Limiter"},"content":" * Converts the input text into its equivalent Deadline Task","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"D-Limiter"},"content":" * @param text The String to be converted to a Deadline Task","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"D-Limiter"},"content":" * @return The Deadline Task from the converted String","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"D-Limiter"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"D-Limiter"},"content":" public Deadline taskDeadline(String text) {","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"D-Limiter"},"content":" boolean isMarked \u003d text.charAt(7) \u003d\u003d \u0027X\u0027;","lastModifiedDate":"2023-09-02"},{"lineNumber":89,"author":{"gitId":"D-Limiter"},"content":" text \u003d text.substring(10);","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"D-Limiter"},"content":" String wrd \u003d \"\";","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"D-Limiter"},"content":" String str \u003d \"\";","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"D-Limiter"},"content":" int i;","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"D-Limiter"},"content":" for (i \u003d 0; i \u003c text.length(); i++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"D-Limiter"},"content":" char ch \u003d text.charAt(i);","lastModifiedDate":"2023-09-02"},{"lineNumber":95,"author":{"gitId":"D-Limiter"},"content":" if (ch \u003d\u003d \u0027 \u0027) {","lastModifiedDate":"2023-09-02"},{"lineNumber":96,"author":{"gitId":"D-Limiter"},"content":" if (wrd.equals(\"(by:\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":97,"author":{"gitId":"D-Limiter"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":98,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":99,"author":{"gitId":"D-Limiter"},"content":" str +\u003d wrd + \" \";","lastModifiedDate":"2023-09-02"},{"lineNumber":100,"author":{"gitId":"D-Limiter"},"content":" wrd \u003d \"\";","lastModifiedDate":"2023-09-02"},{"lineNumber":101,"author":{"gitId":"D-Limiter"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"D-Limiter"},"content":" wrd +\u003d ch;","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":104,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":105,"author":{"gitId":"D-Limiter"},"content":" String[] deadArray \u003d new String[2];","lastModifiedDate":"2023-09-03"},{"lineNumber":106,"author":{"gitId":"D-Limiter"},"content":" deadArray[0] \u003d str.trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":107,"author":{"gitId":"D-Limiter"},"content":" deadArray[1] \u003d text.substring(i + 1, text.length() - 1);","lastModifiedDate":"2023-09-02"},{"lineNumber":108,"author":{"gitId":"D-Limiter"},"content":" Deadline d \u003d new Deadline(deadArray[0], deadArray[1]);","lastModifiedDate":"2023-09-02"},{"lineNumber":109,"author":{"gitId":"D-Limiter"},"content":" if (isMarked) {","lastModifiedDate":"2023-09-02"},{"lineNumber":110,"author":{"gitId":"D-Limiter"},"content":" d.markTask();","lastModifiedDate":"2023-09-02"},{"lineNumber":111,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":112,"author":{"gitId":"D-Limiter"},"content":" return d;","lastModifiedDate":"2023-09-02"},{"lineNumber":113,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":114,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":115,"author":{"gitId":"D-Limiter"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":116,"author":{"gitId":"D-Limiter"},"content":" * This method reads a file and converts its text into an ArrayList of Task objects","lastModifiedDate":"2023-09-02"},{"lineNumber":117,"author":{"gitId":"D-Limiter"},"content":" * @return ArrayList of Tasks","lastModifiedDate":"2023-09-02"},{"lineNumber":118,"author":{"gitId":"D-Limiter"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":119,"author":{"gitId":"D-Limiter"},"content":" public ArrayList\u003cTask\u003e load() {","lastModifiedDate":"2023-09-02"},{"lineNumber":120,"author":{"gitId":"D-Limiter"},"content":" ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-02"},{"lineNumber":121,"author":{"gitId":"D-Limiter"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":122,"author":{"gitId":"D-Limiter"},"content":" File f \u003d new File(filePath);","lastModifiedDate":"2023-09-02"},{"lineNumber":123,"author":{"gitId":"D-Limiter"},"content":" Scanner s \u003d new Scanner(f);","lastModifiedDate":"2023-09-02"},{"lineNumber":124,"author":{"gitId":"D-Limiter"},"content":" while (s.hasNext()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":125,"author":{"gitId":"D-Limiter"},"content":" String prompt \u003d s.nextLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":126,"author":{"gitId":"D-Limiter"},"content":" char ch \u003d prompt.charAt(4);","lastModifiedDate":"2023-09-02"},{"lineNumber":127,"author":{"gitId":"D-Limiter"},"content":" if (ch \u003d\u003d \u0027T\u0027) {","lastModifiedDate":"2023-09-02"},{"lineNumber":128,"author":{"gitId":"D-Limiter"},"content":" tasks.add(taskToDo(prompt));","lastModifiedDate":"2023-09-02"},{"lineNumber":129,"author":{"gitId":"D-Limiter"},"content":" } else if (ch \u003d\u003d \u0027E\u0027) {","lastModifiedDate":"2023-09-02"},{"lineNumber":130,"author":{"gitId":"D-Limiter"},"content":" tasks.add(taskEvent(prompt));","lastModifiedDate":"2023-09-02"},{"lineNumber":131,"author":{"gitId":"D-Limiter"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":132,"author":{"gitId":"D-Limiter"},"content":" tasks.add(taskDeadline(prompt));","lastModifiedDate":"2023-09-02"},{"lineNumber":133,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":134,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":135,"author":{"gitId":"D-Limiter"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":136,"author":{"gitId":"D-Limiter"},"content":" System.out.println(\"Error! Could not find file!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":137,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":138,"author":{"gitId":"D-Limiter"},"content":" return tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":139,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":140,"author":{"gitId":"D-Limiter"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"D-Limiter":140}},{"path":"src/main/java/alcazar/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"D-Limiter"},"content":"package alcazar;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"D-Limiter"},"content":"public class Task {","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"D-Limiter"},"content":" private boolean isMarked;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"D-Limiter"},"content":" private String taskPrompt;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"D-Limiter"},"content":" Task(String taskPrompt) {","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"D-Limiter"},"content":" this.taskPrompt \u003d taskPrompt;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"D-Limiter"},"content":" this.isMarked \u003d false;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"D-Limiter"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"D-Limiter"},"content":" * Used to mark this task done.","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"D-Limiter"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"D-Limiter"},"content":" public void markTask() {","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"D-Limiter"},"content":" this.isMarked \u003d true;","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"D-Limiter"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"D-Limiter"},"content":" * Used to mark this task undone.","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"D-Limiter"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"D-Limiter"},"content":" public void unmarkTask() {","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"D-Limiter"},"content":" this.isMarked \u003d false;","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"D-Limiter"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"D-Limiter"},"content":" * Used to evaluate String form of a Task","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"D-Limiter"},"content":" * @return String form of a Task","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"D-Limiter"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"D-Limiter"},"content":" public String toString() {","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"D-Limiter"},"content":" String marked;","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"D-Limiter"},"content":" if(this.isMarked) {","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"D-Limiter"},"content":" marked \u003d \"X\";","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"D-Limiter"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"D-Limiter"},"content":" marked \u003d \" \";","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"D-Limiter"},"content":" return \"[\" + marked + \"] \" + this.taskPrompt;","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"D-Limiter"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"D-Limiter":37}},{"path":"src/main/java/alcazar/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"D-Limiter"},"content":"package alcazar;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"D-Limiter"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"D-Limiter"},"content":"public class TaskList {","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"D-Limiter"},"content":" private ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"D-Limiter"},"content":" TaskList(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"D-Limiter"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"D-Limiter"},"content":" public int size() {","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"D-Limiter"},"content":" return this.tasks.size();","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"D-Limiter"},"content":" public void markElement(int index) {","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"D-Limiter"},"content":" this.tasks.get(index).markTask();","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"D-Limiter"},"content":" public void unmarkElement(int index) {","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"D-Limiter"},"content":" this.tasks.get(index).unmarkTask();","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"D-Limiter"},"content":" public Task elementAt(int index) {","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"D-Limiter"},"content":" return this.tasks.get(index);","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"D-Limiter"},"content":" public void delete(int index) {","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"D-Limiter"},"content":" this.tasks.remove(index);","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"D-Limiter"},"content":" public void add(Task t) {","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"D-Limiter"},"content":" this.tasks.add(t);","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"D-Limiter"},"content":" public void printEquals(String search) {","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"D-Limiter"},"content":" String listedTasks \u003d \"\";","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"D-Limiter"},"content":" for(int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"D-Limiter"},"content":" if (tasks.get(i).toString().contains(search)) {","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"D-Limiter"},"content":" listedTasks +\u003d (i + 1) + \". \" + tasks.get(i).toString() + \"\\n\";","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"D-Limiter"},"content":" if (listedTasks.equals(\"\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"D-Limiter"},"content":" System.out.println(\"Sorry no matching tasks.\");","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"D-Limiter"},"content":" } else {","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"D-Limiter"},"content":" System.out.println(listedTasks);","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"D-Limiter"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"D-Limiter"},"content":" * The method evaluates the list of the passed tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"D-Limiter"},"content":" * @return String of all the passed tasks","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"D-Limiter"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"D-Limiter"},"content":" public String getTasks() {","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"D-Limiter"},"content":" String listedTasks \u003d \"\";","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"D-Limiter"},"content":" for(int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"D-Limiter"},"content":" listedTasks +\u003d (i + 1) + \". \" + tasks.get(i).toString() + \"\\n\";","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"D-Limiter"},"content":" return listedTasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"D-Limiter"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"D-Limiter":60}},{"path":"src/main/java/alcazar/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"D-Limiter"},"content":"package alcazar;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"D-Limiter"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"D-Limiter"},"content":" public ToDo(String description) {","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"D-Limiter"},"content":" super(description);","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"D-Limiter"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"D-Limiter"},"content":" * Used to evaluate String form of a ToDo task","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"D-Limiter"},"content":" * @return String form of a ToDo Task","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"D-Limiter"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"D-Limiter"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"D-Limiter"},"content":" public String toString() {","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"D-Limiter"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"D-Limiter"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"D-Limiter":19}},{"path":"src/main/java/alcazar/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"D-Limiter"},"content":"package alcazar;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"D-Limiter"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"D-Limiter"},"content":"public class Ui {","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"D-Limiter"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"D-Limiter"},"content":" * Used to show the Welcome message","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"D-Limiter"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"D-Limiter"},"content":" public void showWelcome() {","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"D-Limiter"},"content":" String line \u003d \"____________________________________________________________\\n\";","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"D-Limiter"},"content":" System.out.println(line + \" Hello! I\u0027m Alcazar\\n\" +","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"D-Limiter"},"content":" \" What can I do for you?\\n\" +","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"D-Limiter"},"content":" line);","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"D-Limiter"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"D-Limiter"},"content":" * Used to read command from console.","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"D-Limiter"},"content":" * @return String containing the new command","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"D-Limiter"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"D-Limiter"},"content":" public String readCommand() {","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"D-Limiter"},"content":" Scanner sc \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"D-Limiter"},"content":" String st \u003d sc.nextLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"D-Limiter"},"content":" return st;","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"D-Limiter"},"content":" public void showLine() {","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"D-Limiter"},"content":" System.out.println(\"____________________________________________________________\\n\");","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"D-Limiter"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"D-Limiter"},"content":" * Used to show an error if any","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"D-Limiter"},"content":" * @param msg Used to print the mess","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"D-Limiter"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"D-Limiter"},"content":" public void showError(String msg) {","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"D-Limiter"},"content":" System.out.println(msg);","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"D-Limiter"},"content":" public void showLoadingError() {","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"D-Limiter"},"content":" System.out.println(\"Error loading data from the file\");","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"D-Limiter"},"content":" public void showExitMsg() {","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"D-Limiter"},"content":" this.showLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"D-Limiter"},"content":" System.out.println(","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"D-Limiter"},"content":" \" Bye. Hope to see you again soon!\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"D-Limiter"},"content":" );","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"D-Limiter"},"content":" this.showLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"D-Limiter"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"D-Limiter":48}},{"path":"src/main/java/data/tasks.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"D-Limiter"},"content":"1. [T][X] read book","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"D-Limiter":1}},{"path":"src/test/java/alcazar/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"D-Limiter"},"content":"package alcazar;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"D-Limiter"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"D-Limiter"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"D-Limiter"},"content":"public class ParserTest {","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"D-Limiter"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"D-Limiter"},"content":" void textAfterTest() {","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"D-Limiter"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"D-Limiter"},"content":" assertEquals(\"birthday /from 2pm /to 6pm\", new Parser().textAfter(\"event birthday /from 2pm /to 6pm\"));","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"D-Limiter"},"content":" } catch (InvalidArgumentException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"D-Limiter"},"content":" System.out.println(\"Exception thrown\");","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"D-Limiter"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"D-Limiter"},"content":" void extractDeadlineTest() {","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"D-Limiter"},"content":" String s[] \u003d {\"submit assignment\",\"Oct 4th 1800\"};","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"D-Limiter"},"content":" assertEquals(s[0], new Parser().extractDeadline(\"submit assignment /by Oct 4th 1800\")[0]);","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"D-Limiter"},"content":" assertEquals(s[1], new Parser().extractDeadline(\"submit assignment /by Oct 4th 1800\")[1]);","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"D-Limiter"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"D-Limiter":23}},{"path":"src/test/java/alcazar/TaskListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"D-Limiter"},"content":"package alcazar;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"D-Limiter"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"D-Limiter"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"D-Limiter"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"D-Limiter"},"content":"public class TaskListTest {","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"D-Limiter"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"D-Limiter"},"content":" void getTasksTest() {","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"D-Limiter"},"content":" ArrayList\u003cTask\u003e al \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"D-Limiter"},"content":" al.add(new ToDo(\"read book\"));","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"D-Limiter"},"content":" String s \u003d \"1. [T][ ] read book\\n\";","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"D-Limiter"},"content":" assertEquals(s, new TaskList(al).getTasks());","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"D-Limiter"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"D-Limiter"},"content":" void elementAtTest() {","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"D-Limiter"},"content":" ArrayList\u003cTask\u003e al \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"D-Limiter"},"content":" al.add(new ToDo(\"read book\"));","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"D-Limiter"},"content":" assertEquals(\"[T][ ] read book\", new TaskList(al).elementAt(0).toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"D-Limiter"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"D-Limiter":24}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"D-Limiter"},"content":"todo borrow book","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"D-Limiter":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":"-"},"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":"D-Limiter"},"content":"javac -cp ..\\src\\main\\java\\Duke.java -Xlint:none -d ..\\bin ..\\src\\main\\java\\Duke.java","lastModifiedDate":"2023-08-24"},{"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":"-"},"content":"java -classpath ..\\bin Duke \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"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":{"D-Limiter":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":"D-Limiter"},"content":"if ! javac -cp ../src/main/java/*.java -Xlint:none -d ../bin ../src/main/java/*.java","lastModifiedDate":"2023-08-24"},{"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":"-"},"content":"java -classpath ../bin Duke \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"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":{"D-Limiter":1,"-":37}}] +[{"path":"build.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"plugins {","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"D-Limiter"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"-"},"content":" id \u0027java\u0027","lastModifiedDate":"2020-05-25"},{"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":"D-Limiter"},"content":"checkstyle {","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"D-Limiter"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"D-Limiter"},"content":"}","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":17,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":18,"author":{"gitId":"D-Limiter"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"D-Limiter"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"D-Limiter"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-10"},{"lineNumber":21,"author":{"gitId":"D-Limiter"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"D-Limiter"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"D-Limiter"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"D-Limiter"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"D-Limiter"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"D-Limiter"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-10"},{"lineNumber":27,"author":{"gitId":"D-Limiter"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"D-Limiter"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"D-Limiter"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-10"},{"lineNumber":30,"author":{"gitId":"D-Limiter"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":" }","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":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":48,"author":{"gitId":"D-Limiter"},"content":" mainClass.set(\"alcazar.Main\")","lastModifiedDate":"2023-09-10"},{"lineNumber":49,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":50,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":51,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":52,"author":{"gitId":"D-Limiter"},"content":" archiveBaseName \u003d \"alcazar\"","lastModifiedDate":"2023-09-10"},{"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":{"D-Limiter":19,"-":40}},{"path":"src/main/java/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"D-Limiter"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"D-Limiter"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"D-Limiter"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"D-Limiter"},"content":" private String by;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"D-Limiter"},"content":" private String d1;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"D-Limiter"},"content":" int i \u003d 0;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"D-Limiter"},"content":" public Deadline(String description, String by) {","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"D-Limiter"},"content":" super(description);","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"D-Limiter"},"content":" this.by \u003d by.trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"D-Limiter"},"content":" String date \u003d \"\";","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"D-Limiter"},"content":" for (i \u003d 0; i \u003c by.length(); i++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"D-Limiter"},"content":" if (by.charAt(i) \u003d\u003d \u0027 \u0027) {","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"D-Limiter"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"D-Limiter"},"content":" date +\u003d by.charAt(i);","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"D-Limiter"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"D-Limiter"},"content":" DateTimeFormatter df \u003d DateTimeFormatter.ofPattern(\"MMM d yyyy\");","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"D-Limiter"},"content":" LocalDate d \u003d LocalDate.parse(date);","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"D-Limiter"},"content":" d1 \u003d d.format(df);","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"D-Limiter"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"D-Limiter"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"D-Limiter"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"D-Limiter"},"content":" * Used to evaluate String form of a Deadlien","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"D-Limiter"},"content":" * @return String form of a Deadline","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"D-Limiter"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"D-Limiter"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"D-Limiter"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"D-Limiter"},"content":" String s \u003d \"\";","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"D-Limiter"},"content":" by \u003d by.trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"D-Limiter"},"content":" s \u003d \"[D]\" + super.toString() + \" (by: \" + d1 + \" \" + by.substring(i) + \")\";","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"D-Limiter"},"content":" return s;","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":42,"author":{"gitId":"D-Limiter"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"D-Limiter":42}},{"path":"src/main/java/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"D-Limiter"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"D-Limiter"},"content":" protected String from;","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"D-Limiter"},"content":" protected String to;","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"D-Limiter"},"content":" public Event(String description, String from, String to) {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"D-Limiter"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"D-Limiter"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"D-Limiter"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"D-Limiter"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"D-Limiter"},"content":" * Used to evaluate String form of a Event","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"D-Limiter"},"content":" * @return String form of an Eventgit","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"D-Limiter"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"D-Limiter"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"D-Limiter"},"content":" public String toString() {","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"D-Limiter"},"content":" return \"[E]\" + super.toString() + \" (from: \" + from + \" to: \" + to.trim() + \")\";","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"D-Limiter"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"D-Limiter":20}},{"path":"src/main/java/InvalidArgumentException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"D-Limiter"},"content":"public class InvalidArgumentException extends Exception {","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"D-Limiter"},"content":" InvalidArgumentException(String msg) {","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"D-Limiter"},"content":" super(msg);","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"D-Limiter"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"D-Limiter":5}},{"path":"src/main/java/InvalidSerialException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"D-Limiter"},"content":"public class InvalidSerialException extends Exception{","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"D-Limiter"},"content":" InvalidSerialException(String msg) {","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"D-Limiter"},"content":" super(msg);","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"D-Limiter"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"D-Limiter":5}},{"path":"src/main/java/InvalidTaskException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"D-Limiter"},"content":"public class InvalidTaskException extends Exception {","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"D-Limiter"},"content":" InvalidTaskException(String msg) {","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"D-Limiter"},"content":" super(\"☹ OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"D-Limiter"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"D-Limiter":5}},{"path":"src/main/java/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"D-Limiter"},"content":"public class Parser {","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"D-Limiter"},"content":" public void parse(String prompt, TaskList tasks, Ui ui, Storage storage) throws InvalidArgumentException, InvalidTaskException, InvalidSerialException {","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"D-Limiter"},"content":" if (prompt.equals(\"list\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"D-Limiter"},"content":" ui.showLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"D-Limiter"},"content":" System.out.println(\"Here are the tasks in your list:\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"D-Limiter"},"content":" + tasks.getTasks());","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"D-Limiter"},"content":" ui.showLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"D-Limiter"},"content":" } else if (prompt.contains(\"mark\") || prompt.contains(\"unmark\") ||","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"D-Limiter"},"content":" prompt.contains(\"delete\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"D-Limiter"},"content":" int index \u003d Integer.parseInt(prompt.charAt(prompt.length() - 1) + \"\");","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"D-Limiter"},"content":" if(index \u003e tasks.size()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"D-Limiter"},"content":" throw new InvalidSerialException(\"☹ OOPS!!! I think you have added\" +","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"D-Limiter"},"content":" \"an incorrect serial number greater than \" + (tasks.size() - 1));","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"D-Limiter"},"content":" if (prompt.contains(\"unmark\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"D-Limiter"},"content":" tasks.unmarkElement(index - 1);","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"D-Limiter"},"content":" storage.writeUp(tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"D-Limiter"},"content":" ui.showLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"D-Limiter"},"content":" System.out.println(","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"D-Limiter"},"content":" \"OK, I\u0027ve marked this task as not done yet:\\n\" +","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"D-Limiter"},"content":" tasks.elementAt(index - 1) + \"\\n\");","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"D-Limiter"},"content":" ui.showLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"D-Limiter"},"content":" } else if (prompt.contains(\"delete\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"D-Limiter"},"content":" ui.showLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"D-Limiter"},"content":" System.out.print(","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"D-Limiter"},"content":" \"Noted. I\u0027ve removed this task:\\n\" + \" \" +","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"D-Limiter"},"content":" tasks.elementAt(index - 1) + \"\\n\");","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"D-Limiter"},"content":" tasks.delete(index - 1);","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"D-Limiter"},"content":" storage.writeUp(tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"D-Limiter"},"content":" System.out.println(\"Now you have \" + tasks.size() + \" tasks in the list\\n\" );","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"D-Limiter"},"content":" ui.showLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"D-Limiter"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"D-Limiter"},"content":" tasks.markElement(index - 1);","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"D-Limiter"},"content":" storage.writeUp(tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"D-Limiter"},"content":" ui.showLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"D-Limiter"},"content":" System.out.println(","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"D-Limiter"},"content":" \"Nice! I\u0027ve marked this task as done:\\n\" +","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"D-Limiter"},"content":" tasks.elementAt(index - 1) + \"\\n\");","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"D-Limiter"},"content":" ui.showLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"D-Limiter"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"D-Limiter"},"content":" if (prompt.contains(\"deadline\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"D-Limiter"},"content":" String deadLine[] \u003d this.extractDeadline(this.textAfter(prompt));","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"D-Limiter"},"content":" System.out.println(deadLine[0] + \" ,, \" + deadLine[1] );","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"D-Limiter"},"content":" tasks.add(new Deadline(deadLine[0], deadLine[1]));","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"D-Limiter"},"content":" System.out.println(\"LOLOLOL\\n\"+tasks.elementAt(tasks.size()-1));","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"D-Limiter"},"content":" storage.writeUp(tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"D-Limiter"},"content":" } else if (prompt.contains(\"event\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"D-Limiter"},"content":" String eventData[] \u003d this.extractEvent(this.textAfter(prompt));","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"D-Limiter"},"content":" tasks.add(new Event(eventData[2], eventData[0], eventData[1]));","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"D-Limiter"},"content":" storage.writeUp(tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"D-Limiter"},"content":" } else if (prompt.contains(\"todo\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"D-Limiter"},"content":" tasks.add(new ToDo(this.textAfter(prompt)));","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"D-Limiter"},"content":" storage.writeUp(tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"D-Limiter"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"D-Limiter"},"content":" throw new InvalidTaskException(","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"D-Limiter"},"content":" \"☹ OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\"","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"D-Limiter"},"content":" );","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"D-Limiter"},"content":" ui.showLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"D-Limiter"},"content":" System.out.println(\"Got it. I\u0027ve added this task:\\n \"","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"D-Limiter"},"content":" + tasks.elementAt(tasks.size() - 1) + \"\\n\" +","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"D-Limiter"},"content":" \"Now you have \" + tasks.size() + \" tasks in the list\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"D-Limiter"},"content":" );","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"D-Limiter"},"content":" ui.showLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"D-Limiter"},"content":"// prompt \u003d chatBot.inputText();","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"D-Limiter"},"content":" public boolean isExit(String prompt) {","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"D-Limiter"},"content":" return prompt.contains(\"bye\");","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"D-Limiter"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"D-Limiter"},"content":" * Method to extract the content of the command","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"D-Limiter"},"content":" * @param sent The String that contains the command content after","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"D-Limiter"},"content":" * the specified command.","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"D-Limiter"},"content":" * @throws InvalidArgumentException if there is not content in the command","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"D-Limiter"},"content":" * @return Sentinel object of type R.","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"D-Limiter"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"D-Limiter"},"content":" public String textAfter(String sent) throws InvalidArgumentException {","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"D-Limiter"},"content":" String reText \u003d \"\";","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"D-Limiter"},"content":" String command \u003d \"\";","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"D-Limiter"},"content":" boolean flag \u003d false;","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"D-Limiter"},"content":" for (int i \u003d 0; i \u003c sent.length(); i++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"D-Limiter"},"content":" char ch \u003d sent.charAt(i);","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"D-Limiter"},"content":" if (flag) {","lastModifiedDate":"2023-09-02"},{"lineNumber":89,"author":{"gitId":"D-Limiter"},"content":" reText +\u003d ch;","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"D-Limiter"},"content":" } else if (ch \u003d\u003d \u0027 \u0027) {","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"D-Limiter"},"content":" command +\u003d ch;","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"D-Limiter"},"content":" flag \u003d true;","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":95,"author":{"gitId":"D-Limiter"},"content":" if(reText \u003d\u003d \"\") {","lastModifiedDate":"2023-09-02"},{"lineNumber":96,"author":{"gitId":"D-Limiter"},"content":" throw new InvalidArgumentException(\"☹ OOPS!!! The description of a \"","lastModifiedDate":"2023-09-02"},{"lineNumber":97,"author":{"gitId":"D-Limiter"},"content":" + command + \" cannot be empty.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":98,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":99,"author":{"gitId":"D-Limiter"},"content":" return reText;","lastModifiedDate":"2023-09-02"},{"lineNumber":100,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":101,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"D-Limiter"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"D-Limiter"},"content":" * Extracts the end timing of the deadline.","lastModifiedDate":"2023-09-02"},{"lineNumber":104,"author":{"gitId":"D-Limiter"},"content":" * @param text The input prompt","lastModifiedDate":"2023-09-02"},{"lineNumber":105,"author":{"gitId":"D-Limiter"},"content":" * @return An array containing the command content and end timing of","lastModifiedDate":"2023-09-02"},{"lineNumber":106,"author":{"gitId":"D-Limiter"},"content":" * the Deadline.","lastModifiedDate":"2023-09-02"},{"lineNumber":107,"author":{"gitId":"D-Limiter"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":108,"author":{"gitId":"D-Limiter"},"content":" public String[] extractDeadline(String text) {","lastModifiedDate":"2023-09-02"},{"lineNumber":109,"author":{"gitId":"D-Limiter"},"content":" String wrd \u003d \"\";","lastModifiedDate":"2023-09-02"},{"lineNumber":110,"author":{"gitId":"D-Limiter"},"content":" String str \u003d \"\";","lastModifiedDate":"2023-09-02"},{"lineNumber":111,"author":{"gitId":"D-Limiter"},"content":" int i;","lastModifiedDate":"2023-09-02"},{"lineNumber":112,"author":{"gitId":"D-Limiter"},"content":" for (i \u003d 0; i \u003c text.length(); i++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":113,"author":{"gitId":"D-Limiter"},"content":" char ch \u003d text.charAt(i);","lastModifiedDate":"2023-09-02"},{"lineNumber":114,"author":{"gitId":"D-Limiter"},"content":" if (ch \u003d\u003d \u0027 \u0027) {","lastModifiedDate":"2023-09-02"},{"lineNumber":115,"author":{"gitId":"D-Limiter"},"content":" if (wrd.equals(\"/by\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":116,"author":{"gitId":"D-Limiter"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":117,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":118,"author":{"gitId":"D-Limiter"},"content":" str +\u003d wrd + \" \";","lastModifiedDate":"2023-09-02"},{"lineNumber":119,"author":{"gitId":"D-Limiter"},"content":" wrd \u003d \"\";","lastModifiedDate":"2023-09-02"},{"lineNumber":120,"author":{"gitId":"D-Limiter"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":121,"author":{"gitId":"D-Limiter"},"content":" wrd +\u003d ch;","lastModifiedDate":"2023-09-02"},{"lineNumber":122,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":123,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":124,"author":{"gitId":"D-Limiter"},"content":" String deadArray[] \u003d new String[2];","lastModifiedDate":"2023-09-02"},{"lineNumber":125,"author":{"gitId":"D-Limiter"},"content":" deadArray[0] \u003d str.trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":126,"author":{"gitId":"D-Limiter"},"content":" deadArray[1] \u003d text.substring(i + 1);","lastModifiedDate":"2023-09-02"},{"lineNumber":127,"author":{"gitId":"D-Limiter"},"content":" return deadArray;","lastModifiedDate":"2023-09-02"},{"lineNumber":128,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":129,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":130,"author":{"gitId":"D-Limiter"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":131,"author":{"gitId":"D-Limiter"},"content":" * Method to extract the start and end timings of a deadline","lastModifiedDate":"2023-09-02"},{"lineNumber":132,"author":{"gitId":"D-Limiter"},"content":" * @param text The input text","lastModifiedDate":"2023-09-02"},{"lineNumber":133,"author":{"gitId":"D-Limiter"},"content":" * @return Returns and array containing the command content,","lastModifiedDate":"2023-09-02"},{"lineNumber":134,"author":{"gitId":"D-Limiter"},"content":" * the start and the end times","lastModifiedDate":"2023-09-02"},{"lineNumber":135,"author":{"gitId":"D-Limiter"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":136,"author":{"gitId":"D-Limiter"},"content":" public String[] extractEvent(String text) {","lastModifiedDate":"2023-09-02"},{"lineNumber":137,"author":{"gitId":"D-Limiter"},"content":" String str[] \u003d new String[3];","lastModifiedDate":"2023-09-02"},{"lineNumber":138,"author":{"gitId":"D-Limiter"},"content":" str[0] \u003d \"\";","lastModifiedDate":"2023-09-02"},{"lineNumber":139,"author":{"gitId":"D-Limiter"},"content":" str[1] \u003d \"\";","lastModifiedDate":"2023-09-02"},{"lineNumber":140,"author":{"gitId":"D-Limiter"},"content":" str[2] \u003d \"\";","lastModifiedDate":"2023-09-02"},{"lineNumber":141,"author":{"gitId":"D-Limiter"},"content":" String wrd \u003d \"\";","lastModifiedDate":"2023-09-02"},{"lineNumber":142,"author":{"gitId":"D-Limiter"},"content":" text \u003d text + \" \";","lastModifiedDate":"2023-09-02"},{"lineNumber":143,"author":{"gitId":"D-Limiter"},"content":" boolean fromFlag \u003d false;","lastModifiedDate":"2023-09-02"},{"lineNumber":144,"author":{"gitId":"D-Limiter"},"content":" boolean toFlag \u003d false;","lastModifiedDate":"2023-09-02"},{"lineNumber":145,"author":{"gitId":"D-Limiter"},"content":" for (int i \u003d 0; i \u003c text.length(); i++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":146,"author":{"gitId":"D-Limiter"},"content":" char ch \u003d text.charAt(i);","lastModifiedDate":"2023-09-02"},{"lineNumber":147,"author":{"gitId":"D-Limiter"},"content":" if (ch \u003d\u003d \u0027 \u0027) {","lastModifiedDate":"2023-09-02"},{"lineNumber":148,"author":{"gitId":"D-Limiter"},"content":" if (wrd.equals(\"/from\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":149,"author":{"gitId":"D-Limiter"},"content":" fromFlag \u003d true;","lastModifiedDate":"2023-09-02"},{"lineNumber":150,"author":{"gitId":"D-Limiter"},"content":" } else if (wrd.equals(\"/to\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":151,"author":{"gitId":"D-Limiter"},"content":" toFlag \u003d true;","lastModifiedDate":"2023-09-02"},{"lineNumber":152,"author":{"gitId":"D-Limiter"},"content":" fromFlag \u003d false;","lastModifiedDate":"2023-09-02"},{"lineNumber":153,"author":{"gitId":"D-Limiter"},"content":" } else if (fromFlag) {","lastModifiedDate":"2023-09-02"},{"lineNumber":154,"author":{"gitId":"D-Limiter"},"content":" str[0] +\u003d wrd + \" \";","lastModifiedDate":"2023-09-02"},{"lineNumber":155,"author":{"gitId":"D-Limiter"},"content":" } else if (toFlag) {","lastModifiedDate":"2023-09-02"},{"lineNumber":156,"author":{"gitId":"D-Limiter"},"content":" str[1] +\u003d wrd + \" \";","lastModifiedDate":"2023-09-02"},{"lineNumber":157,"author":{"gitId":"D-Limiter"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":158,"author":{"gitId":"D-Limiter"},"content":" str[2] +\u003d wrd + \" \";","lastModifiedDate":"2023-09-02"},{"lineNumber":159,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":160,"author":{"gitId":"D-Limiter"},"content":" wrd \u003d \"\";","lastModifiedDate":"2023-09-02"},{"lineNumber":161,"author":{"gitId":"D-Limiter"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":162,"author":{"gitId":"D-Limiter"},"content":" wrd +\u003d ch;","lastModifiedDate":"2023-09-02"},{"lineNumber":163,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":164,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":165,"author":{"gitId":"D-Limiter"},"content":" str[2] \u003d str[2].trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":166,"author":{"gitId":"D-Limiter"},"content":" return str;","lastModifiedDate":"2023-09-02"},{"lineNumber":167,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":168,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":169,"author":{"gitId":"D-Limiter"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"D-Limiter":169}},{"path":"src/main/java/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"D-Limiter"},"content":"import java.io.File;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"D-Limiter"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"D-Limiter"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"D-Limiter"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"D-Limiter"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"D-Limiter"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"D-Limiter"},"content":"public class Storage {","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"D-Limiter"},"content":" private String filePath;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"D-Limiter"},"content":" Storage(String filePath) {","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"D-Limiter"},"content":" this.filePath \u003dfilePath;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"D-Limiter"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"D-Limiter"},"content":" printTasks();","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"D-Limiter"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"D-Limiter"},"content":" System.out.println(\"Error loading file\");","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"D-Limiter"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"D-Limiter"},"content":" * Prints the contents of the file stored at filePath","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"D-Limiter"},"content":" * @throws FileNotFoundException It is thrown in a situation where the file","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"D-Limiter"},"content":" * does not exist at the given filePath","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"D-Limiter"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"D-Limiter"},"content":" public void printTasks() throws FileNotFoundException {","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"D-Limiter"},"content":" File f \u003d new File(filePath);","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"D-Limiter"},"content":" Scanner s \u003d new Scanner(f);","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"D-Limiter"},"content":" while (s.hasNext()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"D-Limiter"},"content":" System.out.println(s.nextLine());","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"D-Limiter"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"D-Limiter"},"content":" * Writes any changes in the tasks to the hard disk","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"D-Limiter"},"content":" * @param filePath Stores the address to the file with the stored tasks","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"D-Limiter"},"content":" * @param tasks The ArrayList containing all the tasks","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"D-Limiter"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"D-Limiter"},"content":" public void writeUp(TaskList t) {","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"D-Limiter"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"D-Limiter"},"content":" FileWriter fw \u003d new FileWriter(filePath);","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"D-Limiter"},"content":" fw.write(t.getTasks());","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"D-Limiter"},"content":" fw.close();","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"D-Limiter"},"content":" this.printTasks();","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"D-Limiter"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"D-Limiter"},"content":" System.out.println(\"An exception occurred: \" + e.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"D-Limiter"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"D-Limiter"},"content":" * Converts the input text into its equivalent ToDo Task","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"D-Limiter"},"content":" * @param text String to be converted to a ToDo task","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"D-Limiter"},"content":" * @return The ToDo task converted from text","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"D-Limiter"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"D-Limiter"},"content":" public ToDo taskToDo(String text) {","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"D-Limiter"},"content":" ToDo t \u003d new ToDo(text.substring(10).trim());","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"D-Limiter"},"content":" if (text.charAt(7) \u003d\u003d \u0027X\u0027) {","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"D-Limiter"},"content":" t.markTask();","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"D-Limiter"},"content":" return t;","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"D-Limiter"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"D-Limiter"},"content":" * Converts the input text into its equivalent Event Task","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"D-Limiter"},"content":" * @param text String to be converted to Event Task","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"D-Limiter"},"content":" * @return The Event task converted from text","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"D-Limiter"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"D-Limiter"},"content":" public Event taskEvent(String text) {","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"D-Limiter"},"content":" boolean isMarked \u003d text.charAt(7) \u003d\u003d \u0027X\u0027;","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"D-Limiter"},"content":" String[] parts \u003d text.split(\"[()]\");","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"D-Limiter"},"content":" String taskDescription \u003d parts[0].trim().substring(10);","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"D-Limiter"},"content":" String timeInfo \u003d parts[1].trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"D-Limiter"},"content":" String[] timeParts \u003d timeInfo.split(\"from:|to:\");","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"D-Limiter"},"content":" String startTime \u003d timeParts[1].trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"D-Limiter"},"content":" String endTime \u003d timeParts[2].trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"D-Limiter"},"content":" String[] extractedValues \u003d { taskDescription, startTime, endTime };","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"D-Limiter"},"content":" Event e \u003d new Event(extractedValues[0], extractedValues[1], extractedValues[2]);","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"D-Limiter"},"content":" if (isMarked) {","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"D-Limiter"},"content":" e.markTask();","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"D-Limiter"},"content":" return e;","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"D-Limiter"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"D-Limiter"},"content":" * Converts the input text into its equivalent Deadline Task","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"D-Limiter"},"content":" * @param text The String to be converted to a Deadline Task","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"D-Limiter"},"content":" * @return The Deadline Task from the converted String","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"D-Limiter"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"D-Limiter"},"content":" public Deadline taskDeadline(String text) {","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"D-Limiter"},"content":" boolean isMarked \u003d text.charAt(7) \u003d\u003d \u0027X\u0027;","lastModifiedDate":"2023-09-02"},{"lineNumber":89,"author":{"gitId":"D-Limiter"},"content":" text \u003d text.substring(10);","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"D-Limiter"},"content":" String wrd \u003d \"\";","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"D-Limiter"},"content":" String str \u003d \"\";","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"D-Limiter"},"content":" int i;","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"D-Limiter"},"content":" for (i \u003d 0; i \u003c text.length(); i++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"D-Limiter"},"content":" char ch \u003d text.charAt(i);","lastModifiedDate":"2023-09-02"},{"lineNumber":95,"author":{"gitId":"D-Limiter"},"content":" if (ch \u003d\u003d \u0027 \u0027) {","lastModifiedDate":"2023-09-02"},{"lineNumber":96,"author":{"gitId":"D-Limiter"},"content":" if (wrd.equals(\"(by:\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":97,"author":{"gitId":"D-Limiter"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":98,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":99,"author":{"gitId":"D-Limiter"},"content":" str +\u003d wrd + \" \";","lastModifiedDate":"2023-09-02"},{"lineNumber":100,"author":{"gitId":"D-Limiter"},"content":" wrd \u003d \"\";","lastModifiedDate":"2023-09-02"},{"lineNumber":101,"author":{"gitId":"D-Limiter"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"D-Limiter"},"content":" wrd +\u003d ch;","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":104,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":105,"author":{"gitId":"D-Limiter"},"content":" String deadArray[] \u003d new String[2];","lastModifiedDate":"2023-09-02"},{"lineNumber":106,"author":{"gitId":"D-Limiter"},"content":" deadArray[0] \u003d str.trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":107,"author":{"gitId":"D-Limiter"},"content":" deadArray[1] \u003d text.substring(i + 1, text.length() - 1);","lastModifiedDate":"2023-09-02"},{"lineNumber":108,"author":{"gitId":"D-Limiter"},"content":" Deadline d \u003d new Deadline(deadArray[0], deadArray[1]);","lastModifiedDate":"2023-09-02"},{"lineNumber":109,"author":{"gitId":"D-Limiter"},"content":" if (isMarked) {","lastModifiedDate":"2023-09-02"},{"lineNumber":110,"author":{"gitId":"D-Limiter"},"content":" d.markTask();","lastModifiedDate":"2023-09-02"},{"lineNumber":111,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":112,"author":{"gitId":"D-Limiter"},"content":" return d;","lastModifiedDate":"2023-09-02"},{"lineNumber":113,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":114,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":115,"author":{"gitId":"D-Limiter"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":116,"author":{"gitId":"D-Limiter"},"content":" * This method reads a file and converts its text into an ArrayList of Task objects","lastModifiedDate":"2023-09-02"},{"lineNumber":117,"author":{"gitId":"D-Limiter"},"content":" * @param filePath The path to the destination where the Tasks are stored","lastModifiedDate":"2023-09-02"},{"lineNumber":118,"author":{"gitId":"D-Limiter"},"content":" * @return ArrayList of Tasks","lastModifiedDate":"2023-09-02"},{"lineNumber":119,"author":{"gitId":"D-Limiter"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":120,"author":{"gitId":"D-Limiter"},"content":" public ArrayList\u003cTask\u003e load() {","lastModifiedDate":"2023-09-02"},{"lineNumber":121,"author":{"gitId":"D-Limiter"},"content":" ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-02"},{"lineNumber":122,"author":{"gitId":"D-Limiter"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":123,"author":{"gitId":"D-Limiter"},"content":" File f \u003d new File(filePath);","lastModifiedDate":"2023-09-02"},{"lineNumber":124,"author":{"gitId":"D-Limiter"},"content":" Scanner s \u003d new Scanner(f);","lastModifiedDate":"2023-09-02"},{"lineNumber":125,"author":{"gitId":"D-Limiter"},"content":" while (s.hasNext()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":126,"author":{"gitId":"D-Limiter"},"content":" String prompt \u003d s.nextLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":127,"author":{"gitId":"D-Limiter"},"content":" char ch \u003d prompt.charAt(4);","lastModifiedDate":"2023-09-02"},{"lineNumber":128,"author":{"gitId":"D-Limiter"},"content":" if (ch \u003d\u003d \u0027T\u0027) {","lastModifiedDate":"2023-09-02"},{"lineNumber":129,"author":{"gitId":"D-Limiter"},"content":" tasks.add(taskToDo(prompt));","lastModifiedDate":"2023-09-02"},{"lineNumber":130,"author":{"gitId":"D-Limiter"},"content":" } else if (ch \u003d\u003d \u0027E\u0027) {","lastModifiedDate":"2023-09-02"},{"lineNumber":131,"author":{"gitId":"D-Limiter"},"content":" tasks.add(taskEvent(prompt));","lastModifiedDate":"2023-09-02"},{"lineNumber":132,"author":{"gitId":"D-Limiter"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":133,"author":{"gitId":"D-Limiter"},"content":" tasks.add(taskDeadline(prompt));","lastModifiedDate":"2023-09-02"},{"lineNumber":134,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":135,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":136,"author":{"gitId":"D-Limiter"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":137,"author":{"gitId":"D-Limiter"},"content":" System.out.println(\"Error! Could not find file!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":138,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":139,"author":{"gitId":"D-Limiter"},"content":" return tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":140,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":141,"author":{"gitId":"D-Limiter"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"D-Limiter":141}},{"path":"src/main/java/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"D-Limiter"},"content":"public class Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"D-Limiter"},"content":" private boolean isMarked;","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"D-Limiter"},"content":" private String taskPrompt;","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"D-Limiter"},"content":" Task(String taskPrompt) {","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"D-Limiter"},"content":" this.taskPrompt \u003d taskPrompt;","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"D-Limiter"},"content":" this.isMarked \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"D-Limiter"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"D-Limiter"},"content":" * Used to mark this task done.","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"D-Limiter"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"D-Limiter"},"content":" public void markTask() {","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"D-Limiter"},"content":" this.isMarked \u003d true;","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"D-Limiter"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"D-Limiter"},"content":" * Used to mark this task undone.","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"D-Limiter"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"D-Limiter"},"content":" public void unmarkTask() {","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"D-Limiter"},"content":" this.isMarked \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"D-Limiter"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"D-Limiter"},"content":" * Used to evaluate String form of a Task","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"D-Limiter"},"content":" * @return String form of a Task","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"D-Limiter"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"D-Limiter"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"D-Limiter"},"content":" String marked \u003d \"\";","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"D-Limiter"},"content":" if(this.isMarked) {","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"D-Limiter"},"content":" marked \u003d \"X\";","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"D-Limiter"},"content":" } else {","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"D-Limiter"},"content":" marked \u003d \" \";","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"D-Limiter"},"content":" return \"[\" + marked + \"] \" + this.taskPrompt;","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"D-Limiter"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"D-Limiter":36}},{"path":"src/main/java/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"D-Limiter"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"D-Limiter"},"content":"public class TaskList {","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"D-Limiter"},"content":" private ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"D-Limiter"},"content":" TaskList(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"D-Limiter"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"D-Limiter"},"content":" public int size() {","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"D-Limiter"},"content":" return this.tasks.size();","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"D-Limiter"},"content":" public void markElement(int index) {","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"D-Limiter"},"content":" this.tasks.get(index).markTask();","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"D-Limiter"},"content":" public void unmarkElement(int index) {","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"D-Limiter"},"content":" this.tasks.get(index).unmarkTask();","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"D-Limiter"},"content":" public Task elementAt(int index) {","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"D-Limiter"},"content":" return this.tasks.get(index);","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"D-Limiter"},"content":" public void delete(int index) {","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"D-Limiter"},"content":" this.tasks.remove(index);","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"D-Limiter"},"content":" public void add(Task t) {","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"D-Limiter"},"content":" this.tasks.add(t);","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"D-Limiter"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"D-Limiter"},"content":" * The method evaluates the list of the passed tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"D-Limiter"},"content":" * @param tasks The ArrayList containing all the passed commands","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"D-Limiter"},"content":" * @return String of all the passed tasks","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"D-Limiter"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"D-Limiter"},"content":" public String getTasks() {","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"D-Limiter"},"content":" String listedTasks \u003d \"\";","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"D-Limiter"},"content":" for(int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"D-Limiter"},"content":" listedTasks +\u003d (i + 1) + \". \" + tasks.get(i).toString() + \"\\n\";","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"D-Limiter"},"content":" return listedTasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"D-Limiter"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"D-Limiter":44}},{"path":"src/main/java/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"D-Limiter"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"D-Limiter"},"content":" public ToDo(String description) {","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"D-Limiter"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"D-Limiter"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"D-Limiter"},"content":" * Used to evaluate String form of a ToDo task","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"D-Limiter"},"content":" * @return String form of a ToDo Task","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"D-Limiter"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"D-Limiter"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"D-Limiter"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"D-Limiter"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"D-Limiter"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"D-Limiter":16}},{"path":"src/main/java/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"D-Limiter"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"D-Limiter"},"content":"public class Ui {","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"D-Limiter"},"content":" public void showWelcome() {","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"D-Limiter"},"content":" String line \u003d \"____________________________________________________________\\n\";","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"D-Limiter"},"content":" System.out.println(line + \" Hello! I\u0027m Alcazar\\n\" +","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"D-Limiter"},"content":" \" What can I do for you?\\n\" +","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"D-Limiter"},"content":" line);","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"D-Limiter"},"content":" public String readCommand() {","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"D-Limiter"},"content":" Scanner sc \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"D-Limiter"},"content":" String st \u003d sc.nextLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"D-Limiter"},"content":" return st;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"D-Limiter"},"content":" public void showLine() {","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"D-Limiter"},"content":" System.out.println(\"____________________________________________________________\\n\");","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"D-Limiter"},"content":" public void showError(String msg) {","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"D-Limiter"},"content":" System.out.println(msg);","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"D-Limiter"},"content":" public void showLoadingError() {","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"D-Limiter"},"content":" System.out.println(\"Error loading data from the file\");","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"D-Limiter"},"content":" public void showExitMsg() {","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"D-Limiter"},"content":" this.showLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"D-Limiter"},"content":" System.out.println(","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"D-Limiter"},"content":" \" Bye. Hope to see you again soon!\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"D-Limiter"},"content":" );","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"D-Limiter"},"content":" this.showLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"D-Limiter"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"D-Limiter":31}},{"path":"src/main/java/alcazar/Alcazar.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"D-Limiter"},"content":"package alcazar;","lastModifiedDate":"2023-09-10"},{"lineNumber":2,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"D-Limiter"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"D-Limiter"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"D-Limiter"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"D-Limiter"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"D-Limiter"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"D-Limiter"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"D-Limiter"},"content":"/**","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"D-Limiter"},"content":" * The class with the main method where all the functionality begins.","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"D-Limiter"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"D-Limiter"},"content":"public class Alcazar {","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"D-Limiter"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"D-Limiter"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"D-Limiter"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"D-Limiter"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"D-Limiter"},"content":" private Scene scene;","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"D-Limiter"},"content":" private Storage storage;","lastModifiedDate":"2023-09-10"},{"lineNumber":21,"author":{"gitId":"D-Limiter"},"content":" private TaskList tasks;","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"D-Limiter"},"content":" private Ui ui;","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"D-Limiter"},"content":" private Parser parser;","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"D-Limiter"},"content":" private Image user \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaUser.png\"));","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"D-Limiter"},"content":" private Image duke \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaDuke.png\"));","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":27,"author":{"gitId":"D-Limiter"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"D-Limiter"},"content":" * Iteration 2:","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"D-Limiter"},"content":" * Creates two dialog boxes, one echoing user input and the other containing Duke\u0027s reply and then appends them to","lastModifiedDate":"2023-09-10"},{"lineNumber":30,"author":{"gitId":"D-Limiter"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"D-Limiter"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"D-Limiter"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-10"},{"lineNumber":33,"author":{"gitId":"D-Limiter"},"content":" String userText \u003d userInput.getText();","lastModifiedDate":"2023-09-10"},{"lineNumber":34,"author":{"gitId":"D-Limiter"},"content":" String dukeText \u003d getResponse(userInput.getText());","lastModifiedDate":"2023-09-10"},{"lineNumber":35,"author":{"gitId":"D-Limiter"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-10"},{"lineNumber":36,"author":{"gitId":"D-Limiter"},"content":" DialogBox.getUserDialog(userText, user),","lastModifiedDate":"2023-09-10"},{"lineNumber":37,"author":{"gitId":"D-Limiter"},"content":" DialogBox.getDukeDialog(dukeText, duke)","lastModifiedDate":"2023-09-10"},{"lineNumber":38,"author":{"gitId":"D-Limiter"},"content":" );","lastModifiedDate":"2023-09-10"},{"lineNumber":39,"author":{"gitId":"D-Limiter"},"content":" userInput.clear();","lastModifiedDate":"2023-09-10"},{"lineNumber":40,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":41,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":42,"author":{"gitId":"D-Limiter"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":43,"author":{"gitId":"D-Limiter"},"content":" * You should have your own function to generate a response to user input.","lastModifiedDate":"2023-09-10"},{"lineNumber":44,"author":{"gitId":"D-Limiter"},"content":" * Replace this stub with your completed method.","lastModifiedDate":"2023-09-10"},{"lineNumber":45,"author":{"gitId":"D-Limiter"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":46,"author":{"gitId":"D-Limiter"},"content":" public String getResponse(String input) {","lastModifiedDate":"2023-09-10"},{"lineNumber":47,"author":{"gitId":"D-Limiter"},"content":" String filePath \u003d \"./src/main/java/data/tasks.txt\";","lastModifiedDate":"2023-09-10"},{"lineNumber":48,"author":{"gitId":"D-Limiter"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-09-10"},{"lineNumber":49,"author":{"gitId":"D-Limiter"},"content":" storage \u003d new Storage(filePath);","lastModifiedDate":"2023-09-10"},{"lineNumber":50,"author":{"gitId":"D-Limiter"},"content":" tasks \u003d new TaskList(storage.load());","lastModifiedDate":"2023-09-10"},{"lineNumber":51,"author":{"gitId":"D-Limiter"},"content":" Parser p \u003d new Parser();","lastModifiedDate":"2023-09-10"},{"lineNumber":52,"author":{"gitId":"D-Limiter"},"content":" String parseResult \u003d \"\";","lastModifiedDate":"2023-09-10"},{"lineNumber":53,"author":{"gitId":"D-Limiter"},"content":" try {","lastModifiedDate":"2023-09-10"},{"lineNumber":54,"author":{"gitId":"D-Limiter"},"content":" parseResult \u003d p.parse(input, tasks, ui, storage);","lastModifiedDate":"2023-09-10"},{"lineNumber":55,"author":{"gitId":"D-Limiter"},"content":" } catch (InvalidTaskException e) {","lastModifiedDate":"2023-09-10"},{"lineNumber":56,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":57,"author":{"gitId":"D-Limiter"},"content":" return e.getMessage();","lastModifiedDate":"2023-09-10"},{"lineNumber":58,"author":{"gitId":"D-Limiter"},"content":" } catch (InvalidArgumentException e) {","lastModifiedDate":"2023-09-10"},{"lineNumber":59,"author":{"gitId":"D-Limiter"},"content":" return e.getMessage();","lastModifiedDate":"2023-09-10"},{"lineNumber":60,"author":{"gitId":"D-Limiter"},"content":" } catch (InvalidSerialException e) {","lastModifiedDate":"2023-09-10"},{"lineNumber":61,"author":{"gitId":"D-Limiter"},"content":" ui.showLine();","lastModifiedDate":"2023-09-10"},{"lineNumber":62,"author":{"gitId":"D-Limiter"},"content":" return","lastModifiedDate":"2023-09-10"},{"lineNumber":63,"author":{"gitId":"D-Limiter"},"content":" e.getMessage();","lastModifiedDate":"2023-09-10"},{"lineNumber":64,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":65,"author":{"gitId":"D-Limiter"},"content":" return \"\" + parseResult;","lastModifiedDate":"2023-09-10"},{"lineNumber":66,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":67,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":68,"author":{"gitId":"D-Limiter"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":69,"author":{"gitId":"D-Limiter"},"content":" * Method to run all the functionality to drive this project.","lastModifiedDate":"2023-09-10"},{"lineNumber":70,"author":{"gitId":"D-Limiter"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":71,"author":{"gitId":"D-Limiter"},"content":" public void run() {","lastModifiedDate":"2023-09-10"},{"lineNumber":72,"author":{"gitId":"D-Limiter"},"content":" ui.showWelcome();","lastModifiedDate":"2023-09-10"},{"lineNumber":73,"author":{"gitId":"D-Limiter"},"content":" boolean isExit \u003d false;","lastModifiedDate":"2023-09-10"},{"lineNumber":74,"author":{"gitId":"D-Limiter"},"content":" Parser p \u003d new Parser();","lastModifiedDate":"2023-09-10"},{"lineNumber":75,"author":{"gitId":"D-Limiter"},"content":" while (!isExit) {","lastModifiedDate":"2023-09-10"},{"lineNumber":76,"author":{"gitId":"D-Limiter"},"content":" try {","lastModifiedDate":"2023-09-10"},{"lineNumber":77,"author":{"gitId":"D-Limiter"},"content":" String fullCommand \u003d ui.readCommand();","lastModifiedDate":"2023-09-10"},{"lineNumber":78,"author":{"gitId":"D-Limiter"},"content":" isExit \u003d p.isExit(fullCommand);","lastModifiedDate":"2023-09-10"},{"lineNumber":79,"author":{"gitId":"D-Limiter"},"content":" if (isExit) {","lastModifiedDate":"2023-09-10"},{"lineNumber":80,"author":{"gitId":"D-Limiter"},"content":" continue;","lastModifiedDate":"2023-09-10"},{"lineNumber":81,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":82,"author":{"gitId":"D-Limiter"},"content":" ui.showLine(); // show the divider line (\"_______\")","lastModifiedDate":"2023-09-10"},{"lineNumber":83,"author":{"gitId":"D-Limiter"},"content":" p.parse(fullCommand, tasks, ui, storage);","lastModifiedDate":"2023-09-10"},{"lineNumber":84,"author":{"gitId":"D-Limiter"},"content":" } catch (InvalidTaskException e) {","lastModifiedDate":"2023-09-10"},{"lineNumber":85,"author":{"gitId":"D-Limiter"},"content":" ui.showLine();","lastModifiedDate":"2023-09-10"},{"lineNumber":86,"author":{"gitId":"D-Limiter"},"content":" System.out.println(","lastModifiedDate":"2023-09-10"},{"lineNumber":87,"author":{"gitId":"D-Limiter"},"content":" e.getMessage() + \"\\n\"","lastModifiedDate":"2023-09-10"},{"lineNumber":88,"author":{"gitId":"D-Limiter"},"content":" );","lastModifiedDate":"2023-09-10"},{"lineNumber":89,"author":{"gitId":"D-Limiter"},"content":" } catch (InvalidArgumentException e) {","lastModifiedDate":"2023-09-10"},{"lineNumber":90,"author":{"gitId":"D-Limiter"},"content":" ui.showLine();","lastModifiedDate":"2023-09-10"},{"lineNumber":91,"author":{"gitId":"D-Limiter"},"content":" System.out.println(","lastModifiedDate":"2023-09-10"},{"lineNumber":92,"author":{"gitId":"D-Limiter"},"content":" e.getMessage() + \"\\n\"","lastModifiedDate":"2023-09-10"},{"lineNumber":93,"author":{"gitId":"D-Limiter"},"content":" );","lastModifiedDate":"2023-09-10"},{"lineNumber":94,"author":{"gitId":"D-Limiter"},"content":" } catch (InvalidSerialException e) {","lastModifiedDate":"2023-09-10"},{"lineNumber":95,"author":{"gitId":"D-Limiter"},"content":" ui.showLine();","lastModifiedDate":"2023-09-10"},{"lineNumber":96,"author":{"gitId":"D-Limiter"},"content":" System.out.println(","lastModifiedDate":"2023-09-10"},{"lineNumber":97,"author":{"gitId":"D-Limiter"},"content":" e.getMessage() + \"\\n\"","lastModifiedDate":"2023-09-10"},{"lineNumber":98,"author":{"gitId":"D-Limiter"},"content":" );","lastModifiedDate":"2023-09-10"},{"lineNumber":99,"author":{"gitId":"D-Limiter"},"content":" } finally {","lastModifiedDate":"2023-09-10"},{"lineNumber":100,"author":{"gitId":"D-Limiter"},"content":" ui.showLine();","lastModifiedDate":"2023-09-10"},{"lineNumber":101,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":102,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":103,"author":{"gitId":"D-Limiter"},"content":" ui.showExitMsg();","lastModifiedDate":"2023-09-10"},{"lineNumber":104,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":105,"author":{"gitId":"D-Limiter"},"content":"}","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"D-Limiter":105}},{"path":"src/main/java/alcazar/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"D-Limiter"},"content":"package alcazar;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"D-Limiter"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"D-Limiter"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"D-Limiter"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"D-Limiter"},"content":" private String by;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"D-Limiter"},"content":" private String d1;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"D-Limiter"},"content":" int i \u003d 0;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"D-Limiter"},"content":" public Deadline(String description, String by) {","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"D-Limiter"},"content":" super(description);","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"D-Limiter"},"content":" this.by \u003d by.trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"D-Limiter"},"content":" String date \u003d \"\";","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"D-Limiter"},"content":" for (i \u003d 0; i \u003c by.length(); i++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"D-Limiter"},"content":" if (by.charAt(i) \u003d\u003d \u0027 \u0027) {","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"D-Limiter"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"D-Limiter"},"content":" date +\u003d by.charAt(i);","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"D-Limiter"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"D-Limiter"},"content":" DateTimeFormatter df \u003d DateTimeFormatter.ofPattern(\"MMM d yyyy\");","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"D-Limiter"},"content":" LocalDate d \u003d LocalDate.parse(date);","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"D-Limiter"},"content":" d1 \u003d d.format(df);","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"D-Limiter"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"D-Limiter"},"content":" /* Catch error*/","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"D-Limiter"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"D-Limiter"},"content":" * Used to evaluate String form of a Deadline","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"D-Limiter"},"content":" * @return String form of a Deadline","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"D-Limiter"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"D-Limiter"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"D-Limiter"},"content":" public String toString() {","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"D-Limiter"},"content":" String s \u003d \"\";","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"D-Limiter"},"content":" by \u003d by.trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"D-Limiter"},"content":" s \u003d \"[D]\" + super.toString() + \" (by: \" + d1 + \" \" + by.substring(i) + \")\";","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"D-Limiter"},"content":" return s;","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"D-Limiter"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"D-Limiter":43}},{"path":"src/main/java/alcazar/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"D-Limiter"},"content":"package alcazar;","lastModifiedDate":"2023-09-10"},{"lineNumber":2,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"D-Limiter"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"D-Limiter"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"D-Limiter"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"D-Limiter"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"D-Limiter"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"D-Limiter"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"D-Limiter"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"D-Limiter"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"D-Limiter"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"D-Limiter"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"D-Limiter"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"D-Limiter"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"D-Limiter"},"content":"/**","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"D-Limiter"},"content":" * An example of a custom control using FXML.","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"D-Limiter"},"content":" * This control represents a dialog box consisting of an ImageView to represent the speaker\u0027s face and a label","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"D-Limiter"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-10"},{"lineNumber":21,"author":{"gitId":"D-Limiter"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"D-Limiter"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"D-Limiter"},"content":" @FXML","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"D-Limiter"},"content":" private Label dialog;","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"D-Limiter"},"content":" @FXML","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"D-Limiter"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-10"},{"lineNumber":27,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"D-Limiter"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"D-Limiter"},"content":" try {","lastModifiedDate":"2023-09-10"},{"lineNumber":30,"author":{"gitId":"D-Limiter"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"D-Limiter"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"D-Limiter"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-10"},{"lineNumber":33,"author":{"gitId":"D-Limiter"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-10"},{"lineNumber":34,"author":{"gitId":"D-Limiter"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-10"},{"lineNumber":35,"author":{"gitId":"D-Limiter"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-10"},{"lineNumber":36,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":37,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":38,"author":{"gitId":"D-Limiter"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-10"},{"lineNumber":39,"author":{"gitId":"D-Limiter"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-10"},{"lineNumber":40,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":41,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":42,"author":{"gitId":"D-Limiter"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":43,"author":{"gitId":"D-Limiter"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-10"},{"lineNumber":44,"author":{"gitId":"D-Limiter"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":45,"author":{"gitId":"D-Limiter"},"content":" private void flip() {","lastModifiedDate":"2023-09-10"},{"lineNumber":46,"author":{"gitId":"D-Limiter"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-10"},{"lineNumber":47,"author":{"gitId":"D-Limiter"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-10"},{"lineNumber":48,"author":{"gitId":"D-Limiter"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-10"},{"lineNumber":49,"author":{"gitId":"D-Limiter"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-10"},{"lineNumber":50,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":51,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":52,"author":{"gitId":"D-Limiter"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-10"},{"lineNumber":53,"author":{"gitId":"D-Limiter"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-10"},{"lineNumber":54,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":55,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":56,"author":{"gitId":"D-Limiter"},"content":" public static DialogBox getDukeDialog(String text, Image img) {","lastModifiedDate":"2023-09-10"},{"lineNumber":57,"author":{"gitId":"D-Limiter"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-10"},{"lineNumber":58,"author":{"gitId":"D-Limiter"},"content":" db.flip();","lastModifiedDate":"2023-09-10"},{"lineNumber":59,"author":{"gitId":"D-Limiter"},"content":" return db;","lastModifiedDate":"2023-09-10"},{"lineNumber":60,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":61,"author":{"gitId":"D-Limiter"},"content":"}","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"D-Limiter":61}},{"path":"src/main/java/alcazar/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"D-Limiter"},"content":"package alcazar;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"D-Limiter"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"D-Limiter"},"content":" * The class with the main method where all the functionality begins.","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"D-Limiter"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"D-Limiter"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"D-Limiter"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"D-Limiter"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"D-Limiter"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"D-Limiter"},"content":"public class Duke extends Application {","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"D-Limiter"},"content":" private Storage storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"D-Limiter"},"content":" private TaskList tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"D-Limiter"},"content":" private Ui ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"D-Limiter"},"content":" private Parser parser;","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"D-Limiter"},"content":" public Duke(String filePath) {","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"D-Limiter"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"D-Limiter"},"content":" storage \u003d new Storage(filePath);","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"D-Limiter"},"content":" tasks \u003d new TaskList(storage.load());","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"D-Limiter"},"content":" @Override","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"D-Limiter"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-10"},{"lineNumber":27,"author":{"gitId":"D-Limiter"},"content":" Label helloWorld \u003d new Label(\"Hello World!\"); // Creating a new Label control","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"D-Limiter"},"content":" Scene scene \u003d new Scene(helloWorld); // Setting the scene to be our Label","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":30,"author":{"gitId":"D-Limiter"},"content":" stage.setScene(scene); // Setting the stage to show our screen","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"D-Limiter"},"content":" stage.show(); // Render the stage.","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":33,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":34,"author":{"gitId":"D-Limiter"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"D-Limiter"},"content":" * Method to run all the functionality to drive this project.","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"D-Limiter"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"D-Limiter"},"content":" public void run() {","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"D-Limiter"},"content":" ui.showWelcome();","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"D-Limiter"},"content":" boolean isExit \u003d false;","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"D-Limiter"},"content":" Parser p \u003d new Parser();","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"D-Limiter"},"content":" while (!isExit) {","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"D-Limiter"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"D-Limiter"},"content":" String fullCommand \u003d ui.readCommand();","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"D-Limiter"},"content":" isExit \u003d p.isExit(fullCommand);","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"D-Limiter"},"content":" if (isExit) {","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"D-Limiter"},"content":" continue;","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"D-Limiter"},"content":" ui.showLine(); // show the divider line (\"_______\")","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"D-Limiter"},"content":" p.parse(fullCommand, tasks, ui, storage);","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"D-Limiter"},"content":" } catch (InvalidTaskException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"D-Limiter"},"content":" ui.showLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"D-Limiter"},"content":" System.out.println(","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"D-Limiter"},"content":" e.getMessage() + \"\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"D-Limiter"},"content":" );","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"D-Limiter"},"content":" } catch (InvalidArgumentException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"D-Limiter"},"content":" ui.showLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"D-Limiter"},"content":" System.out.println(","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"D-Limiter"},"content":" e.getMessage() + \"\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"D-Limiter"},"content":" );","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"D-Limiter"},"content":" } catch(InvalidSerialException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"D-Limiter"},"content":" ui.showLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"D-Limiter"},"content":" System.out.println(","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"D-Limiter"},"content":" e.getMessage() + \"\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"D-Limiter"},"content":" );","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"D-Limiter"},"content":" } finally {","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"D-Limiter"},"content":" ui.showLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"D-Limiter"},"content":" ui.showExitMsg();","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"D-Limiter"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":73,"author":{"gitId":"D-Limiter"},"content":" * Main Method","lastModifiedDate":"2023-09-10"},{"lineNumber":74,"author":{"gitId":"D-Limiter"},"content":" * @param args The standard args argument to main which","lastModifiedDate":"2023-09-10"},{"lineNumber":75,"author":{"gitId":"D-Limiter"},"content":" * provides more readability to the user","lastModifiedDate":"2023-09-10"},{"lineNumber":76,"author":{"gitId":"D-Limiter"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":77,"author":{"gitId":"D-Limiter"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"D-Limiter"},"content":" Duke chatBot \u003d new Duke(\"./src/main/java/data/tasks.txt\");","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"D-Limiter"},"content":" chatBot.run();","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"D-Limiter"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"D-Limiter":81}},{"path":"src/main/java/alcazar/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"D-Limiter"},"content":"package alcazar;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"D-Limiter"},"content":"/**","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"D-Limiter"},"content":" * Class to define an Event Task","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"D-Limiter"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"D-Limiter"},"content":"public class Event extends Task {","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"D-Limiter"},"content":" protected String from;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"D-Limiter"},"content":" protected String to;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"D-Limiter"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"D-Limiter"},"content":" * Constructor for an Event","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"D-Limiter"},"content":" * @param description The description of an event","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"D-Limiter"},"content":" * @param from Start date/time of Event","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"D-Limiter"},"content":" * @param to End date/time of Event.","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"D-Limiter"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"D-Limiter"},"content":" public Event(String description, String from, String to) {","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"D-Limiter"},"content":" super(description);","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"D-Limiter"},"content":" this.from \u003d from;","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"D-Limiter"},"content":" this.to \u003d to;","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"D-Limiter"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"D-Limiter"},"content":" * Used to evaluate String form of an Event","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"D-Limiter"},"content":" * @return String form of an Event","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"D-Limiter"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"D-Limiter"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"D-Limiter"},"content":" public String toString() {","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"D-Limiter"},"content":" return \"[E]\" + super.toString() + \" (from: \" + from + \" to: \" + to.trim() + \")\";","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"D-Limiter"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"D-Limiter":31}},{"path":"src/main/java/alcazar/InvalidArgumentException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"D-Limiter"},"content":"package alcazar;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"D-Limiter"},"content":"public class InvalidArgumentException extends Exception {","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"D-Limiter"},"content":" InvalidArgumentException(String msg) {","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"D-Limiter"},"content":" super(msg);","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"D-Limiter"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"D-Limiter":6}},{"path":"src/main/java/alcazar/InvalidSerialException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"D-Limiter"},"content":"package alcazar;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"D-Limiter"},"content":"public class InvalidSerialException extends Exception{","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"D-Limiter"},"content":" InvalidSerialException(String msg) {","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"D-Limiter"},"content":" super(msg);","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"D-Limiter"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"D-Limiter":6}},{"path":"src/main/java/alcazar/InvalidTaskException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"D-Limiter"},"content":"package alcazar;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"D-Limiter"},"content":"public class InvalidTaskException extends Exception {","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"D-Limiter"},"content":" InvalidTaskException(String msg) {","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"D-Limiter"},"content":" super(\"☹ OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"D-Limiter"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"D-Limiter":6}},{"path":"src/main/java/alcazar/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"D-Limiter"},"content":"package alcazar;","lastModifiedDate":"2023-09-10"},{"lineNumber":2,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"D-Limiter"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"D-Limiter"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"D-Limiter"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"D-Limiter"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"D-Limiter"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"D-Limiter"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"D-Limiter"},"content":"/**","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"D-Limiter"},"content":" * A GUI for Duke using FXML.","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"D-Limiter"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"D-Limiter"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"D-Limiter"},"content":" private Alcazar alcazar \u003d new Alcazar();","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"D-Limiter"},"content":" @Override","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"D-Limiter"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"D-Limiter"},"content":" try {","lastModifiedDate":"2023-09-10"},{"lineNumber":21,"author":{"gitId":"D-Limiter"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"D-Limiter"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"D-Limiter"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"D-Limiter"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"D-Limiter"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setAlcazar(alcazar);","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"D-Limiter"},"content":" stage.show();","lastModifiedDate":"2023-09-10"},{"lineNumber":27,"author":{"gitId":"D-Limiter"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"D-Limiter"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":30,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"D-Limiter"},"content":"}","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"D-Limiter":32}},{"path":"src/main/java/alcazar/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"D-Limiter"},"content":"package alcazar;","lastModifiedDate":"2023-09-10"},{"lineNumber":2,"author":{"gitId":"D-Limiter"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"D-Limiter"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"D-Limiter"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"D-Limiter"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"D-Limiter"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"D-Limiter"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"D-Limiter"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"D-Limiter"},"content":"/**","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"D-Limiter"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"D-Limiter"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"D-Limiter"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"D-Limiter"},"content":" @FXML","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"D-Limiter"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"D-Limiter"},"content":" @FXML","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"D-Limiter"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"D-Limiter"},"content":" @FXML","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"D-Limiter"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"D-Limiter"},"content":" @FXML","lastModifiedDate":"2023-09-10"},{"lineNumber":21,"author":{"gitId":"D-Limiter"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"D-Limiter"},"content":" private static boolean isExit;","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"D-Limiter"},"content":" private Alcazar alcazar;","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":27,"author":{"gitId":"D-Limiter"},"content":" private Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaUser.png\"));","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"D-Limiter"},"content":" private Image alcazarImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaDuke.png\"));","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":30,"author":{"gitId":"D-Limiter"},"content":" @FXML","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"D-Limiter"},"content":" public void initialize() {","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"D-Limiter"},"content":" MainWindow.isExit \u003d false;","lastModifiedDate":"2023-09-10"},{"lineNumber":33,"author":{"gitId":"D-Limiter"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-10"},{"lineNumber":34,"author":{"gitId":"D-Limiter"},"content":" dialogContainer.getChildren().add(DialogBox.getDukeDialog(","lastModifiedDate":"2023-09-10"},{"lineNumber":35,"author":{"gitId":"D-Limiter"},"content":" \"Hello! I\u0027m Alcazar\\n\" + \" What can I do for you?\", alcazarImage));","lastModifiedDate":"2023-09-10"},{"lineNumber":36,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":37,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":38,"author":{"gitId":"D-Limiter"},"content":" public void setAlcazar(Alcazar a) {","lastModifiedDate":"2023-09-10"},{"lineNumber":39,"author":{"gitId":"D-Limiter"},"content":" alcazar \u003d a;","lastModifiedDate":"2023-09-10"},{"lineNumber":40,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":41,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":42,"author":{"gitId":"D-Limiter"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":43,"author":{"gitId":"D-Limiter"},"content":" * Creates two dialog boxes, one echoing user input and the other containing Duke\u0027s reply and then appends them to","lastModifiedDate":"2023-09-10"},{"lineNumber":44,"author":{"gitId":"D-Limiter"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-10"},{"lineNumber":45,"author":{"gitId":"D-Limiter"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":46,"author":{"gitId":"D-Limiter"},"content":" @FXML","lastModifiedDate":"2023-09-10"},{"lineNumber":47,"author":{"gitId":"D-Limiter"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-10"},{"lineNumber":48,"author":{"gitId":"D-Limiter"},"content":" if (MainWindow.isExit) {","lastModifiedDate":"2023-09-10"},{"lineNumber":49,"author":{"gitId":"D-Limiter"},"content":" System.exit(0);","lastModifiedDate":"2023-09-10"},{"lineNumber":50,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":51,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":52,"author":{"gitId":"D-Limiter"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-10"},{"lineNumber":53,"author":{"gitId":"D-Limiter"},"content":" String response \u003d alcazar.getResponse(input);","lastModifiedDate":"2023-09-10"},{"lineNumber":54,"author":{"gitId":"D-Limiter"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-10"},{"lineNumber":55,"author":{"gitId":"D-Limiter"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-10"},{"lineNumber":56,"author":{"gitId":"D-Limiter"},"content":" DialogBox.getDukeDialog(response, alcazarImage)","lastModifiedDate":"2023-09-10"},{"lineNumber":57,"author":{"gitId":"D-Limiter"},"content":" );","lastModifiedDate":"2023-09-10"},{"lineNumber":58,"author":{"gitId":"D-Limiter"},"content":" if (response.contains(\"Bye.\")) {","lastModifiedDate":"2023-09-10"},{"lineNumber":59,"author":{"gitId":"D-Limiter"},"content":" MainWindow.isExit \u003d true;","lastModifiedDate":"2023-09-10"},{"lineNumber":60,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":61,"author":{"gitId":"D-Limiter"},"content":" userInput.clear();","lastModifiedDate":"2023-09-10"},{"lineNumber":62,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":63,"author":{"gitId":"D-Limiter"},"content":"}","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"D-Limiter":63}},{"path":"src/main/java/alcazar/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"D-Limiter"},"content":"package alcazar;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"D-Limiter"},"content":"/**","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"D-Limiter"},"content":" * Class to parse the input commands","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"D-Limiter"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"D-Limiter"},"content":"public class Parser {","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"D-Limiter"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"D-Limiter"},"content":" * Method to interpret the command input.","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"D-Limiter"},"content":" * @param prompt The input text","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"D-Limiter"},"content":" * @param tasks The TaskList object containing current tasks","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"D-Limiter"},"content":" * @param ui Object to present different UI features","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"D-Limiter"},"content":" * @param storage Storage object containing methods to read and write to files","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"D-Limiter"},"content":" * @throws InvalidArgumentException In the situation when an InvalidArgument is passed","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"D-Limiter"},"content":" * @throws InvalidTaskException In the situation when an unrecognized task was passed","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"D-Limiter"},"content":" * @throws InvalidSerialException In the situation where an invalid serial number is passed","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"D-Limiter"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"D-Limiter"},"content":" public String parse(String prompt, TaskList tasks, Ui ui,","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"D-Limiter"},"content":" Storage storage) throws InvalidArgumentException, InvalidTaskException, InvalidSerialException {","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"D-Limiter"},"content":" if (prompt.equals(\"list\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"D-Limiter"},"content":" //ui.showLine();","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"D-Limiter"},"content":" return \"Here are the tasks in your list:\\n\"","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"D-Limiter"},"content":" + tasks.getTasks();","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"D-Limiter"},"content":" } else if (prompt.contains(\"bye\")) {","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"D-Limiter"},"content":" return \"Bye. Hope to see you again soon!\";","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"D-Limiter"},"content":" } else if (prompt.contains(\"find\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"D-Limiter"},"content":" String search \u003d this.textAfter(prompt);","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"D-Limiter"},"content":" return \"Here are the matching tasks in your list:\\n\" + tasks.printEquals(search);","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":30,"author":{"gitId":"D-Limiter"},"content":" } else if (prompt.contains(\"mark\") || prompt.contains(\"unmark\")","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"D-Limiter"},"content":" || prompt.contains(\"delete\")) {","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"D-Limiter"},"content":" int index \u003d Integer.parseInt(prompt.charAt(prompt.length() - 1) + \"\");","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"D-Limiter"},"content":" if (index \u003e tasks.size()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"D-Limiter"},"content":" throw new InvalidSerialException(\"☹ OOPS!!! I think you have added \"","lastModifiedDate":"2023-09-10"},{"lineNumber":35,"author":{"gitId":"D-Limiter"},"content":" + \"an incorrect serial number greater than \" + (tasks.size()));","lastModifiedDate":"2023-09-10"},{"lineNumber":36,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"D-Limiter"},"content":" if (prompt.contains(\"unmark\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"D-Limiter"},"content":" tasks.unmarkElement(index - 1);","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"D-Limiter"},"content":" storage.writeUp(tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"D-Limiter"},"content":" return \"OK, I\u0027ve marked this task as not done yet:\\n\"","lastModifiedDate":"2023-09-10"},{"lineNumber":42,"author":{"gitId":"D-Limiter"},"content":" + tasks.elementAt(index - 1) + \"\\n\";","lastModifiedDate":"2023-09-10"},{"lineNumber":43,"author":{"gitId":"D-Limiter"},"content":" } else if (prompt.contains(\"delete\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"D-Limiter"},"content":" ui.showLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"D-Limiter"},"content":" Task t \u003d tasks.elementAt(index - 1);","lastModifiedDate":"2023-09-10"},{"lineNumber":46,"author":{"gitId":"D-Limiter"},"content":" tasks.delete(index - 1);","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"D-Limiter"},"content":" storage.writeUp(tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"D-Limiter"},"content":" return \"Noted. I\u0027ve removed this task:\\n\" + \" \"","lastModifiedDate":"2023-09-10"},{"lineNumber":49,"author":{"gitId":"D-Limiter"},"content":" + t + \"\\nNow you have \" + tasks.size() + \" tasks in the list\\n\";","lastModifiedDate":"2023-09-10"},{"lineNumber":50,"author":{"gitId":"D-Limiter"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"D-Limiter"},"content":" tasks.markElement(index - 1);","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"D-Limiter"},"content":" storage.writeUp(tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"D-Limiter"},"content":" ui.showLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"D-Limiter"},"content":" return \"Nice! I\u0027ve marked this task as done:\\n\"","lastModifiedDate":"2023-09-10"},{"lineNumber":55,"author":{"gitId":"D-Limiter"},"content":" + tasks.elementAt(index - 1) + \"\\n\";","lastModifiedDate":"2023-09-10"},{"lineNumber":56,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"D-Limiter"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"D-Limiter"},"content":" if (prompt.contains(\"deadline\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"D-Limiter"},"content":" String[] deadLine \u003d this.extractDeadline(this.textAfter(prompt));","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"D-Limiter"},"content":" tasks.add(new Deadline(deadLine[0], deadLine[1]));","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"D-Limiter"},"content":" storage.writeUp(tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"D-Limiter"},"content":" } else if (prompt.contains(\"event\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"D-Limiter"},"content":" String[] eventData \u003d this.extractEvent(this.textAfter(prompt));","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"D-Limiter"},"content":" tasks.add(new Event(eventData[2], eventData[0], eventData[1]));","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"D-Limiter"},"content":" storage.writeUp(tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"D-Limiter"},"content":" } else if (prompt.contains(\"todo\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"D-Limiter"},"content":" tasks.add(new ToDo(this.textAfter(prompt)));","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"D-Limiter"},"content":" storage.writeUp(tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"D-Limiter"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"D-Limiter"},"content":" throw new InvalidTaskException(","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"D-Limiter"},"content":" \"☹ OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\"","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"D-Limiter"},"content":" );","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"D-Limiter"},"content":" return \"Got it. I\u0027ve added this task:\\n \"","lastModifiedDate":"2023-09-10"},{"lineNumber":75,"author":{"gitId":"D-Limiter"},"content":" + tasks.elementAt(tasks.size() - 1) + \"\\n\"","lastModifiedDate":"2023-09-10"},{"lineNumber":76,"author":{"gitId":"D-Limiter"},"content":" + \"Now you have \" + tasks.size() + \" tasks in the list\\n\";","lastModifiedDate":"2023-09-10"},{"lineNumber":77,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"D-Limiter"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":81,"author":{"gitId":"D-Limiter"},"content":" * To check if the input passed is an exit request.","lastModifiedDate":"2023-09-03"},{"lineNumber":82,"author":{"gitId":"D-Limiter"},"content":" * @param prompt Text input to the class\u0027s functions","lastModifiedDate":"2023-09-03"},{"lineNumber":83,"author":{"gitId":"D-Limiter"},"content":" * @return Returns a boolean","lastModifiedDate":"2023-09-03"},{"lineNumber":84,"author":{"gitId":"D-Limiter"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":85,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":86,"author":{"gitId":"D-Limiter"},"content":" public boolean isExit(String prompt) {","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"D-Limiter"},"content":" return prompt.contains(\"bye\");","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":89,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"D-Limiter"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"D-Limiter"},"content":" * Method to extract the content of the command","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"D-Limiter"},"content":" * @param sent The String that contains the command content after","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"D-Limiter"},"content":" * the specified command.","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"D-Limiter"},"content":" * @return String description of the Task","lastModifiedDate":"2023-09-10"},{"lineNumber":95,"author":{"gitId":"D-Limiter"},"content":" * @throws InvalidArgumentException if there is no content in the command","lastModifiedDate":"2023-09-03"},{"lineNumber":96,"author":{"gitId":"D-Limiter"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":97,"author":{"gitId":"D-Limiter"},"content":" public String textAfter(String sent) throws InvalidArgumentException {","lastModifiedDate":"2023-09-02"},{"lineNumber":98,"author":{"gitId":"D-Limiter"},"content":" String reText \u003d \"\";","lastModifiedDate":"2023-09-02"},{"lineNumber":99,"author":{"gitId":"D-Limiter"},"content":" String command \u003d \"\";","lastModifiedDate":"2023-09-02"},{"lineNumber":100,"author":{"gitId":"D-Limiter"},"content":" boolean flag \u003d false;","lastModifiedDate":"2023-09-02"},{"lineNumber":101,"author":{"gitId":"D-Limiter"},"content":" for (int i \u003d 0; i \u003c sent.length(); i++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"D-Limiter"},"content":" char ch \u003d sent.charAt(i);","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"D-Limiter"},"content":" if (flag) {","lastModifiedDate":"2023-09-02"},{"lineNumber":104,"author":{"gitId":"D-Limiter"},"content":" reText +\u003d ch;","lastModifiedDate":"2023-09-02"},{"lineNumber":105,"author":{"gitId":"D-Limiter"},"content":" } else if (ch \u003d\u003d \u0027 \u0027) {","lastModifiedDate":"2023-09-02"},{"lineNumber":106,"author":{"gitId":"D-Limiter"},"content":" command +\u003d ch;","lastModifiedDate":"2023-09-02"},{"lineNumber":107,"author":{"gitId":"D-Limiter"},"content":" flag \u003d true;","lastModifiedDate":"2023-09-02"},{"lineNumber":108,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":109,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":110,"author":{"gitId":"D-Limiter"},"content":" if (reText \u003d\u003d \"\") {","lastModifiedDate":"2023-09-02"},{"lineNumber":111,"author":{"gitId":"D-Limiter"},"content":" throw new InvalidArgumentException(\"☹ OOPS!!! The description of a \"","lastModifiedDate":"2023-09-02"},{"lineNumber":112,"author":{"gitId":"D-Limiter"},"content":" + command + \" cannot be empty.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":113,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":114,"author":{"gitId":"D-Limiter"},"content":" return reText;","lastModifiedDate":"2023-09-02"},{"lineNumber":115,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":116,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":117,"author":{"gitId":"D-Limiter"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":118,"author":{"gitId":"D-Limiter"},"content":" * Extracts the end timing of the deadline.","lastModifiedDate":"2023-09-02"},{"lineNumber":119,"author":{"gitId":"D-Limiter"},"content":" * @param text The input prompt","lastModifiedDate":"2023-09-02"},{"lineNumber":120,"author":{"gitId":"D-Limiter"},"content":" * @return An array containing the command content and end timing of","lastModifiedDate":"2023-09-02"},{"lineNumber":121,"author":{"gitId":"D-Limiter"},"content":" * the Deadline","lastModifiedDate":"2023-09-10"},{"lineNumber":122,"author":{"gitId":"D-Limiter"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":123,"author":{"gitId":"D-Limiter"},"content":" public String[] extractDeadline(String text) {","lastModifiedDate":"2023-09-02"},{"lineNumber":124,"author":{"gitId":"D-Limiter"},"content":" String wrd \u003d \"\";","lastModifiedDate":"2023-09-02"},{"lineNumber":125,"author":{"gitId":"D-Limiter"},"content":" String str \u003d \"\";","lastModifiedDate":"2023-09-02"},{"lineNumber":126,"author":{"gitId":"D-Limiter"},"content":" int i;","lastModifiedDate":"2023-09-02"},{"lineNumber":127,"author":{"gitId":"D-Limiter"},"content":" for (i \u003d 0; i \u003c text.length(); i++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":128,"author":{"gitId":"D-Limiter"},"content":" char ch \u003d text.charAt(i);","lastModifiedDate":"2023-09-02"},{"lineNumber":129,"author":{"gitId":"D-Limiter"},"content":" if (ch \u003d\u003d \u0027 \u0027) {","lastModifiedDate":"2023-09-02"},{"lineNumber":130,"author":{"gitId":"D-Limiter"},"content":" if (wrd.equals(\"/by\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":131,"author":{"gitId":"D-Limiter"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":132,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":133,"author":{"gitId":"D-Limiter"},"content":" str +\u003d wrd + \" \";","lastModifiedDate":"2023-09-02"},{"lineNumber":134,"author":{"gitId":"D-Limiter"},"content":" wrd \u003d \"\";","lastModifiedDate":"2023-09-02"},{"lineNumber":135,"author":{"gitId":"D-Limiter"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":136,"author":{"gitId":"D-Limiter"},"content":" wrd +\u003d ch;","lastModifiedDate":"2023-09-02"},{"lineNumber":137,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":138,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":139,"author":{"gitId":"D-Limiter"},"content":" String[] deadArray \u003d new String[2];","lastModifiedDate":"2023-09-03"},{"lineNumber":140,"author":{"gitId":"D-Limiter"},"content":" deadArray[0] \u003d str.trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":141,"author":{"gitId":"D-Limiter"},"content":" deadArray[1] \u003d text.substring(i + 1);","lastModifiedDate":"2023-09-02"},{"lineNumber":142,"author":{"gitId":"D-Limiter"},"content":" return deadArray;","lastModifiedDate":"2023-09-02"},{"lineNumber":143,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":144,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":145,"author":{"gitId":"D-Limiter"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":146,"author":{"gitId":"D-Limiter"},"content":" * Method to extract the start and end timings of a deadline","lastModifiedDate":"2023-09-02"},{"lineNumber":147,"author":{"gitId":"D-Limiter"},"content":" * @param text The input text","lastModifiedDate":"2023-09-02"},{"lineNumber":148,"author":{"gitId":"D-Limiter"},"content":" * @return Returns and array containing the command content,","lastModifiedDate":"2023-09-02"},{"lineNumber":149,"author":{"gitId":"D-Limiter"},"content":" * the start and the end times","lastModifiedDate":"2023-09-02"},{"lineNumber":150,"author":{"gitId":"D-Limiter"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":151,"author":{"gitId":"D-Limiter"},"content":" public String[] extractEvent(String text) {","lastModifiedDate":"2023-09-02"},{"lineNumber":152,"author":{"gitId":"D-Limiter"},"content":" String[] str \u003d new String[3];","lastModifiedDate":"2023-09-10"},{"lineNumber":153,"author":{"gitId":"D-Limiter"},"content":" str[0] \u003d \"\";","lastModifiedDate":"2023-09-02"},{"lineNumber":154,"author":{"gitId":"D-Limiter"},"content":" str[1] \u003d \"\";","lastModifiedDate":"2023-09-02"},{"lineNumber":155,"author":{"gitId":"D-Limiter"},"content":" str[2] \u003d \"\";","lastModifiedDate":"2023-09-02"},{"lineNumber":156,"author":{"gitId":"D-Limiter"},"content":" String wrd \u003d \"\";","lastModifiedDate":"2023-09-02"},{"lineNumber":157,"author":{"gitId":"D-Limiter"},"content":" text \u003d text + \" \";","lastModifiedDate":"2023-09-02"},{"lineNumber":158,"author":{"gitId":"D-Limiter"},"content":" boolean fromFlag \u003d false;","lastModifiedDate":"2023-09-02"},{"lineNumber":159,"author":{"gitId":"D-Limiter"},"content":" boolean toFlag \u003d false;","lastModifiedDate":"2023-09-02"},{"lineNumber":160,"author":{"gitId":"D-Limiter"},"content":" for (int i \u003d 0; i \u003c text.length(); i++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":161,"author":{"gitId":"D-Limiter"},"content":" char ch \u003d text.charAt(i);","lastModifiedDate":"2023-09-02"},{"lineNumber":162,"author":{"gitId":"D-Limiter"},"content":" if (ch \u003d\u003d \u0027 \u0027) {","lastModifiedDate":"2023-09-02"},{"lineNumber":163,"author":{"gitId":"D-Limiter"},"content":" if (wrd.equals(\"/from\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":164,"author":{"gitId":"D-Limiter"},"content":" fromFlag \u003d true;","lastModifiedDate":"2023-09-02"},{"lineNumber":165,"author":{"gitId":"D-Limiter"},"content":" } else if (wrd.equals(\"/to\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":166,"author":{"gitId":"D-Limiter"},"content":" toFlag \u003d true;","lastModifiedDate":"2023-09-02"},{"lineNumber":167,"author":{"gitId":"D-Limiter"},"content":" fromFlag \u003d false;","lastModifiedDate":"2023-09-02"},{"lineNumber":168,"author":{"gitId":"D-Limiter"},"content":" } else if (fromFlag) {","lastModifiedDate":"2023-09-02"},{"lineNumber":169,"author":{"gitId":"D-Limiter"},"content":" str[0] +\u003d wrd + \" \";","lastModifiedDate":"2023-09-02"},{"lineNumber":170,"author":{"gitId":"D-Limiter"},"content":" } else if (toFlag) {","lastModifiedDate":"2023-09-02"},{"lineNumber":171,"author":{"gitId":"D-Limiter"},"content":" str[1] +\u003d wrd + \" \";","lastModifiedDate":"2023-09-02"},{"lineNumber":172,"author":{"gitId":"D-Limiter"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":173,"author":{"gitId":"D-Limiter"},"content":" str[2] +\u003d wrd + \" \";","lastModifiedDate":"2023-09-02"},{"lineNumber":174,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":175,"author":{"gitId":"D-Limiter"},"content":" wrd \u003d \"\";","lastModifiedDate":"2023-09-02"},{"lineNumber":176,"author":{"gitId":"D-Limiter"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":177,"author":{"gitId":"D-Limiter"},"content":" wrd +\u003d ch;","lastModifiedDate":"2023-09-02"},{"lineNumber":178,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":179,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":180,"author":{"gitId":"D-Limiter"},"content":" str[2] \u003d str[2].trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":181,"author":{"gitId":"D-Limiter"},"content":" return str;","lastModifiedDate":"2023-09-02"},{"lineNumber":182,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":183,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":184,"author":{"gitId":"D-Limiter"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"D-Limiter":184}},{"path":"src/main/java/alcazar/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"D-Limiter"},"content":"package alcazar;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"D-Limiter"},"content":"import java.io.File;","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"D-Limiter"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"D-Limiter"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"D-Limiter"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"D-Limiter"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"D-Limiter"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"D-Limiter"},"content":"/**","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"D-Limiter"},"content":" * Class for file storage related functionality","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"D-Limiter"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"D-Limiter"},"content":"public class Storage {","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"D-Limiter"},"content":" private final String filePath;","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"D-Limiter"},"content":" Storage(String filePath) {","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"D-Limiter"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"D-Limiter"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"D-Limiter"},"content":" printTasks();","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"D-Limiter"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"D-Limiter"},"content":" System.out.println(\"Error loading file\");","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"D-Limiter"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"D-Limiter"},"content":" * Prints the contents of the file stored at filePath","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"D-Limiter"},"content":" * @throws FileNotFoundException It is thrown in a situation where the file","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"D-Limiter"},"content":" * does not exist at the given filePath","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"D-Limiter"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"D-Limiter"},"content":" public void printTasks() throws FileNotFoundException {","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"D-Limiter"},"content":" File f \u003d new File(filePath);","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"D-Limiter"},"content":" Scanner s \u003d new Scanner(f);","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"D-Limiter"},"content":" while (s.hasNext()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"D-Limiter"},"content":" System.out.println(s.nextLine());","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"D-Limiter"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"D-Limiter"},"content":" * Writes the new tasks to file","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"D-Limiter"},"content":" * @param t Stores the tasks in a TaskList object","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"D-Limiter"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"D-Limiter"},"content":" public void writeUp(TaskList t) {","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"D-Limiter"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"D-Limiter"},"content":" FileWriter fw \u003d new FileWriter(filePath);","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"D-Limiter"},"content":" fw.write(t.getTasks());","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"D-Limiter"},"content":" fw.close();","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"D-Limiter"},"content":" this.printTasks();","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"D-Limiter"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"D-Limiter"},"content":" System.out.println(\"An exception occurred: \" + e.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"D-Limiter"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"D-Limiter"},"content":" * Converts the input text into its equivalent ToDo Task","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"D-Limiter"},"content":" * @param text String to be converted to a ToDo task","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"D-Limiter"},"content":" * @return The ToDo task converted from text","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"D-Limiter"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"D-Limiter"},"content":" public ToDo taskToDo(String text) {","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"D-Limiter"},"content":" ToDo t \u003d new ToDo(text.substring(10).trim());","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"D-Limiter"},"content":" if (text.charAt(7) \u003d\u003d \u0027X\u0027) {","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"D-Limiter"},"content":" t.markTask();","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"D-Limiter"},"content":" return t;","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"D-Limiter"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"D-Limiter"},"content":" * Converts the input text into its equivalent Event Task","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"D-Limiter"},"content":" * @param text String to be converted to Event Task","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"D-Limiter"},"content":" * @return The Event task converted from text","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"D-Limiter"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"D-Limiter"},"content":" public Event taskEvent(String text) {","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"D-Limiter"},"content":" boolean isMarked \u003d text.charAt(7) \u003d\u003d \u0027X\u0027;","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"D-Limiter"},"content":" String[] parts \u003d text.split(\"[()]\");","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"D-Limiter"},"content":" String taskDescription \u003d parts[0].trim().substring(10);","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"D-Limiter"},"content":" String timeInfo \u003d parts[1].trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"D-Limiter"},"content":" String[] timeParts \u003d timeInfo.split(\"from:|to:\");","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"D-Limiter"},"content":" String startTime \u003d timeParts[1].trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"D-Limiter"},"content":" String endTime \u003d timeParts[2].trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"D-Limiter"},"content":" String[] extractedValues \u003d { taskDescription, startTime, endTime };","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"D-Limiter"},"content":" Event e \u003d new Event(extractedValues[0], extractedValues[1], extractedValues[2]);","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"D-Limiter"},"content":" if (isMarked) {","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"D-Limiter"},"content":" e.markTask();","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"D-Limiter"},"content":" return e;","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"D-Limiter"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"D-Limiter"},"content":" * Converts the input text into its equivalent Deadline Task","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"D-Limiter"},"content":" * @param text The String to be converted to a Deadline Task","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"D-Limiter"},"content":" * @return The Deadline Task from the converted String","lastModifiedDate":"2023-09-02"},{"lineNumber":89,"author":{"gitId":"D-Limiter"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"D-Limiter"},"content":" public Deadline taskDeadline(String text) {","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"D-Limiter"},"content":" boolean isMarked \u003d text.charAt(7) \u003d\u003d \u0027X\u0027;","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"D-Limiter"},"content":" text \u003d text.substring(10);","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"D-Limiter"},"content":" String wrd \u003d \"\";","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"D-Limiter"},"content":" String str \u003d \"\";","lastModifiedDate":"2023-09-02"},{"lineNumber":95,"author":{"gitId":"D-Limiter"},"content":" int i;","lastModifiedDate":"2023-09-02"},{"lineNumber":96,"author":{"gitId":"D-Limiter"},"content":" for (i \u003d 0; i \u003c text.length(); i++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":97,"author":{"gitId":"D-Limiter"},"content":" char ch \u003d text.charAt(i);","lastModifiedDate":"2023-09-02"},{"lineNumber":98,"author":{"gitId":"D-Limiter"},"content":" if (ch \u003d\u003d \u0027 \u0027) {","lastModifiedDate":"2023-09-02"},{"lineNumber":99,"author":{"gitId":"D-Limiter"},"content":" if (wrd.equals(\"(by:\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":100,"author":{"gitId":"D-Limiter"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":101,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"D-Limiter"},"content":" str +\u003d wrd + \" \";","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"D-Limiter"},"content":" wrd \u003d \"\";","lastModifiedDate":"2023-09-02"},{"lineNumber":104,"author":{"gitId":"D-Limiter"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":105,"author":{"gitId":"D-Limiter"},"content":" wrd +\u003d ch;","lastModifiedDate":"2023-09-02"},{"lineNumber":106,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":107,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":108,"author":{"gitId":"D-Limiter"},"content":" String[] deadArray \u003d new String[2];","lastModifiedDate":"2023-09-03"},{"lineNumber":109,"author":{"gitId":"D-Limiter"},"content":" deadArray[0] \u003d str.trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":110,"author":{"gitId":"D-Limiter"},"content":" deadArray[1] \u003d text.substring(i + 1, text.length() - 1);","lastModifiedDate":"2023-09-02"},{"lineNumber":111,"author":{"gitId":"D-Limiter"},"content":" Deadline d \u003d new Deadline(deadArray[0], deadArray[1]);","lastModifiedDate":"2023-09-02"},{"lineNumber":112,"author":{"gitId":"D-Limiter"},"content":" if (isMarked) {","lastModifiedDate":"2023-09-02"},{"lineNumber":113,"author":{"gitId":"D-Limiter"},"content":" d.markTask();","lastModifiedDate":"2023-09-02"},{"lineNumber":114,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":115,"author":{"gitId":"D-Limiter"},"content":" return d;","lastModifiedDate":"2023-09-02"},{"lineNumber":116,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":117,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":118,"author":{"gitId":"D-Limiter"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":119,"author":{"gitId":"D-Limiter"},"content":" * This method reads a file and converts its text into an ArrayList of Task objects","lastModifiedDate":"2023-09-02"},{"lineNumber":120,"author":{"gitId":"D-Limiter"},"content":" * @return ArrayList of Tasks","lastModifiedDate":"2023-09-02"},{"lineNumber":121,"author":{"gitId":"D-Limiter"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":122,"author":{"gitId":"D-Limiter"},"content":" public ArrayList\u003cTask\u003e load() {","lastModifiedDate":"2023-09-02"},{"lineNumber":123,"author":{"gitId":"D-Limiter"},"content":" ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-02"},{"lineNumber":124,"author":{"gitId":"D-Limiter"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":125,"author":{"gitId":"D-Limiter"},"content":" File f \u003d new File(filePath);","lastModifiedDate":"2023-09-02"},{"lineNumber":126,"author":{"gitId":"D-Limiter"},"content":" Scanner s \u003d new Scanner(f);","lastModifiedDate":"2023-09-02"},{"lineNumber":127,"author":{"gitId":"D-Limiter"},"content":" while (s.hasNext()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":128,"author":{"gitId":"D-Limiter"},"content":" String prompt \u003d s.nextLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":129,"author":{"gitId":"D-Limiter"},"content":" char ch \u003d prompt.charAt(4);","lastModifiedDate":"2023-09-02"},{"lineNumber":130,"author":{"gitId":"D-Limiter"},"content":" if (ch \u003d\u003d \u0027T\u0027) {","lastModifiedDate":"2023-09-02"},{"lineNumber":131,"author":{"gitId":"D-Limiter"},"content":" tasks.add(taskToDo(prompt));","lastModifiedDate":"2023-09-02"},{"lineNumber":132,"author":{"gitId":"D-Limiter"},"content":" } else if (ch \u003d\u003d \u0027E\u0027) {","lastModifiedDate":"2023-09-02"},{"lineNumber":133,"author":{"gitId":"D-Limiter"},"content":" tasks.add(taskEvent(prompt));","lastModifiedDate":"2023-09-02"},{"lineNumber":134,"author":{"gitId":"D-Limiter"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":135,"author":{"gitId":"D-Limiter"},"content":" tasks.add(taskDeadline(prompt));","lastModifiedDate":"2023-09-02"},{"lineNumber":136,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":137,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":138,"author":{"gitId":"D-Limiter"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":139,"author":{"gitId":"D-Limiter"},"content":" System.out.println(\"Error! Could not find file!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":140,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":141,"author":{"gitId":"D-Limiter"},"content":" return tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":142,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":143,"author":{"gitId":"D-Limiter"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"D-Limiter":143}},{"path":"src/main/java/alcazar/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"D-Limiter"},"content":"package alcazar;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"D-Limiter"},"content":"public class Task {","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"D-Limiter"},"content":" private boolean isMarked;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"D-Limiter"},"content":" private String taskPrompt;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"D-Limiter"},"content":" Task(String taskPrompt) {","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"D-Limiter"},"content":" this.taskPrompt \u003d taskPrompt;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"D-Limiter"},"content":" this.isMarked \u003d false;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"D-Limiter"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"D-Limiter"},"content":" * Used to mark this task done.","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"D-Limiter"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"D-Limiter"},"content":" public void markTask() {","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"D-Limiter"},"content":" this.isMarked \u003d true;","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"D-Limiter"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"D-Limiter"},"content":" * Used to mark this task undone.","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"D-Limiter"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"D-Limiter"},"content":" public void unmarkTask() {","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"D-Limiter"},"content":" this.isMarked \u003d false;","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"D-Limiter"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"D-Limiter"},"content":" * Used to evaluate String form of a Task","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"D-Limiter"},"content":" * @return String form of a Task","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"D-Limiter"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"D-Limiter"},"content":" public String toString() {","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"D-Limiter"},"content":" String marked;","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"D-Limiter"},"content":" if (this.isMarked) {","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"D-Limiter"},"content":" marked \u003d \"X\";","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"D-Limiter"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"D-Limiter"},"content":" marked \u003d \" \";","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"D-Limiter"},"content":" return \"[\" + marked + \"] \" + this.taskPrompt;","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"D-Limiter"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"D-Limiter":37}},{"path":"src/main/java/alcazar/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"D-Limiter"},"content":"package alcazar;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"D-Limiter"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"D-Limiter"},"content":"/**","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"D-Limiter"},"content":" * Class for the functionality related to storing the list of tasks","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"D-Limiter"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"D-Limiter"},"content":"public class TaskList {","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"D-Limiter"},"content":" private ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"D-Limiter"},"content":" TaskList(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"D-Limiter"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"D-Limiter"},"content":" public int size() {","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"D-Limiter"},"content":" return this.tasks.size();","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"D-Limiter"},"content":" public void markElement(int index) {","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"D-Limiter"},"content":" this.tasks.get(index).markTask();","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"D-Limiter"},"content":" public void unmarkElement(int index) {","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"D-Limiter"},"content":" this.tasks.get(index).unmarkTask();","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"D-Limiter"},"content":" public Task elementAt(int index) {","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"D-Limiter"},"content":" return this.tasks.get(index);","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"D-Limiter"},"content":" public void delete(int index) {","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"D-Limiter"},"content":" this.tasks.remove(index);","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"D-Limiter"},"content":" public void add(Task t) {","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"D-Limiter"},"content":" this.tasks.add(t);","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":37,"author":{"gitId":"D-Limiter"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":38,"author":{"gitId":"D-Limiter"},"content":" * Prints the tasks containg String search","lastModifiedDate":"2023-09-10"},{"lineNumber":39,"author":{"gitId":"D-Limiter"},"content":" * @param search Phrase to equate the tasks against","lastModifiedDate":"2023-09-10"},{"lineNumber":40,"author":{"gitId":"D-Limiter"},"content":" * @return The tasks containing search","lastModifiedDate":"2023-09-10"},{"lineNumber":41,"author":{"gitId":"D-Limiter"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":42,"author":{"gitId":"D-Limiter"},"content":" public String printEquals(String search) {","lastModifiedDate":"2023-09-10"},{"lineNumber":43,"author":{"gitId":"D-Limiter"},"content":" String listedTasks \u003d \"\";","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"D-Limiter"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"D-Limiter"},"content":" if (tasks.get(i).toString().contains(search)) {","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"D-Limiter"},"content":" listedTasks +\u003d (i + 1) + \". \" + tasks.get(i).toString() + \"\\n\";","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"D-Limiter"},"content":" if (listedTasks.equals(\"\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"D-Limiter"},"content":" return \"Sorry no matching tasks.\";","lastModifiedDate":"2023-09-10"},{"lineNumber":51,"author":{"gitId":"D-Limiter"},"content":" } else {","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"D-Limiter"},"content":" return listedTasks;","lastModifiedDate":"2023-09-10"},{"lineNumber":53,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"D-Limiter"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"D-Limiter"},"content":" * The method evaluates the list of the passed tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"D-Limiter"},"content":" * @return String of all the passed tasks","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"D-Limiter"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"D-Limiter"},"content":" public String getTasks() {","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"D-Limiter"},"content":" String listedTasks \u003d \"\";","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"D-Limiter"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"D-Limiter"},"content":" listedTasks +\u003d (i + 1) + \". \" + tasks.get(i).toString() + \"\\n\";","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"D-Limiter"},"content":" return listedTasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"D-Limiter"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"D-Limiter":70}},{"path":"src/main/java/alcazar/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"D-Limiter"},"content":"package alcazar;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"D-Limiter"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"D-Limiter"},"content":" public ToDo(String description) {","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"D-Limiter"},"content":" super(description);","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"D-Limiter"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"D-Limiter"},"content":" * Used to evaluate String form of a ToDo task","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"D-Limiter"},"content":" * @return String form of a ToDo Task","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"D-Limiter"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"D-Limiter"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"D-Limiter"},"content":" public String toString() {","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"D-Limiter"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"D-Limiter"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"D-Limiter":19}},{"path":"src/main/java/alcazar/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"D-Limiter"},"content":"package alcazar;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"D-Limiter"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"D-Limiter"},"content":"public class Ui {","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"D-Limiter"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"D-Limiter"},"content":" * Used to show the Welcome message","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"D-Limiter"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"D-Limiter"},"content":" public void showWelcome() {","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"D-Limiter"},"content":" String line \u003d \"____________________________________________________________\\n\";","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"D-Limiter"},"content":" System.out.println(line + \" Hello! I\u0027m Alcazar\\n\" +","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"D-Limiter"},"content":" \" What can I do for you?\\n\" +","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"D-Limiter"},"content":" line);","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"D-Limiter"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"D-Limiter"},"content":" * Used to read command from console.","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"D-Limiter"},"content":" * @return String containing the new command","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"D-Limiter"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"D-Limiter"},"content":" public String readCommand() {","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"D-Limiter"},"content":" Scanner sc \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"D-Limiter"},"content":" String st \u003d sc.nextLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"D-Limiter"},"content":" return st;","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"D-Limiter"},"content":" public void showLine() {","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"D-Limiter"},"content":" System.out.println(\"____________________________________________________________\\n\");","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"D-Limiter"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"D-Limiter"},"content":" * Used to show an error if any","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"D-Limiter"},"content":" * @param msg Used to print the mess","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"D-Limiter"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"D-Limiter"},"content":" public void showError(String msg) {","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"D-Limiter"},"content":" System.out.println(msg);","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"D-Limiter"},"content":" public void showLoadingError() {","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"D-Limiter"},"content":" System.out.println(\"Error loading data from the file\");","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"D-Limiter"},"content":" public void showExitMsg() {","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"D-Limiter"},"content":" this.showLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"D-Limiter"},"content":" System.out.println(","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"D-Limiter"},"content":" \" Bye. Hope to see you again soon!\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"D-Limiter"},"content":" );","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"D-Limiter"},"content":" this.showLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"D-Limiter"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"D-Limiter":48}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"D-Limiter"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":2,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"D-Limiter"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"D-Limiter"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"D-Limiter"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"D-Limiter"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"D-Limiter"},"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-10"},{"lineNumber":9,"author":{"gitId":"D-Limiter"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"D-Limiter"},"content":" \u003cLabel fx:id\u003d\"dialog\" text\u003d\"Label\" wrapText\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"D-Limiter"},"content":" \u003cImageView fx:id\u003d\"displayPicture\" fitHeight\u003d\"99.0\" fitWidth\u003d\"99.0\" pickOnBounds\u003d\"true\" preserveRatio\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"D-Limiter"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"D-Limiter"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"D-Limiter"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"D-Limiter"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"D-Limiter"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"D-Limiter":16}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"D-Limiter"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":2,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"D-Limiter"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"D-Limiter"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"D-Limiter"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"D-Limiter"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"D-Limiter"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"D-Limiter"},"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\"alcazar.MainWindow\"\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"D-Limiter"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"D-Limiter"},"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\" /\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"D-Limiter"},"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\" /\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"D-Limiter"},"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-10"},{"lineNumber":14,"author":{"gitId":"D-Limiter"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"D-Limiter"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"552.0\" prefWidth\u003d\"388.0\" /\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"D-Limiter"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"D-Limiter"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"D-Limiter"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"D-Limiter"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"D-Limiter":19}},{"path":"src/test/java/alcazar/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"D-Limiter"},"content":"package alcazar;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"D-Limiter"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"D-Limiter"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"D-Limiter"},"content":"public class ParserTest {","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"D-Limiter"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"D-Limiter"},"content":" void textAfterTest() {","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"D-Limiter"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"D-Limiter"},"content":" assertEquals(\"birthday /from 2pm /to 6pm\", new Parser().textAfter(\"event birthday /from 2pm /to 6pm\"));","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"D-Limiter"},"content":" } catch (InvalidArgumentException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"D-Limiter"},"content":" System.out.println(\"Exception thrown\");","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"D-Limiter"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"D-Limiter"},"content":" void extractDeadlineTest() {","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"D-Limiter"},"content":" String s[] \u003d {\"submit assignment\",\"Oct 4th 1800\"};","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"D-Limiter"},"content":" assertEquals(s[0], new Parser().extractDeadline(\"submit assignment /by Oct 4th 1800\")[0]);","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"D-Limiter"},"content":" assertEquals(s[1], new Parser().extractDeadline(\"submit assignment /by Oct 4th 1800\")[1]);","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"D-Limiter"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"D-Limiter":23}},{"path":"src/test/java/alcazar/TaskListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"D-Limiter"},"content":"package alcazar;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"D-Limiter"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"D-Limiter"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"D-Limiter"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"D-Limiter"},"content":"public class TaskListTest {","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"D-Limiter"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"D-Limiter"},"content":" void getTasksTest() {","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"D-Limiter"},"content":" ArrayList\u003cTask\u003e al \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"D-Limiter"},"content":" al.add(new ToDo(\"read book\"));","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"D-Limiter"},"content":" String s \u003d \"1. [T][ ] read book\\n\";","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"D-Limiter"},"content":" assertEquals(s, new TaskList(al).getTasks());","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"D-Limiter"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"D-Limiter"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"D-Limiter"},"content":" void elementAtTest() {","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"D-Limiter"},"content":" ArrayList\u003cTask\u003e al \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"D-Limiter"},"content":" al.add(new ToDo(\"read book\"));","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"D-Limiter"},"content":" assertEquals(\"[T][ ] read book\", new TaskList(al).elementAt(0).toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"D-Limiter"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"D-Limiter"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"D-Limiter":24}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"D-Limiter"},"content":"todo borrow book","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"D-Limiter":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":"-"},"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":"D-Limiter"},"content":"javac -cp ..\\src\\main\\java\\Duke.java -Xlint:none -d ..\\bin ..\\src\\main\\java\\Duke.java","lastModifiedDate":"2023-08-24"},{"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":"-"},"content":"java -classpath ..\\bin Duke \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"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":{"D-Limiter":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":"D-Limiter"},"content":"if ! javac -cp ../src/main/java/*.java -Xlint:none -d ../bin ../src/main/java/*.java","lastModifiedDate":"2023-08-24"},{"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":"-"},"content":"java -classpath ../bin Duke \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"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":{"D-Limiter":1,"-":37}}] diff --git a/D-Limiter_ip_master/commits.json b/D-Limiter_ip_master/commits.json index 1d711984..47ce9c9a 100644 --- a/D-Limiter_ip_master/commits.json +++ b/D-Limiter_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"D-Limiter":[{"date":"2023-08-24","commitResults":[{"hash":"06ae568938319485767404dd8caea1783996f1df","isMergeCommit":false,"messageTitle":"Completing Level-0","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":6}}},{"hash":"41ec3644fe4eeece8d96437e7c34b205806bbb24","isMergeCommit":false,"messageTitle":"Completing Level-1","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":1}}},{"hash":"16d4e82bc958ad1764ae3b2cdd07e651f78e3ea3","isMergeCommit":false,"messageTitle":"Completing Level-2","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":1}}},{"hash":"a3235fc1779bdffb75ce01fdaee1f52b258b482f","isMergeCommit":false,"messageTitle":"Completing Level-3","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":45,"deletions":5}}},{"hash":"003fb4f0e353d08477cd6a5be312e9aa998b27bd","isMergeCommit":false,"messageTitle":"Completing Level-4","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":124,"deletions":4}}},{"hash":"e3cae1db2c1e405ad588d190ea4d5781f12242f6","isMergeCommit":false,"messageTitle":"Added A-TextUiTesting","messageBody":"","tags":["Level-6","Level-5","A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":132,"deletions":23},"bat":{"insertions":1,"deletions":1},"sh":{"insertions":1,"deletions":1}}},{"hash":"238317ad6d39482d3ae3586c575536f904d30859","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/master\u0027 There seems to be some issue and my commits are not reflected. Hence, I must correct this. Thanks!","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-09-02","commitResults":[{"hash":"ea198de9a07167f57b9ae8a26eb34bc521fd5d71","isMergeCommit":false,"messageTitle":"Add changes","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":0}}},{"hash":"24c1fdba644c8511d0949f6a6d2ce44a94a55376","isMergeCommit":false,"messageTitle":"no message","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":306,"deletions":0},"bat":{"insertions":21,"deletions":0},"sh":{"insertions":38,"deletions":0},"md":{"insertions":62,"deletions":0}}},{"hash":"aaf62dcf9e955b40d4a2c47f4d88730b9cffb9cc","isMergeCommit":false,"messageTitle":"Add changes for Level-7","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":596,"deletions":83}}},{"hash":"d80632bb9beaf533fba4b4977c2904a4bc190992","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"929968d5b5614d5712dd7687710208a60821b7e3","isMergeCommit":false,"messageTitle":"Add changes to resolve commit","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":130}}},{"hash":"e751b99f1d57ab2f22d627704091354da940c6b4","isMergeCommit":false,"messageTitle":"Add changes for Level-8","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":1}}},{"hash":"a6b67e4d54afd5ffc0aebe2d984df0b811446349","isMergeCommit":false,"messageTitle":"Add changes for A-MoreOOP","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":0}}},{"hash":"90d35b9177ec38c31737857a60fea42209e6c340","isMergeCommit":false,"messageTitle":"Add changes to include all classes in package alcazar","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":832,"deletions":0}}},{"hash":"e2b1365bce7e9a42191abc911776d05c5c8aee95","isMergeCommit":true,"messageTitle":"Merge commit \u0027ed6d4d25bd4e34461919ffe785a6f10f4c087552\u0027","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"3838b9e871dda39ef1d45082724db1753d5c7ab4","isMergeCommit":false,"messageTitle":"Add J-Unit Tests","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":47,"deletions":0}}}]},{"date":"2023-09-03","commitResults":[{"hash":"9a464e3f93524b5ab665225a2ddd968f9ab21dc3","isMergeCommit":false,"messageTitle":"Add changes for JavaDocs in each public method","messageBody":"","tags":["A-JavaDoc","A-CodingStandard"],"fileTypesAndContributionMap":{"java":{"insertions":38,"deletions":246}}},{"hash":"78415882a7ca300af4e15e1c5bf9be54b00b9bd0","isMergeCommit":false,"messageTitle":"Add functionality to search for tasks","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"java":{"insertions":40,"deletions":17}}}]},{"date":"2023-09-06","commitResults":[{"hash":"9bfaa034e2168498fb5c7c546bbcbd044b228f2d","isMergeCommit":false,"messageTitle":"Add changes for gradle","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":305}}}]}]},"authorFileTypeContributionMap":{"D-Limiter":{"java":1208,"md":0,"fxml":0,"sh":1,"bat":1,"gradle":0,"txt":2}},"authorContributionVariance":{"D-Limiter":217488.12},"authorDisplayNameMap":{"D-Limiter":"CS2103T-T11-4 BHAR..NISH"}} +{"authorDailyContributionsMap":{"D-Limiter":[{"date":"2023-08-24","commitResults":[{"hash":"06ae568938319485767404dd8caea1783996f1df","isMergeCommit":false,"messageTitle":"Completing Level-0","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":6}}},{"hash":"41ec3644fe4eeece8d96437e7c34b205806bbb24","isMergeCommit":false,"messageTitle":"Completing Level-1","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":1}}},{"hash":"16d4e82bc958ad1764ae3b2cdd07e651f78e3ea3","isMergeCommit":false,"messageTitle":"Completing Level-2","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":1}}},{"hash":"a3235fc1779bdffb75ce01fdaee1f52b258b482f","isMergeCommit":false,"messageTitle":"Completing Level-3","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":45,"deletions":5}}},{"hash":"003fb4f0e353d08477cd6a5be312e9aa998b27bd","isMergeCommit":false,"messageTitle":"Completing Level-4","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":124,"deletions":4}}},{"hash":"e3cae1db2c1e405ad588d190ea4d5781f12242f6","isMergeCommit":false,"messageTitle":"Added A-TextUiTesting","messageBody":"","tags":["Level-6","Level-5","A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":132,"deletions":23},"bat":{"insertions":1,"deletions":1},"sh":{"insertions":1,"deletions":1}}},{"hash":"238317ad6d39482d3ae3586c575536f904d30859","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/master\u0027 There seems to be some issue and my commits are not reflected. Hence, I must correct this. Thanks!","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-09-02","commitResults":[{"hash":"ea198de9a07167f57b9ae8a26eb34bc521fd5d71","isMergeCommit":false,"messageTitle":"Add changes","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":0}}},{"hash":"24c1fdba644c8511d0949f6a6d2ce44a94a55376","isMergeCommit":false,"messageTitle":"no message","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":306,"deletions":0},"bat":{"insertions":21,"deletions":0},"sh":{"insertions":38,"deletions":0},"md":{"insertions":62,"deletions":0}}},{"hash":"aaf62dcf9e955b40d4a2c47f4d88730b9cffb9cc","isMergeCommit":false,"messageTitle":"Add changes for Level-7","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":596,"deletions":83}}},{"hash":"d80632bb9beaf533fba4b4977c2904a4bc190992","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"929968d5b5614d5712dd7687710208a60821b7e3","isMergeCommit":false,"messageTitle":"Add changes to resolve commit","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":130}}},{"hash":"e751b99f1d57ab2f22d627704091354da940c6b4","isMergeCommit":false,"messageTitle":"Add changes for Level-8","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":1}}},{"hash":"a6b67e4d54afd5ffc0aebe2d984df0b811446349","isMergeCommit":false,"messageTitle":"Add changes for A-MoreOOP","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":0}}},{"hash":"90d35b9177ec38c31737857a60fea42209e6c340","isMergeCommit":false,"messageTitle":"Add changes to include all classes in package alcazar","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":832,"deletions":0}}},{"hash":"e2b1365bce7e9a42191abc911776d05c5c8aee95","isMergeCommit":true,"messageTitle":"Merge commit \u0027ed6d4d25bd4e34461919ffe785a6f10f4c087552\u0027","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"3838b9e871dda39ef1d45082724db1753d5c7ab4","isMergeCommit":false,"messageTitle":"Add J-Unit Tests","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":47,"deletions":0}}}]},{"date":"2023-09-03","commitResults":[{"hash":"9a464e3f93524b5ab665225a2ddd968f9ab21dc3","isMergeCommit":false,"messageTitle":"Add changes for JavaDocs in each public method","messageBody":"","tags":["A-JavaDoc","A-CodingStandard"],"fileTypesAndContributionMap":{"java":{"insertions":38,"deletions":246}}},{"hash":"78415882a7ca300af4e15e1c5bf9be54b00b9bd0","isMergeCommit":false,"messageTitle":"Add functionality to search for tasks","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"java":{"insertions":40,"deletions":17}}}]},{"date":"2023-09-06","commitResults":[{"hash":"9bfaa034e2168498fb5c7c546bbcbd044b228f2d","isMergeCommit":false,"messageTitle":"Add changes for gradle","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":305}}}]},{"date":"2023-09-10","commitResults":[{"hash":"14683fb7adb1d1ee3e47fee00a859e6bb3bd5caa","isMergeCommit":false,"messageTitle":"Add changes for level-10","messageBody":"","tags":["Level-10","A-CheckStyle"],"fileTypesAndContributionMap":{"gradle":{"insertions":19,"deletions":2},"txt":{"insertions":0,"deletions":1},"fxml":{"insertions":35,"deletions":0},"java":{"insertions":347,"deletions":59}}}]}]},"authorFileTypeContributionMap":{"D-Limiter":{"java":1496,"md":0,"fxml":35,"sh":1,"bat":1,"gradle":19,"txt":1}},"authorContributionVariance":{"D-Limiter":188178.88},"authorDisplayNameMap":{"D-Limiter":"CS2103T-T11-4 BHAR..NISH"}} diff --git a/DonovanJJ_ip_master/authorship.json b/DonovanJJ_ip_master/authorship.json index b292deb9..1d0ff48b 100644 --- a/DonovanJJ_ip_master/authorship.json +++ b/DonovanJJ_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"DonovanJJ"},"content":"# duke.Duke project template","lastModifiedDate":"2023-08-26"},{"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":"DonovanJJ"},"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-08-26"},{"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":{"DonovanJJ":2,"-":22}},{"path":"Users/donovan/Documents/Modules/CS2103T/ip/data/ipOutput.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"DonovanJJ"},"content":"T|0|borrow book","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"DonovanJJ"},"content":"D|0|return book|Sunday","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"DonovanJJ"},"content":"D|0|return book|2 Dec 2019","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"DonovanJJ":3}},{"path":"build.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"plugins {","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"DonovanJJ"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"-"},"content":" id \u0027java\u0027","lastModifiedDate":"2020-05-25"},{"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":"DonovanJJ"},"content":"checkstyle {","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"DonovanJJ"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"DonovanJJ"},"content":"}","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":18,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":19,"author":{"gitId":"DonovanJJ"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"DonovanJJ"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"DonovanJJ"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"DonovanJJ"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"DonovanJJ"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"DonovanJJ"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"DonovanJJ"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"DonovanJJ"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"DonovanJJ"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"DonovanJJ"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"DonovanJJ"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"DonovanJJ"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"DonovanJJ"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","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":"DonovanJJ"},"content":" mainClass.set(\"duke.Launcher\")","lastModifiedDate":"2023-09-06"},{"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":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"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":{"DonovanJJ":20,"-":40}},{"path":"src/main/java/duke/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"DonovanJJ"},"content":"package duke;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"DonovanJJ"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"DonovanJJ"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"DonovanJJ"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"DonovanJJ"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"DonovanJJ"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"DonovanJJ"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"DonovanJJ"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"DonovanJJ"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"DonovanJJ"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"DonovanJJ"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"DonovanJJ"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"DonovanJJ"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"DonovanJJ"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"DonovanJJ"},"content":" * An example of a custom control using FXML.","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"DonovanJJ"},"content":" * This control represents a dialog box consisting of an ImageView to represent the speaker\u0027s face and a label","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"DonovanJJ"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"DonovanJJ"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"DonovanJJ"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"DonovanJJ"},"content":" private Label dialog;","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"DonovanJJ"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"DonovanJJ"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"DonovanJJ"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"DonovanJJ"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"DonovanJJ"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"DonovanJJ"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"DonovanJJ"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"DonovanJJ"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"DonovanJJ"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"DonovanJJ"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"DonovanJJ"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"DonovanJJ"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"DonovanJJ"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"DonovanJJ"},"content":" private void flip() {","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"DonovanJJ"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"DonovanJJ"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"DonovanJJ"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"DonovanJJ"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"DonovanJJ"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"DonovanJJ"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"DonovanJJ"},"content":" public static DialogBox getDukeDialog(String text, Image img) {","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"DonovanJJ"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"DonovanJJ"},"content":" db.flip();","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"DonovanJJ"},"content":" return db;","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"DonovanJJ"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"DonovanJJ":61}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"DonovanJJ"},"content":"package duke;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"DonovanJJ"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"DonovanJJ"},"content":"/**","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"DonovanJJ"},"content":" * Encapsulates the bot application.","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"DonovanJJ"},"content":" * @author Donovan Chan Jia Jun","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"DonovanJJ"},"content":"public class Duke {","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":12,"author":{"gitId":"DonovanJJ"},"content":" private String outputPath;","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"DonovanJJ"},"content":" private Storage data;","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"DonovanJJ"},"content":" private TaskList tasks;","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"DonovanJJ"},"content":" private Ui ui;","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"DonovanJJ"},"content":" * Constructs the bot object.","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"DonovanJJ"},"content":" * @param filePath String represetation of the relative path","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"DonovanJJ"},"content":" public Duke(String filePath) {","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"DonovanJJ"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2023-08-26"},{"lineNumber":24,"author":{"gitId":"DonovanJJ"},"content":" this.data \u003d new Storage(filePath);","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"DonovanJJ"},"content":" this.outputPath \u003d filePath;","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"DonovanJJ"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"DonovanJJ"},"content":" this.tasks \u003d new TaskList(this.data.loadOutputFile());","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"DonovanJJ"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"DonovanJJ"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":34,"author":{"gitId":"DonovanJJ"},"content":" * You should have your own function to generate a response to user input.","lastModifiedDate":"2023-09-07"},{"lineNumber":35,"author":{"gitId":"DonovanJJ"},"content":" * Replace this stub with your completed method.","lastModifiedDate":"2023-09-07"},{"lineNumber":36,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":37,"author":{"gitId":"DonovanJJ"},"content":" public String getResponse(String input) {","lastModifiedDate":"2023-09-07"},{"lineNumber":38,"author":{"gitId":"DonovanJJ"},"content":" if (Parser.parsable(input)) {","lastModifiedDate":"2023-09-07"},{"lineNumber":39,"author":{"gitId":"DonovanJJ"},"content":" if (this.outputPath.equals(\"\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"DonovanJJ"},"content":" this.ui.emptyFilePath();","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":42,"author":{"gitId":"DonovanJJ"},"content":" return Parser.parse(input, ui, this.tasks, this.data);","lastModifiedDate":"2023-09-07"},{"lineNumber":43,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":44,"author":{"gitId":"DonovanJJ"},"content":" return this.ui.exit();","lastModifiedDate":"2023-09-07"},{"lineNumber":45,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":46,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"DonovanJJ"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"DonovanJJ":47}},{"path":"src/main/java/duke/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"DonovanJJ"},"content":"package duke;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"DonovanJJ"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"DonovanJJ"},"content":"/**","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"DonovanJJ"},"content":" * Class that encapsulates the starting point of the program.","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"DonovanJJ"},"content":"public class Launcher {","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"DonovanJJ"},"content":" * Launches the chat application.","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"DonovanJJ"},"content":" * @param args","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"DonovanJJ"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"DonovanJJ"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"DonovanJJ"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"DonovanJJ":17}},{"path":"src/main/java/duke/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"DonovanJJ"},"content":"package duke;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"DonovanJJ"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"DonovanJJ"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"DonovanJJ"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"DonovanJJ"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"DonovanJJ"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"DonovanJJ"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"DonovanJJ"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"DonovanJJ"},"content":" * A GUI for Duke using FXML.","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"DonovanJJ"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"DonovanJJ"},"content":" private Duke duke \u003d new Duke(\"./ipOutput.txt\");","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"DonovanJJ"},"content":" * Starts up the application.","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"DonovanJJ"},"content":" * @param stage the primary stage for this application, onto which the application scene can be set.","lastModifiedDate":"2023-09-07"},{"lineNumber":22,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"DonovanJJ"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"DonovanJJ"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"DonovanJJ"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"DonovanJJ"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"DonovanJJ"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"DonovanJJ"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"DonovanJJ"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"DonovanJJ"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setDuke(duke);","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"DonovanJJ"},"content":" stage.show();","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"DonovanJJ"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"DonovanJJ"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"DonovanJJ"},"content":" } catch (IllegalStateException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"DonovanJJ"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"DonovanJJ"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"DonovanJJ":38}},{"path":"src/main/java/duke/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"DonovanJJ"},"content":"package duke;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"DonovanJJ"},"content":"import javafx.animation.PauseTransition;","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"DonovanJJ"},"content":"import javafx.application.Platform;","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"DonovanJJ"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"DonovanJJ"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"DonovanJJ"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"DonovanJJ"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"DonovanJJ"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"DonovanJJ"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"DonovanJJ"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"DonovanJJ"},"content":"import javafx.util.Duration;","lastModifiedDate":"2023-09-07"},{"lineNumber":13,"author":{"gitId":"DonovanJJ"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"DonovanJJ"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"DonovanJJ"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"DonovanJJ"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"DonovanJJ"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"DonovanJJ"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"DonovanJJ"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"DonovanJJ"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"DonovanJJ"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"DonovanJJ"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"DonovanJJ"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"DonovanJJ"},"content":" private Duke duke;","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"DonovanJJ"},"content":" private Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/babyYoda.jpeg\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"DonovanJJ"},"content":" private Image dukeImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/yoda.jpeg\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"DonovanJJ"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"DonovanJJ"},"content":" public void initialize() {","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"DonovanJJ"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"DonovanJJ"},"content":" public void setDuke(Duke d) {","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"DonovanJJ"},"content":" duke \u003d d;","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"DonovanJJ"},"content":" * Creates two dialog boxes, one echoing user input and the other containing Duke\u0027s reply and then appends them to","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"DonovanJJ"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"DonovanJJ"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"DonovanJJ"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"DonovanJJ"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"DonovanJJ"},"content":" String response \u003d duke.getResponse(input);","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"DonovanJJ"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"DonovanJJ"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"DonovanJJ"},"content":" DialogBox.getDukeDialog(response, dukeImage)","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"DonovanJJ"},"content":" );","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"DonovanJJ"},"content":" userInput.clear();","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"DonovanJJ"},"content":" if (response.equals(\"Bye. Hope to see you again soon!\")) {","lastModifiedDate":"2023-09-07"},{"lineNumber":55,"author":{"gitId":"DonovanJJ"},"content":" PauseTransition delay \u003d new PauseTransition(Duration.seconds(2));","lastModifiedDate":"2023-09-07"},{"lineNumber":56,"author":{"gitId":"DonovanJJ"},"content":" delay.setOnFinished(event -\u003e Platform.exit());","lastModifiedDate":"2023-09-07"},{"lineNumber":57,"author":{"gitId":"DonovanJJ"},"content":" delay.play();","lastModifiedDate":"2023-09-07"},{"lineNumber":58,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":59,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"DonovanJJ"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"DonovanJJ":60}},{"path":"src/main/java/duke/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"DonovanJJ"},"content":"package duke;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"DonovanJJ"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"DonovanJJ"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"DonovanJJ"},"content":"import duke.task.Event;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"DonovanJJ"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"DonovanJJ"},"content":"import duke.task.Todo;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"DonovanJJ"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"DonovanJJ"},"content":" * Encapsulates the logic of analysing the user\u0027s String input.","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"DonovanJJ"},"content":" * Decides on what should be done next based on it","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"DonovanJJ"},"content":" * @author Donovan Chan Jia Jun","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"DonovanJJ"},"content":"public class Parser {","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"DonovanJJ"},"content":" * Checks if input string is parsable or not.","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"DonovanJJ"},"content":" * @param input The input string to check","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"DonovanJJ"},"content":" * @return {@code true} if the input string is not equal to \"bye\"","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"DonovanJJ"},"content":" public static boolean parsable(String input) {","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"DonovanJJ"},"content":" return !input.equals(\"bye\");","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"DonovanJJ"},"content":" * Creates the tasks based on String input.","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"DonovanJJ"},"content":" * @param input String input by user","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"DonovanJJ"},"content":" * @return A task object of the appropriate subclass (Deadlines, Events, Todos)","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"DonovanJJ"},"content":" * @throws Exception If the input string is not valid","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":35,"author":{"gitId":"DonovanJJ"},"content":" public static Task createTask(String input) throws Exception {","lastModifiedDate":"2023-08-26"},{"lineNumber":36,"author":{"gitId":"DonovanJJ"},"content":" // Splits based on white spaces, identifies based on the relevant /...","lastModifiedDate":"2023-08-26"},{"lineNumber":37,"author":{"gitId":"DonovanJJ"},"content":" String[] arrStrings \u003d input.split(\"\\\\s+\");","lastModifiedDate":"2023-08-26"},{"lineNumber":38,"author":{"gitId":"DonovanJJ"},"content":" String command \u003d arrStrings[0];","lastModifiedDate":"2023-08-26"},{"lineNumber":39,"author":{"gitId":"DonovanJJ"},"content":" String name \u003d \"\";","lastModifiedDate":"2023-08-26"},{"lineNumber":40,"author":{"gitId":"DonovanJJ"},"content":" if (command.equals(\"deadline\")) {","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"DonovanJJ"},"content":" String deadline \u003d \"\";","lastModifiedDate":"2023-08-26"},{"lineNumber":42,"author":{"gitId":"DonovanJJ"},"content":" boolean completedName \u003d false;","lastModifiedDate":"2023-08-26"},{"lineNumber":43,"author":{"gitId":"DonovanJJ"},"content":" for (int i \u003d 1; i \u003c arrStrings.length; i++) {","lastModifiedDate":"2023-08-26"},{"lineNumber":44,"author":{"gitId":"DonovanJJ"},"content":" if (arrStrings[i].equals(\"/by\")) {","lastModifiedDate":"2023-08-26"},{"lineNumber":45,"author":{"gitId":"DonovanJJ"},"content":" completedName \u003d true;","lastModifiedDate":"2023-08-26"},{"lineNumber":46,"author":{"gitId":"DonovanJJ"},"content":" continue;","lastModifiedDate":"2023-08-26"},{"lineNumber":47,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":48,"author":{"gitId":"DonovanJJ"},"content":" if (completedName) {","lastModifiedDate":"2023-08-26"},{"lineNumber":49,"author":{"gitId":"DonovanJJ"},"content":" deadline +\u003d arrStrings[i] + \" \";","lastModifiedDate":"2023-08-26"},{"lineNumber":50,"author":{"gitId":"DonovanJJ"},"content":" } else {","lastModifiedDate":"2023-08-26"},{"lineNumber":51,"author":{"gitId":"DonovanJJ"},"content":" name +\u003d arrStrings[i] + \" \";","lastModifiedDate":"2023-08-26"},{"lineNumber":52,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":53,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":54,"author":{"gitId":"DonovanJJ"},"content":" if (!completedName) {","lastModifiedDate":"2023-08-26"},{"lineNumber":55,"author":{"gitId":"DonovanJJ"},"content":" throw new Exception(\"Invalid deadline task!\");","lastModifiedDate":"2023-08-26"},{"lineNumber":56,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":57,"author":{"gitId":"DonovanJJ"},"content":" return new Deadline(name.substring(0, name.length() - 1), deadline.substring(0, deadline.length() - 1));","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"DonovanJJ"},"content":" } else if (command.equals(\"todo\")) {","lastModifiedDate":"2023-08-26"},{"lineNumber":59,"author":{"gitId":"DonovanJJ"},"content":" if (arrStrings.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-26"},{"lineNumber":60,"author":{"gitId":"DonovanJJ"},"content":" throw new Exception(\"OOPS!!! The description of a todo cannot be empty.\");","lastModifiedDate":"2023-08-26"},{"lineNumber":61,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":62,"author":{"gitId":"DonovanJJ"},"content":" for (int i \u003d 1; i \u003c arrStrings.length; i++) {","lastModifiedDate":"2023-08-26"},{"lineNumber":63,"author":{"gitId":"DonovanJJ"},"content":" name +\u003d arrStrings[i] + \" \";","lastModifiedDate":"2023-08-26"},{"lineNumber":64,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":65,"author":{"gitId":"DonovanJJ"},"content":" return new Todo(name.substring(0, name.length() - 1));","lastModifiedDate":"2023-08-27"},{"lineNumber":66,"author":{"gitId":"DonovanJJ"},"content":" } else if (command.equals(\"event\")) {","lastModifiedDate":"2023-08-26"},{"lineNumber":67,"author":{"gitId":"DonovanJJ"},"content":" String from \u003d \"\";","lastModifiedDate":"2023-08-26"},{"lineNumber":68,"author":{"gitId":"DonovanJJ"},"content":" String to \u003d \"\";","lastModifiedDate":"2023-08-26"},{"lineNumber":69,"author":{"gitId":"DonovanJJ"},"content":" boolean completedName \u003d false;","lastModifiedDate":"2023-08-26"},{"lineNumber":70,"author":{"gitId":"DonovanJJ"},"content":" boolean completedFrom \u003d false;","lastModifiedDate":"2023-08-26"},{"lineNumber":71,"author":{"gitId":"DonovanJJ"},"content":" for (int i \u003d 1; i \u003c arrStrings.length; i++) {","lastModifiedDate":"2023-08-26"},{"lineNumber":72,"author":{"gitId":"DonovanJJ"},"content":" if (arrStrings[i].equals(\"/from\")) {","lastModifiedDate":"2023-08-26"},{"lineNumber":73,"author":{"gitId":"DonovanJJ"},"content":" completedName \u003d true;","lastModifiedDate":"2023-08-26"},{"lineNumber":74,"author":{"gitId":"DonovanJJ"},"content":" } else if (arrStrings[i].equals(\"/to\")) {","lastModifiedDate":"2023-08-26"},{"lineNumber":75,"author":{"gitId":"DonovanJJ"},"content":" completedFrom \u003d true;","lastModifiedDate":"2023-08-26"},{"lineNumber":76,"author":{"gitId":"DonovanJJ"},"content":" } else if (!completedFrom \u0026\u0026 completedName) {","lastModifiedDate":"2023-08-26"},{"lineNumber":77,"author":{"gitId":"DonovanJJ"},"content":" from +\u003d arrStrings[i] + \" \";","lastModifiedDate":"2023-08-26"},{"lineNumber":78,"author":{"gitId":"DonovanJJ"},"content":" } else if (completedFrom \u0026\u0026 completedName) {","lastModifiedDate":"2023-08-26"},{"lineNumber":79,"author":{"gitId":"DonovanJJ"},"content":" to +\u003d arrStrings[i] + \" \";","lastModifiedDate":"2023-08-26"},{"lineNumber":80,"author":{"gitId":"DonovanJJ"},"content":" } else {","lastModifiedDate":"2023-08-26"},{"lineNumber":81,"author":{"gitId":"DonovanJJ"},"content":" name +\u003d arrStrings[i] + \" \";","lastModifiedDate":"2023-08-26"},{"lineNumber":82,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":83,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":84,"author":{"gitId":"DonovanJJ"},"content":" return new Event(name.substring(0, name.length() - 1), from.substring(0, from.length() - 1),","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"DonovanJJ"},"content":" to.substring(0, to.length() - 1));","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"DonovanJJ"},"content":" } else {","lastModifiedDate":"2023-08-26"},{"lineNumber":87,"author":{"gitId":"DonovanJJ"},"content":" throw new Exception(\"OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-08-26"},{"lineNumber":88,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":89,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":90,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":91,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":92,"author":{"gitId":"DonovanJJ"},"content":" * Parse the input string by splitting based on whtiespaces.","lastModifiedDate":"2023-08-27"},{"lineNumber":93,"author":{"gitId":"DonovanJJ"},"content":" * Sorts the string based on its command","lastModifiedDate":"2023-08-27"},{"lineNumber":94,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":95,"author":{"gitId":"DonovanJJ"},"content":" * @param input The input string representing the task given by user","lastModifiedDate":"2023-08-27"},{"lineNumber":96,"author":{"gitId":"DonovanJJ"},"content":" * @param ui The user interface responsible for sending outputs to the screen","lastModifiedDate":"2023-08-27"},{"lineNumber":97,"author":{"gitId":"DonovanJJ"},"content":" * @param taskList ArrayList that stores the tasks loaded from memory","lastModifiedDate":"2023-08-27"},{"lineNumber":98,"author":{"gitId":"DonovanJJ"},"content":" * @param storage Storage that can be written to or read from","lastModifiedDate":"2023-08-27"},{"lineNumber":99,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":100,"author":{"gitId":"DonovanJJ"},"content":" public static String parse(String input, Ui ui, TaskList taskList, Storage storage) {","lastModifiedDate":"2023-09-07"},{"lineNumber":101,"author":{"gitId":"DonovanJJ"},"content":" // Splits the input based on whitespaces.","lastModifiedDate":"2023-08-26"},{"lineNumber":102,"author":{"gitId":"DonovanJJ"},"content":" String command \u003d input.split(\"\\\\s+\")[0];","lastModifiedDate":"2023-08-26"},{"lineNumber":103,"author":{"gitId":"DonovanJJ"},"content":" String message \u003d \"\";","lastModifiedDate":"2023-09-07"},{"lineNumber":104,"author":{"gitId":"DonovanJJ"},"content":" int choice \u003d -1;","lastModifiedDate":"2023-08-26"},{"lineNumber":105,"author":{"gitId":"DonovanJJ"},"content":" switch (command) {","lastModifiedDate":"2023-08-26"},{"lineNumber":106,"author":{"gitId":"DonovanJJ"},"content":" case \"list\":","lastModifiedDate":"2023-08-26"},{"lineNumber":107,"author":{"gitId":"DonovanJJ"},"content":" message \u003d ui.listTask(taskList);","lastModifiedDate":"2023-09-07"},{"lineNumber":108,"author":{"gitId":"DonovanJJ"},"content":" break;","lastModifiedDate":"2023-08-26"},{"lineNumber":109,"author":{"gitId":"DonovanJJ"},"content":" case \"mark\":","lastModifiedDate":"2023-08-26"},{"lineNumber":110,"author":{"gitId":"DonovanJJ"},"content":" choice \u003d Integer.parseInt(input.split(\"\\\\s+\")[1]);","lastModifiedDate":"2023-08-26"},{"lineNumber":111,"author":{"gitId":"DonovanJJ"},"content":" taskList.mark(choice);","lastModifiedDate":"2023-08-26"},{"lineNumber":112,"author":{"gitId":"DonovanJJ"},"content":" message \u003d ui.displayMarkTask(taskList, choice);","lastModifiedDate":"2023-09-07"},{"lineNumber":113,"author":{"gitId":"DonovanJJ"},"content":" break;","lastModifiedDate":"2023-08-26"},{"lineNumber":114,"author":{"gitId":"DonovanJJ"},"content":" case \"unmark\":","lastModifiedDate":"2023-08-26"},{"lineNumber":115,"author":{"gitId":"DonovanJJ"},"content":" choice \u003d Integer.parseInt(input.split(\"\\\\s+\")[1]);","lastModifiedDate":"2023-08-26"},{"lineNumber":116,"author":{"gitId":"DonovanJJ"},"content":" taskList.unmark(choice);","lastModifiedDate":"2023-08-26"},{"lineNumber":117,"author":{"gitId":"DonovanJJ"},"content":" message \u003d ui.displayUnmarkTask(taskList, choice);","lastModifiedDate":"2023-09-07"},{"lineNumber":118,"author":{"gitId":"DonovanJJ"},"content":" break;","lastModifiedDate":"2023-08-26"},{"lineNumber":119,"author":{"gitId":"DonovanJJ"},"content":" case \"delete\":","lastModifiedDate":"2023-08-26"},{"lineNumber":120,"author":{"gitId":"DonovanJJ"},"content":" choice \u003d Integer.parseInt(input.split(\"\\\\s+\")[1]);","lastModifiedDate":"2023-08-26"},{"lineNumber":121,"author":{"gitId":"DonovanJJ"},"content":" Task removedTask \u003d taskList.delete(choice);","lastModifiedDate":"2023-08-26"},{"lineNumber":122,"author":{"gitId":"DonovanJJ"},"content":" message \u003d ui.displayDeleteTask(removedTask, taskList);","lastModifiedDate":"2023-09-07"},{"lineNumber":123,"author":{"gitId":"DonovanJJ"},"content":" break;","lastModifiedDate":"2023-08-26"},{"lineNumber":124,"author":{"gitId":"DonovanJJ"},"content":" case \"find\":","lastModifiedDate":"2023-08-27"},{"lineNumber":125,"author":{"gitId":"DonovanJJ"},"content":" String word \u003d input.split(\"\\\\s+\")[1];","lastModifiedDate":"2023-08-27"},{"lineNumber":126,"author":{"gitId":"DonovanJJ"},"content":" ArrayList\u003cTask\u003e matchingList \u003d taskList.find(word);","lastModifiedDate":"2023-08-27"},{"lineNumber":127,"author":{"gitId":"DonovanJJ"},"content":" message \u003d ui.displayMatchingTask(matchingList);","lastModifiedDate":"2023-09-07"},{"lineNumber":128,"author":{"gitId":"DonovanJJ"},"content":" break;","lastModifiedDate":"2023-08-27"},{"lineNumber":129,"author":{"gitId":"DonovanJJ"},"content":" default:","lastModifiedDate":"2023-08-26"},{"lineNumber":130,"author":{"gitId":"DonovanJJ"},"content":" Task task \u003d null;","lastModifiedDate":"2023-08-26"},{"lineNumber":131,"author":{"gitId":"DonovanJJ"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":132,"author":{"gitId":"DonovanJJ"},"content":" task \u003d createTask(input);","lastModifiedDate":"2023-08-26"},{"lineNumber":133,"author":{"gitId":"DonovanJJ"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":134,"author":{"gitId":"DonovanJJ"},"content":" message \u003d ui.showExceptionError(e);","lastModifiedDate":"2023-09-07"},{"lineNumber":135,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":136,"author":{"gitId":"DonovanJJ"},"content":" if (task !\u003d null) {","lastModifiedDate":"2023-08-26"},{"lineNumber":137,"author":{"gitId":"DonovanJJ"},"content":" taskList.add(task);","lastModifiedDate":"2023-08-26"},{"lineNumber":138,"author":{"gitId":"DonovanJJ"},"content":" message \u003d ui.displayAddTask(task, taskList);","lastModifiedDate":"2023-09-07"},{"lineNumber":139,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":140,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":141,"author":{"gitId":"DonovanJJ"},"content":" storage.updateTasks(taskList);","lastModifiedDate":"2023-08-26"},{"lineNumber":142,"author":{"gitId":"DonovanJJ"},"content":" return message;","lastModifiedDate":"2023-09-07"},{"lineNumber":143,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":144,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":145,"author":{"gitId":"DonovanJJ"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"DonovanJJ":145}},{"path":"src/main/java/duke/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"DonovanJJ"},"content":"package duke;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"DonovanJJ"},"content":"import java.io.File;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"DonovanJJ"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"DonovanJJ"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"DonovanJJ"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"DonovanJJ"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"DonovanJJ"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"DonovanJJ"},"content":"import java.util.function.Consumer;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"DonovanJJ"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"DonovanJJ"},"content":"import duke.task.Event;","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"DonovanJJ"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"DonovanJJ"},"content":"import duke.task.Todo;","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"DonovanJJ"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"DonovanJJ"},"content":" * Encapsulates the Persistent data storage of the application.","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"DonovanJJ"},"content":" * Data is stored in a text file for convenience","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"DonovanJJ"},"content":" * @author Donovan Chan Jia Jun","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"DonovanJJ"},"content":"public class Storage {","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":24,"author":{"gitId":"DonovanJJ"},"content":" private String outputPath;","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"DonovanJJ"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"DonovanJJ"},"content":" this.outputPath \u003d filePath;","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"DonovanJJ"},"content":" * Creates the output file if does not exist. Also creates directories that are missing.","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"DonovanJJ"},"content":" * @return File filePointer to output file","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":34,"author":{"gitId":"DonovanJJ"},"content":" public File createOutputFile() {","lastModifiedDate":"2023-08-26"},{"lineNumber":35,"author":{"gitId":"DonovanJJ"},"content":" File filePointer \u003d new File(this.outputPath);","lastModifiedDate":"2023-08-26"},{"lineNumber":36,"author":{"gitId":"DonovanJJ"},"content":" if (!filePointer.exists()) {","lastModifiedDate":"2023-08-26"},{"lineNumber":37,"author":{"gitId":"DonovanJJ"},"content":" File directory \u003d new File(new File(this.outputPath).getParent());","lastModifiedDate":"2023-08-26"},{"lineNumber":38,"author":{"gitId":"DonovanJJ"},"content":" // create directory if it doesn\u0027t exist","lastModifiedDate":"2023-08-26"},{"lineNumber":39,"author":{"gitId":"DonovanJJ"},"content":" if (!directory.exists()) {","lastModifiedDate":"2023-08-26"},{"lineNumber":40,"author":{"gitId":"DonovanJJ"},"content":" boolean result \u003d directory.mkdirs();","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":42,"author":{"gitId":"DonovanJJ"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":43,"author":{"gitId":"DonovanJJ"},"content":" // create file in that directory","lastModifiedDate":"2023-08-26"},{"lineNumber":44,"author":{"gitId":"DonovanJJ"},"content":" if (!filePointer.createNewFile()) {","lastModifiedDate":"2023-08-26"},{"lineNumber":45,"author":{"gitId":"DonovanJJ"},"content":" throw new FileNotFoundException();","lastModifiedDate":"2023-08-26"},{"lineNumber":46,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":47,"author":{"gitId":"DonovanJJ"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":48,"author":{"gitId":"DonovanJJ"},"content":" e.printStackTrace();","lastModifiedDate":"2023-08-26"},{"lineNumber":49,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":50,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":51,"author":{"gitId":"DonovanJJ"},"content":" return filePointer;","lastModifiedDate":"2023-08-26"},{"lineNumber":52,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":53,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":54,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"DonovanJJ"},"content":" * Loads the data from the Storage memory to the temporary Tasklist.","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"DonovanJJ"},"content":" * @return ArrayList Contains the list of Task objects loaded from memory","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"DonovanJJ"},"content":" * @throws FileNotFoundException If no file is found at the filepath specified","lastModifiedDate":"2023-08-27"},{"lineNumber":59,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":60,"author":{"gitId":"DonovanJJ"},"content":" public ArrayList\u003cTask\u003e loadOutputFile() throws FileNotFoundException {","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"DonovanJJ"},"content":" File filePointer \u003d this.createOutputFile();","lastModifiedDate":"2023-08-26"},{"lineNumber":62,"author":{"gitId":"DonovanJJ"},"content":" Scanner storageScanner \u003d new Scanner(filePointer);","lastModifiedDate":"2023-08-26"},{"lineNumber":63,"author":{"gitId":"DonovanJJ"},"content":" ArrayList\u003cTask\u003e arrList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-26"},{"lineNumber":64,"author":{"gitId":"DonovanJJ"},"content":" while (storageScanner.hasNext()) {","lastModifiedDate":"2023-08-26"},{"lineNumber":65,"author":{"gitId":"DonovanJJ"},"content":" String item \u003d storageScanner.nextLine();","lastModifiedDate":"2023-08-26"},{"lineNumber":66,"author":{"gitId":"DonovanJJ"},"content":" if (item !\u003d \"\") {","lastModifiedDate":"2023-08-26"},{"lineNumber":67,"author":{"gitId":"DonovanJJ"},"content":" // process the item","lastModifiedDate":"2023-08-26"},{"lineNumber":68,"author":{"gitId":"DonovanJJ"},"content":" // T|1|read book","lastModifiedDate":"2023-08-26"},{"lineNumber":69,"author":{"gitId":"DonovanJJ"},"content":" String[] itemParts \u003d item.split(\"\\\\|\");","lastModifiedDate":"2023-08-26"},{"lineNumber":70,"author":{"gitId":"DonovanJJ"},"content":" boolean itemComplete \u003d itemParts[1].equals(\"0\");","lastModifiedDate":"2023-08-26"},{"lineNumber":71,"author":{"gitId":"DonovanJJ"},"content":" String name \u003d itemParts[2];","lastModifiedDate":"2023-08-26"},{"lineNumber":72,"author":{"gitId":"DonovanJJ"},"content":" switch (itemParts[0]) {","lastModifiedDate":"2023-08-26"},{"lineNumber":73,"author":{"gitId":"DonovanJJ"},"content":" case \"T\":","lastModifiedDate":"2023-08-26"},{"lineNumber":74,"author":{"gitId":"DonovanJJ"},"content":" arrList.add(new Todo(name, itemComplete));","lastModifiedDate":"2023-08-27"},{"lineNumber":75,"author":{"gitId":"DonovanJJ"},"content":" break;","lastModifiedDate":"2023-08-26"},{"lineNumber":76,"author":{"gitId":"DonovanJJ"},"content":" case \"D\":","lastModifiedDate":"2023-08-26"},{"lineNumber":77,"author":{"gitId":"DonovanJJ"},"content":" String deadline \u003d itemParts[3];","lastModifiedDate":"2023-08-26"},{"lineNumber":78,"author":{"gitId":"DonovanJJ"},"content":" arrList.add(new Deadline(name, deadline, itemComplete));","lastModifiedDate":"2023-08-27"},{"lineNumber":79,"author":{"gitId":"DonovanJJ"},"content":" break;","lastModifiedDate":"2023-08-26"},{"lineNumber":80,"author":{"gitId":"DonovanJJ"},"content":" case \"E\":","lastModifiedDate":"2023-08-26"},{"lineNumber":81,"author":{"gitId":"DonovanJJ"},"content":" System.out.println(item);","lastModifiedDate":"2023-08-26"},{"lineNumber":82,"author":{"gitId":"DonovanJJ"},"content":" String from \u003d itemParts[3];","lastModifiedDate":"2023-08-26"},{"lineNumber":83,"author":{"gitId":"DonovanJJ"},"content":" String to \u003d itemParts[4];","lastModifiedDate":"2023-08-26"},{"lineNumber":84,"author":{"gitId":"DonovanJJ"},"content":" arrList.add(new Event(name, from, to, itemComplete));","lastModifiedDate":"2023-08-27"},{"lineNumber":85,"author":{"gitId":"DonovanJJ"},"content":" break;","lastModifiedDate":"2023-08-26"},{"lineNumber":86,"author":{"gitId":"DonovanJJ"},"content":" default:","lastModifiedDate":"2023-08-26"},{"lineNumber":87,"author":{"gitId":"DonovanJJ"},"content":" System.out.println(\"Error when reading file\");","lastModifiedDate":"2023-08-26"},{"lineNumber":88,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":89,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":90,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":91,"author":{"gitId":"DonovanJJ"},"content":" storageScanner.close();","lastModifiedDate":"2023-08-26"},{"lineNumber":92,"author":{"gitId":"DonovanJJ"},"content":" return arrList;","lastModifiedDate":"2023-08-26"},{"lineNumber":93,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":94,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":95,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":96,"author":{"gitId":"DonovanJJ"},"content":" * Writes the data from TaskList to permanent storage at the file output location.","lastModifiedDate":"2023-08-27"},{"lineNumber":97,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":98,"author":{"gitId":"DonovanJJ"},"content":" * @param taskList TaskList object that encapsulates the arraylist data structure, contains the updated tasks","lastModifiedDate":"2023-08-27"},{"lineNumber":99,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":100,"author":{"gitId":"DonovanJJ"},"content":" public void updateTasks(TaskList taskList) {","lastModifiedDate":"2023-08-26"},{"lineNumber":101,"author":{"gitId":"DonovanJJ"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":102,"author":{"gitId":"DonovanJJ"},"content":" FileWriter writer \u003d new FileWriter(outputPath, false);","lastModifiedDate":"2023-08-26"},{"lineNumber":103,"author":{"gitId":"DonovanJJ"},"content":" Consumer\u003cTask\u003e storeTask \u003d task -\u003e task.writeToFile(writer);","lastModifiedDate":"2023-08-26"},{"lineNumber":104,"author":{"gitId":"DonovanJJ"},"content":" taskList.getArrList().forEach(storeTask);","lastModifiedDate":"2023-08-26"},{"lineNumber":105,"author":{"gitId":"DonovanJJ"},"content":" writer.close();","lastModifiedDate":"2023-08-26"},{"lineNumber":106,"author":{"gitId":"DonovanJJ"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":107,"author":{"gitId":"DonovanJJ"},"content":" e.printStackTrace();","lastModifiedDate":"2023-08-26"},{"lineNumber":108,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":109,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":110,"author":{"gitId":"DonovanJJ"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"DonovanJJ":110}},{"path":"src/main/java/duke/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"DonovanJJ"},"content":"package duke;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"DonovanJJ"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"DonovanJJ"},"content":"import java.util.function.Predicate;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"DonovanJJ"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"DonovanJJ"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"DonovanJJ"},"content":" * Represents the temporary storage used when running the application.","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"DonovanJJ"},"content":" * @author Donovan Chan Jia Jun","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"DonovanJJ"},"content":"public class TaskList {","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"DonovanJJ"},"content":" private ArrayList\u003cTask\u003e arrList;","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"DonovanJJ"},"content":" public TaskList() {","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"DonovanJJ"},"content":" this.arrList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"DonovanJJ"},"content":" * Constructs TaskList instance to store list of Task.","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"DonovanJJ"},"content":" * @param arrList ArrayList containing Tasks of the user","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"DonovanJJ"},"content":" public TaskList(ArrayList\u003cTask\u003e arrList) {","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"DonovanJJ"},"content":" this.arrList \u003d arrList;","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"DonovanJJ"},"content":" * Returns the encapsulated ArrayList.","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"DonovanJJ"},"content":" * @return ArrayList Containing the Task objects","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"DonovanJJ"},"content":" public ArrayList\u003cTask\u003e getArrList() {","lastModifiedDate":"2023-08-26"},{"lineNumber":36,"author":{"gitId":"DonovanJJ"},"content":" return this.arrList;","lastModifiedDate":"2023-08-26"},{"lineNumber":37,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":38,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":39,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"DonovanJJ"},"content":" * Returnst he size of the list of tasks.","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"DonovanJJ"},"content":" * @return int Size of list of tasks from the ArrayList","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"DonovanJJ"},"content":" public int size() {","lastModifiedDate":"2023-08-26"},{"lineNumber":45,"author":{"gitId":"DonovanJJ"},"content":" return this.arrList.size();","lastModifiedDate":"2023-08-26"},{"lineNumber":46,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":47,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"DonovanJJ"},"content":" * Marks and updates the tasklist.","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"DonovanJJ"},"content":" * @param choice Number input from the user, deciding which task index to mark (Note that choice starts from 1)","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"DonovanJJ"},"content":" public void mark(int choice) {","lastModifiedDate":"2023-08-26"},{"lineNumber":54,"author":{"gitId":"DonovanJJ"},"content":" this.arrList.get(choice - 1).markDone();","lastModifiedDate":"2023-08-26"},{"lineNumber":55,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":56,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":57,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"DonovanJJ"},"content":" * Un-marks and updates the tasklist.","lastModifiedDate":"2023-08-27"},{"lineNumber":59,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":60,"author":{"gitId":"DonovanJJ"},"content":" * @param choice Number input from the user, deciding which task index to un-mark (Note that choice starts from 1)","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"DonovanJJ"},"content":" public void unmark(int choice) {","lastModifiedDate":"2023-08-26"},{"lineNumber":63,"author":{"gitId":"DonovanJJ"},"content":" this.arrList.get(choice - 1).markUndone();","lastModifiedDate":"2023-08-26"},{"lineNumber":64,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":65,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":66,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":67,"author":{"gitId":"DonovanJJ"},"content":" * Add task to the tasklist.","lastModifiedDate":"2023-08-27"},{"lineNumber":68,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":69,"author":{"gitId":"DonovanJJ"},"content":" * @param task Task object to be added to the tasklist","lastModifiedDate":"2023-08-27"},{"lineNumber":70,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":71,"author":{"gitId":"DonovanJJ"},"content":" public void add(Task task) {","lastModifiedDate":"2023-08-26"},{"lineNumber":72,"author":{"gitId":"DonovanJJ"},"content":" this.arrList.add(task);","lastModifiedDate":"2023-08-26"},{"lineNumber":73,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":74,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":75,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":76,"author":{"gitId":"DonovanJJ"},"content":" * Delete task of particular choice from the tasklist.","lastModifiedDate":"2023-08-27"},{"lineNumber":77,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":78,"author":{"gitId":"DonovanJJ"},"content":" * @param choice int representing the choice of task to be removed from tasklist (Note that choice starts from 1)","lastModifiedDate":"2023-08-27"},{"lineNumber":79,"author":{"gitId":"DonovanJJ"},"content":" * @return Task that has been deleted","lastModifiedDate":"2023-08-27"},{"lineNumber":80,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":81,"author":{"gitId":"DonovanJJ"},"content":" public Task delete(int choice) {","lastModifiedDate":"2023-08-26"},{"lineNumber":82,"author":{"gitId":"DonovanJJ"},"content":" return this.arrList.remove(choice - 1);","lastModifiedDate":"2023-08-26"},{"lineNumber":83,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":84,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":85,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":86,"author":{"gitId":"DonovanJJ"},"content":" * Returns a list of tasks that contain the word as the name.","lastModifiedDate":"2023-08-27"},{"lineNumber":87,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":88,"author":{"gitId":"DonovanJJ"},"content":" * @param word String input by user representing the task name to correspond to","lastModifiedDate":"2023-08-27"},{"lineNumber":89,"author":{"gitId":"DonovanJJ"},"content":" * @return ArrayList of tasks that corresponds to the word input","lastModifiedDate":"2023-08-27"},{"lineNumber":90,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":91,"author":{"gitId":"DonovanJJ"},"content":" public ArrayList\u003cTask\u003e find(String word) {","lastModifiedDate":"2023-08-27"},{"lineNumber":92,"author":{"gitId":"DonovanJJ"},"content":" Predicate\u003cTask\u003e findName \u003d task -\u003e task.containName(word);","lastModifiedDate":"2023-08-27"},{"lineNumber":93,"author":{"gitId":"DonovanJJ"},"content":" ArrayList\u003cTask\u003e tempList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-27"},{"lineNumber":94,"author":{"gitId":"DonovanJJ"},"content":" for (Task task : this.arrList) {","lastModifiedDate":"2023-08-27"},{"lineNumber":95,"author":{"gitId":"DonovanJJ"},"content":" if (findName.test(task)) {","lastModifiedDate":"2023-08-27"},{"lineNumber":96,"author":{"gitId":"DonovanJJ"},"content":" tempList.add(task);","lastModifiedDate":"2023-08-27"},{"lineNumber":97,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":98,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":99,"author":{"gitId":"DonovanJJ"},"content":" return tempList;","lastModifiedDate":"2023-08-27"},{"lineNumber":100,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":101,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":102,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":103,"author":{"gitId":"DonovanJJ"},"content":" * Returns the String representation of the selected Task choice that is shown when listed.","lastModifiedDate":"2023-08-27"},{"lineNumber":104,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":105,"author":{"gitId":"DonovanJJ"},"content":" * @param choice int representing the choice of task to represent from tasklist (Note that choice starts from 1)","lastModifiedDate":"2023-08-27"},{"lineNumber":106,"author":{"gitId":"DonovanJJ"},"content":" * @return String representation of the Task in the tasklist","lastModifiedDate":"2023-08-27"},{"lineNumber":107,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":108,"author":{"gitId":"DonovanJJ"},"content":" public String taskToString(int choice) {","lastModifiedDate":"2023-08-26"},{"lineNumber":109,"author":{"gitId":"DonovanJJ"},"content":" return this.arrList.get(choice - 1).toString();","lastModifiedDate":"2023-08-26"},{"lineNumber":110,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":111,"author":{"gitId":"DonovanJJ"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"DonovanJJ":111}},{"path":"src/main/java/duke/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"DonovanJJ"},"content":"package duke;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"DonovanJJ"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"DonovanJJ"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"DonovanJJ"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"DonovanJJ"},"content":" * Encapsulates the response and User Interface of the application.","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"DonovanJJ"},"content":" * @author Donovan Chan Jia Jun","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"DonovanJJ"},"content":"public class Ui {","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"DonovanJJ"},"content":" private final String chatbotName \u003d \"notDuke\";","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"DonovanJJ"},"content":" private final String intro \u003d \"Hello! I\u0027m \" + this.chatbotName + \"\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"DonovanJJ"},"content":" + \"What can I do for you?\";","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"DonovanJJ"},"content":" private final String EXITMESSAGE \u003d \"Bye. Hope to see you again soon!\";","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"DonovanJJ"},"content":" * UI constructor.","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"DonovanJJ"},"content":" public Ui() {","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":23,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":24,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"DonovanJJ"},"content":" * Prints the error message in an exception.","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"DonovanJJ"},"content":" * @param e Exception which message should be printed out","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"DonovanJJ"},"content":" public String showExceptionError(Exception e) {","lastModifiedDate":"2023-09-07"},{"lineNumber":31,"author":{"gitId":"DonovanJJ"},"content":" return String.format(e.getMessage());","lastModifiedDate":"2023-09-07"},{"lineNumber":32,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":34,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"DonovanJJ"},"content":" * Print that the file path is empty.","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"DonovanJJ"},"content":" * */","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"DonovanJJ"},"content":" public void emptyFilePath() {","lastModifiedDate":"2023-08-26"},{"lineNumber":38,"author":{"gitId":"DonovanJJ"},"content":" System.out.println(\"File path is empty!\");","lastModifiedDate":"2023-08-26"},{"lineNumber":39,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":40,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"DonovanJJ"},"content":" * Prints out the exit message when user exits the program.","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"DonovanJJ"},"content":" public String exit() {","lastModifiedDate":"2023-09-07"},{"lineNumber":45,"author":{"gitId":"DonovanJJ"},"content":" return this.EXITMESSAGE;","lastModifiedDate":"2023-09-07"},{"lineNumber":46,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":47,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":48,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"DonovanJJ"},"content":" * Prints the String representation of tasks in the given tasklist with numbering for choice.","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"DonovanJJ"},"content":" * @param taskList Tasklist to be listed from","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"DonovanJJ"},"content":" public String listTask(TaskList taskList) {","lastModifiedDate":"2023-09-07"},{"lineNumber":54,"author":{"gitId":"DonovanJJ"},"content":" ArrayList\u003cTask\u003e arrList \u003d taskList.getArrList();","lastModifiedDate":"2023-08-26"},{"lineNumber":55,"author":{"gitId":"DonovanJJ"},"content":" String message \u003d \"\";","lastModifiedDate":"2023-09-07"},{"lineNumber":56,"author":{"gitId":"DonovanJJ"},"content":" int counter \u003d 0;","lastModifiedDate":"2023-08-26"},{"lineNumber":57,"author":{"gitId":"DonovanJJ"},"content":" message \u003d \"Here are the tasks in your list:\\n\";","lastModifiedDate":"2023-09-07"},{"lineNumber":58,"author":{"gitId":"DonovanJJ"},"content":" for (Task task : arrList) {","lastModifiedDate":"2023-08-26"},{"lineNumber":59,"author":{"gitId":"DonovanJJ"},"content":" counter++;","lastModifiedDate":"2023-08-26"},{"lineNumber":60,"author":{"gitId":"DonovanJJ"},"content":" message +\u003d String.format(\"%d.%s\\n\", counter, task.toString());","lastModifiedDate":"2023-09-07"},{"lineNumber":61,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":62,"author":{"gitId":"DonovanJJ"},"content":" return message;","lastModifiedDate":"2023-09-07"},{"lineNumber":63,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":64,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":65,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":66,"author":{"gitId":"DonovanJJ"},"content":" * Prints the display when user marks a task.","lastModifiedDate":"2023-08-27"},{"lineNumber":67,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":68,"author":{"gitId":"DonovanJJ"},"content":" * @param tasks Tasklist containing the task to be marked.","lastModifiedDate":"2023-08-27"},{"lineNumber":69,"author":{"gitId":"DonovanJJ"},"content":" * @param choice int representing the user\u0027s choice of task to mark","lastModifiedDate":"2023-08-27"},{"lineNumber":70,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":71,"author":{"gitId":"DonovanJJ"},"content":" public String displayMarkTask(TaskList tasks, int choice) {","lastModifiedDate":"2023-09-07"},{"lineNumber":72,"author":{"gitId":"DonovanJJ"},"content":" return \"Nice! I\u0027ve marked this task as done:\\n\"","lastModifiedDate":"2023-09-07"},{"lineNumber":73,"author":{"gitId":"DonovanJJ"},"content":" + tasks.taskToString(choice);","lastModifiedDate":"2023-09-07"},{"lineNumber":74,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":75,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":76,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":77,"author":{"gitId":"DonovanJJ"},"content":" * Prints the display when user unmarks a task.","lastModifiedDate":"2023-08-27"},{"lineNumber":78,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":79,"author":{"gitId":"DonovanJJ"},"content":" * @param tasks Tasklist containing the task to be unmarked","lastModifiedDate":"2023-08-27"},{"lineNumber":80,"author":{"gitId":"DonovanJJ"},"content":" * @param choice int representing the user\u0027s choice of task to mark","lastModifiedDate":"2023-08-27"},{"lineNumber":81,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":82,"author":{"gitId":"DonovanJJ"},"content":" public String displayUnmarkTask(TaskList tasks, int choice) {","lastModifiedDate":"2023-09-07"},{"lineNumber":83,"author":{"gitId":"DonovanJJ"},"content":" return \"OK, I\u0027ve marked this task as not done yet:\\n\"","lastModifiedDate":"2023-09-07"},{"lineNumber":84,"author":{"gitId":"DonovanJJ"},"content":" + tasks.taskToString(choice);","lastModifiedDate":"2023-09-07"},{"lineNumber":85,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":86,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":87,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":88,"author":{"gitId":"DonovanJJ"},"content":" * Prints the display when a user deletes a task.","lastModifiedDate":"2023-08-27"},{"lineNumber":89,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":90,"author":{"gitId":"DonovanJJ"},"content":" * @param removedTask Task that is removed","lastModifiedDate":"2023-08-27"},{"lineNumber":91,"author":{"gitId":"DonovanJJ"},"content":" * @param tasks The list of tasks that the task was removed from","lastModifiedDate":"2023-08-27"},{"lineNumber":92,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":93,"author":{"gitId":"DonovanJJ"},"content":" public String displayDeleteTask(Task removedTask, TaskList tasks) {","lastModifiedDate":"2023-09-07"},{"lineNumber":94,"author":{"gitId":"DonovanJJ"},"content":" return String.format(\"Noted. I\u0027ve removed this task:\\n\"","lastModifiedDate":"2023-09-07"},{"lineNumber":95,"author":{"gitId":"DonovanJJ"},"content":" + \" %s\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":96,"author":{"gitId":"DonovanJJ"},"content":" + \"Now you have %d tasks in the list.\\n\",","lastModifiedDate":"2023-09-02"},{"lineNumber":97,"author":{"gitId":"DonovanJJ"},"content":" removedTask.toString(), tasks.size());","lastModifiedDate":"2023-09-02"},{"lineNumber":98,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":99,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":100,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":101,"author":{"gitId":"DonovanJJ"},"content":" * Prints the display when a user adds a task.","lastModifiedDate":"2023-08-27"},{"lineNumber":102,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":103,"author":{"gitId":"DonovanJJ"},"content":" * @param addedTask Task that is added","lastModifiedDate":"2023-08-27"},{"lineNumber":104,"author":{"gitId":"DonovanJJ"},"content":" * @param tasks The list of tasks that the task was removed from","lastModifiedDate":"2023-08-27"},{"lineNumber":105,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":106,"author":{"gitId":"DonovanJJ"},"content":" public String displayAddTask(Task addedTask, TaskList tasks) {","lastModifiedDate":"2023-09-07"},{"lineNumber":107,"author":{"gitId":"DonovanJJ"},"content":" return String.format(\"Got it. I\u0027ve added this task:\\n\"","lastModifiedDate":"2023-09-07"},{"lineNumber":108,"author":{"gitId":"DonovanJJ"},"content":" + \" %s\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":109,"author":{"gitId":"DonovanJJ"},"content":" + \"Now you have %d tasks in the list.\\n\", addedTask.toString(), tasks.size());","lastModifiedDate":"2023-09-02"},{"lineNumber":110,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":111,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":112,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":113,"author":{"gitId":"DonovanJJ"},"content":" * Prints the Task that is found using the Find function.","lastModifiedDate":"2023-09-02"},{"lineNumber":114,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":115,"author":{"gitId":"DonovanJJ"},"content":" * @param arrList List of tasks to display","lastModifiedDate":"2023-09-02"},{"lineNumber":116,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":117,"author":{"gitId":"DonovanJJ"},"content":" public String displayMatchingTask(ArrayList\u003cTask\u003e arrList) {","lastModifiedDate":"2023-09-07"},{"lineNumber":118,"author":{"gitId":"DonovanJJ"},"content":" int size \u003d arrList.size();","lastModifiedDate":"2023-08-27"},{"lineNumber":119,"author":{"gitId":"DonovanJJ"},"content":" String msg \u003d \"\";","lastModifiedDate":"2023-09-07"},{"lineNumber":120,"author":{"gitId":"DonovanJJ"},"content":" if (size \u003e 0) {","lastModifiedDate":"2023-08-27"},{"lineNumber":121,"author":{"gitId":"DonovanJJ"},"content":" msg +\u003d \"Here are the amtching tasks in your list:\\n\";","lastModifiedDate":"2023-09-07"},{"lineNumber":122,"author":{"gitId":"DonovanJJ"},"content":" for (int i \u003d 1; i \u003c\u003d size; i++) {","lastModifiedDate":"2023-08-27"},{"lineNumber":123,"author":{"gitId":"DonovanJJ"},"content":" msg +\u003d String.format(\"%d.%s\\n\", i, arrList.get(i - 1).toString());","lastModifiedDate":"2023-09-07"},{"lineNumber":124,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":125,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":126,"author":{"gitId":"DonovanJJ"},"content":" return msg;","lastModifiedDate":"2023-09-07"},{"lineNumber":127,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":128,"author":{"gitId":"DonovanJJ"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"DonovanJJ":128}},{"path":"src/main/java/duke/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"DonovanJJ"},"content":"package duke.task;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"DonovanJJ"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"DonovanJJ"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"DonovanJJ"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"DonovanJJ"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"DonovanJJ"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"DonovanJJ"},"content":"/**","lastModifiedDate":"2023-08-22"},{"lineNumber":10,"author":{"gitId":"DonovanJJ"},"content":" * Encapsulates the Deadline Task.","lastModifiedDate":"2023-08-22"},{"lineNumber":11,"author":{"gitId":"DonovanJJ"},"content":" * @author Donovan Chan Jia Jun","lastModifiedDate":"2023-08-22"},{"lineNumber":12,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":13,"author":{"gitId":"DonovanJJ"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"DonovanJJ"},"content":" private String deadline;","lastModifiedDate":"2023-08-20"},{"lineNumber":15,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"DonovanJJ"},"content":" * Constructs a Deadline object.","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"DonovanJJ"},"content":" * @param name String representation for the name of the Deadline Object","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"DonovanJJ"},"content":" * @param deadline String representaiton for the deadline of the Deadline Object","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"DonovanJJ"},"content":" public Deadline(String name, String deadline) {","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"DonovanJJ"},"content":" super(name);","lastModifiedDate":"2023-08-20"},{"lineNumber":24,"author":{"gitId":"DonovanJJ"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"d/M/yyyy HHmm\");","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"DonovanJJ"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"DonovanJJ"},"content":" LocalDateTime dateTime \u003d LocalDateTime.parse(deadline, formatter);","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"DonovanJJ"},"content":" DateTimeFormatter outputFormatter \u003d DateTimeFormatter.ofPattern(\"d MMM yyyy\");","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"DonovanJJ"},"content":" deadline \u003d dateTime.format(outputFormatter);","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"DonovanJJ"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"DonovanJJ"},"content":" this.deadline \u003d deadline;","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"DonovanJJ"},"content":" this.deadline \u003d deadline;","lastModifiedDate":"2023-08-20"},{"lineNumber":33,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":34,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":35,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"DonovanJJ"},"content":" * Constructs a Deadline Object.","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"DonovanJJ"},"content":" * @param name String representation for the name of the Deadline Object","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"DonovanJJ"},"content":" * @param deadline String representaiton for the deadline of the Deadline Object","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"DonovanJJ"},"content":" * @param isComplete Boolean value for when the Deadline task is completed","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"DonovanJJ"},"content":" public Deadline(String name, String deadline, boolean isComplete) {","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"DonovanJJ"},"content":" super(name, isComplete);","lastModifiedDate":"2023-08-26"},{"lineNumber":44,"author":{"gitId":"DonovanJJ"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"d/M/yyyy HHmm\");","lastModifiedDate":"2023-08-26"},{"lineNumber":45,"author":{"gitId":"DonovanJJ"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":46,"author":{"gitId":"DonovanJJ"},"content":" LocalDateTime dateTime \u003d LocalDateTime.parse(deadline, formatter);","lastModifiedDate":"2023-08-26"},{"lineNumber":47,"author":{"gitId":"DonovanJJ"},"content":" DateTimeFormatter outputFormatter \u003d DateTimeFormatter.ofPattern(\"d MMM yyyy\");","lastModifiedDate":"2023-08-26"},{"lineNumber":48,"author":{"gitId":"DonovanJJ"},"content":" deadline \u003d dateTime.format(outputFormatter);","lastModifiedDate":"2023-08-26"},{"lineNumber":49,"author":{"gitId":"DonovanJJ"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":50,"author":{"gitId":"DonovanJJ"},"content":" this.deadline \u003d deadline;","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":52,"author":{"gitId":"DonovanJJ"},"content":" this.deadline \u003d deadline;","lastModifiedDate":"2023-08-26"},{"lineNumber":53,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":54,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":55,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"DonovanJJ"},"content":" * Checks if task and another object are equal.","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"DonovanJJ"},"content":" * @param task Task to be compared against","lastModifiedDate":"2023-08-27"},{"lineNumber":59,"author":{"gitId":"DonovanJJ"},"content":" * @return {@code true} if both tasks are equal","lastModifiedDate":"2023-08-27"},{"lineNumber":60,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"DonovanJJ"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":62,"author":{"gitId":"DonovanJJ"},"content":" public boolean equals(Object task) {","lastModifiedDate":"2023-08-26"},{"lineNumber":63,"author":{"gitId":"DonovanJJ"},"content":" if (this \u003d\u003d task) {","lastModifiedDate":"2023-08-26"},{"lineNumber":64,"author":{"gitId":"DonovanJJ"},"content":" return true;","lastModifiedDate":"2023-08-26"},{"lineNumber":65,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":66,"author":{"gitId":"DonovanJJ"},"content":" if (task instanceof Deadline) {","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"DonovanJJ"},"content":" Deadline temp \u003d (Deadline) task;","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"DonovanJJ"},"content":" return temp.deadline.equals(this.deadline) \u0026\u0026 this.getName().equals(temp.getName());","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"DonovanJJ"},"content":" return false;","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":72,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":73,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":74,"author":{"gitId":"DonovanJJ"},"content":" * Write the Deadline object to the storage file in its format.","lastModifiedDate":"2023-08-27"},{"lineNumber":75,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":76,"author":{"gitId":"DonovanJJ"},"content":" * @param fileWriter Filewriter that writes to a specific output file","lastModifiedDate":"2023-08-27"},{"lineNumber":77,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":78,"author":{"gitId":"DonovanJJ"},"content":" public void writeToFile(FileWriter fileWriter) {","lastModifiedDate":"2023-08-26"},{"lineNumber":79,"author":{"gitId":"DonovanJJ"},"content":" String marking \u003d super.isComplete() ? \"0\" : \"1\";","lastModifiedDate":"2023-08-26"},{"lineNumber":80,"author":{"gitId":"DonovanJJ"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":81,"author":{"gitId":"DonovanJJ"},"content":" fileWriter.write(\"D\" + \"|\" + marking + \"|\" + super.getName() + \"|\" + this.deadline);","lastModifiedDate":"2023-08-26"},{"lineNumber":82,"author":{"gitId":"DonovanJJ"},"content":" fileWriter.write(System.lineSeparator());","lastModifiedDate":"2023-08-26"},{"lineNumber":83,"author":{"gitId":"DonovanJJ"},"content":" fileWriter.flush();","lastModifiedDate":"2023-08-26"},{"lineNumber":84,"author":{"gitId":"DonovanJJ"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":85,"author":{"gitId":"DonovanJJ"},"content":" e.printStackTrace();","lastModifiedDate":"2023-08-26"},{"lineNumber":86,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":87,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":88,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":89,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-08-22"},{"lineNumber":90,"author":{"gitId":"DonovanJJ"},"content":" * Retrieves the String representation of the Deadline object.","lastModifiedDate":"2023-08-22"},{"lineNumber":91,"author":{"gitId":"DonovanJJ"},"content":" * @return String","lastModifiedDate":"2023-08-22"},{"lineNumber":92,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":93,"author":{"gitId":"DonovanJJ"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":94,"author":{"gitId":"DonovanJJ"},"content":" public String toString() {","lastModifiedDate":"2023-08-20"},{"lineNumber":95,"author":{"gitId":"DonovanJJ"},"content":" return String.format(\"[D]%s %s (by: %s)\", super.getMarking(), super.name, this.deadline);","lastModifiedDate":"2023-08-20"},{"lineNumber":96,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":97,"author":{"gitId":"DonovanJJ"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"DonovanJJ":97}},{"path":"src/main/java/duke/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"DonovanJJ"},"content":"package duke.task;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"DonovanJJ"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"DonovanJJ"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"DonovanJJ"},"content":"/**","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"DonovanJJ"},"content":" * Encapsulates the task.Events Task.","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"DonovanJJ"},"content":" * @author Donovan Chan Jia Jun","lastModifiedDate":"2023-08-22"},{"lineNumber":9,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":10,"author":{"gitId":"DonovanJJ"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"DonovanJJ"},"content":" private String from;","lastModifiedDate":"2023-08-20"},{"lineNumber":12,"author":{"gitId":"DonovanJJ"},"content":" private String to;","lastModifiedDate":"2023-08-20"},{"lineNumber":13,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"DonovanJJ"},"content":" * Constructs Event Object.","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"DonovanJJ"},"content":" * @param name String representation for the name of the event","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"DonovanJJ"},"content":" * @param from String representation for when the event starts","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"DonovanJJ"},"content":" * @param to String representation for when the event ends","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"DonovanJJ"},"content":" public Event(String name, String from, String to) {","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"DonovanJJ"},"content":" super(name);","lastModifiedDate":"2023-08-20"},{"lineNumber":23,"author":{"gitId":"DonovanJJ"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-20"},{"lineNumber":24,"author":{"gitId":"DonovanJJ"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-20"},{"lineNumber":25,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":26,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":27,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"DonovanJJ"},"content":" * Constructs Event Object.","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"DonovanJJ"},"content":" * @param name name String representation for the name of the event","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"DonovanJJ"},"content":" * @param from String representation for when the event starts","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"DonovanJJ"},"content":" * @param to String representation for when the event ends","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"DonovanJJ"},"content":" * @param isComplete Boolean value to show if Event has been marked as complete","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"DonovanJJ"},"content":" public Event(String name, String from, String to, boolean isComplete) {","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"DonovanJJ"},"content":" super(name, isComplete);","lastModifiedDate":"2023-08-26"},{"lineNumber":37,"author":{"gitId":"DonovanJJ"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-26"},{"lineNumber":38,"author":{"gitId":"DonovanJJ"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-26"},{"lineNumber":39,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":40,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"DonovanJJ"},"content":" private String getTo() {","lastModifiedDate":"2023-08-26"},{"lineNumber":42,"author":{"gitId":"DonovanJJ"},"content":" return this.to;","lastModifiedDate":"2023-08-26"},{"lineNumber":43,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":44,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":45,"author":{"gitId":"DonovanJJ"},"content":" private String getFrom() {","lastModifiedDate":"2023-08-26"},{"lineNumber":46,"author":{"gitId":"DonovanJJ"},"content":" return this.from;","lastModifiedDate":"2023-08-26"},{"lineNumber":47,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":48,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":49,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"DonovanJJ"},"content":" * Checks if both objects are equal.","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"DonovanJJ"},"content":" * @param task Task object to be compared agianst","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"DonovanJJ"},"content":" * @return {@code true} if both objects are equal","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"DonovanJJ"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":56,"author":{"gitId":"DonovanJJ"},"content":" public boolean equals(Object task) {","lastModifiedDate":"2023-08-26"},{"lineNumber":57,"author":{"gitId":"DonovanJJ"},"content":" if (this \u003d\u003d task) {","lastModifiedDate":"2023-08-26"},{"lineNumber":58,"author":{"gitId":"DonovanJJ"},"content":" return true;","lastModifiedDate":"2023-08-26"},{"lineNumber":59,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":60,"author":{"gitId":"DonovanJJ"},"content":" Event eventTask \u003d (Event) task;","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"DonovanJJ"},"content":" return this.to.equals(eventTask.getTo()) \u0026\u0026 this.getName().equals(eventTask.getName())","lastModifiedDate":"2023-08-26"},{"lineNumber":62,"author":{"gitId":"DonovanJJ"},"content":" \u0026\u0026 this.from.equals(eventTask.getFrom());","lastModifiedDate":"2023-08-26"},{"lineNumber":63,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":64,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":65,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":66,"author":{"gitId":"DonovanJJ"},"content":" * Write the Event object to the storage file in its format.","lastModifiedDate":"2023-08-27"},{"lineNumber":67,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":68,"author":{"gitId":"DonovanJJ"},"content":" * @param fileWriter Filewriter that writes to a specific output file","lastModifiedDate":"2023-08-27"},{"lineNumber":69,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":70,"author":{"gitId":"DonovanJJ"},"content":" public void writeToFile(FileWriter fileWriter) {","lastModifiedDate":"2023-08-26"},{"lineNumber":71,"author":{"gitId":"DonovanJJ"},"content":" String marking \u003d super.isComplete() ? \"0\" : \"1\";","lastModifiedDate":"2023-08-26"},{"lineNumber":72,"author":{"gitId":"DonovanJJ"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":73,"author":{"gitId":"DonovanJJ"},"content":" fileWriter.write(\"E\" + \"|\" + marking + \"|\" + super.getName() + \"|\" + this.from + \"|\" + this.to);","lastModifiedDate":"2023-08-26"},{"lineNumber":74,"author":{"gitId":"DonovanJJ"},"content":" fileWriter.write(System.lineSeparator());","lastModifiedDate":"2023-08-26"},{"lineNumber":75,"author":{"gitId":"DonovanJJ"},"content":" fileWriter.flush();","lastModifiedDate":"2023-08-26"},{"lineNumber":76,"author":{"gitId":"DonovanJJ"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":77,"author":{"gitId":"DonovanJJ"},"content":" e.printStackTrace();","lastModifiedDate":"2023-08-26"},{"lineNumber":78,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":79,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":80,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":81,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-08-22"},{"lineNumber":82,"author":{"gitId":"DonovanJJ"},"content":" * Retrieves the String representation of the task.Events object.","lastModifiedDate":"2023-08-26"},{"lineNumber":83,"author":{"gitId":"DonovanJJ"},"content":" * @return String","lastModifiedDate":"2023-08-22"},{"lineNumber":84,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":85,"author":{"gitId":"DonovanJJ"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":86,"author":{"gitId":"DonovanJJ"},"content":" public String toString() {","lastModifiedDate":"2023-08-20"},{"lineNumber":87,"author":{"gitId":"DonovanJJ"},"content":" return String.format(\"[E]%s %s (from: %s to: %s)\", super.getMarking(), super.name, this.from, this.to);","lastModifiedDate":"2023-08-20"},{"lineNumber":88,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":89,"author":{"gitId":"DonovanJJ"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"DonovanJJ":89}},{"path":"src/main/java/duke/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"DonovanJJ"},"content":"package duke.task;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"DonovanJJ"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"DonovanJJ"},"content":"/**","lastModifiedDate":"2023-08-22"},{"lineNumber":6,"author":{"gitId":"DonovanJJ"},"content":" * Encapsulates the abstract concept of a Task.","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"DonovanJJ"},"content":" * @author Donovan Chan Jia Jun","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":9,"author":{"gitId":"DonovanJJ"},"content":"public abstract class Task {","lastModifiedDate":"2023-08-20"},{"lineNumber":10,"author":{"gitId":"DonovanJJ"},"content":" protected boolean isComplete;","lastModifiedDate":"2023-08-20"},{"lineNumber":11,"author":{"gitId":"DonovanJJ"},"content":" protected String name;","lastModifiedDate":"2023-08-20"},{"lineNumber":12,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"DonovanJJ"},"content":" * Constructs the Task object.","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"DonovanJJ"},"content":" * @param name String representation for the name of the Task","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"DonovanJJ"},"content":" protected Task(String name) {","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"DonovanJJ"},"content":" this.isComplete \u003d false;","lastModifiedDate":"2023-08-20"},{"lineNumber":20,"author":{"gitId":"DonovanJJ"},"content":" this.name \u003d name;","lastModifiedDate":"2023-08-20"},{"lineNumber":21,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":22,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":23,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"DonovanJJ"},"content":" * Constructs the Task object.","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"DonovanJJ"},"content":" * @param name String represetnationf or the name of the Task","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"DonovanJJ"},"content":" * @param isComplete Boolean value representing if the Task has been marked as complete","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"DonovanJJ"},"content":" public Task(String name, boolean isComplete) {","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"DonovanJJ"},"content":" this.isComplete \u003d isComplete;","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"DonovanJJ"},"content":" this.name \u003d name;","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":34,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-08-22"},{"lineNumber":35,"author":{"gitId":"DonovanJJ"},"content":" * Check if task is complete.","lastModifiedDate":"2023-08-22"},{"lineNumber":36,"author":{"gitId":"DonovanJJ"},"content":" * @return boolean. True if completed","lastModifiedDate":"2023-08-22"},{"lineNumber":37,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":38,"author":{"gitId":"DonovanJJ"},"content":" public boolean isComplete() {","lastModifiedDate":"2023-08-20"},{"lineNumber":39,"author":{"gitId":"DonovanJJ"},"content":" return this.isComplete;","lastModifiedDate":"2023-08-20"},{"lineNumber":40,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":41,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":42,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-08-22"},{"lineNumber":43,"author":{"gitId":"DonovanJJ"},"content":" * Marks the task to be completed.","lastModifiedDate":"2023-08-22"},{"lineNumber":44,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":45,"author":{"gitId":"DonovanJJ"},"content":" public void markDone() {","lastModifiedDate":"2023-08-20"},{"lineNumber":46,"author":{"gitId":"DonovanJJ"},"content":" this.isComplete \u003d true;","lastModifiedDate":"2023-08-20"},{"lineNumber":47,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":48,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":49,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-08-22"},{"lineNumber":50,"author":{"gitId":"DonovanJJ"},"content":" * Marks the task to be incomplete.","lastModifiedDate":"2023-08-22"},{"lineNumber":51,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":52,"author":{"gitId":"DonovanJJ"},"content":" public void markUndone() {","lastModifiedDate":"2023-08-20"},{"lineNumber":53,"author":{"gitId":"DonovanJJ"},"content":" this.isComplete \u003d false;","lastModifiedDate":"2023-08-20"},{"lineNumber":54,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":55,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":56,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-08-22"},{"lineNumber":57,"author":{"gitId":"DonovanJJ"},"content":" * Obtains the String representation of whether task is completed.","lastModifiedDate":"2023-08-22"},{"lineNumber":58,"author":{"gitId":"DonovanJJ"},"content":" * @return String. Symbol of completion","lastModifiedDate":"2023-08-22"},{"lineNumber":59,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":60,"author":{"gitId":"DonovanJJ"},"content":" public String getMarking() {","lastModifiedDate":"2023-08-20"},{"lineNumber":61,"author":{"gitId":"DonovanJJ"},"content":" if (isComplete()) {","lastModifiedDate":"2023-08-20"},{"lineNumber":62,"author":{"gitId":"DonovanJJ"},"content":" return \"[X]\";","lastModifiedDate":"2023-08-20"},{"lineNumber":63,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":64,"author":{"gitId":"DonovanJJ"},"content":" return \"[ ]\";","lastModifiedDate":"2023-08-20"},{"lineNumber":65,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":66,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":67,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":68,"author":{"gitId":"DonovanJJ"},"content":" * Returns the name of the Task Object.","lastModifiedDate":"2023-08-27"},{"lineNumber":69,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":70,"author":{"gitId":"DonovanJJ"},"content":" * @return String representation of its name","lastModifiedDate":"2023-08-27"},{"lineNumber":71,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":72,"author":{"gitId":"DonovanJJ"},"content":" public String getName() {","lastModifiedDate":"2023-08-26"},{"lineNumber":73,"author":{"gitId":"DonovanJJ"},"content":" return this.name;","lastModifiedDate":"2023-08-26"},{"lineNumber":74,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":75,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":76,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":77,"author":{"gitId":"DonovanJJ"},"content":" * Checks if given word String is a substring of its name.","lastModifiedDate":"2023-08-27"},{"lineNumber":78,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":79,"author":{"gitId":"DonovanJJ"},"content":" * @param word String repreentingt the name substring they are looking for","lastModifiedDate":"2023-08-27"},{"lineNumber":80,"author":{"gitId":"DonovanJJ"},"content":" * @return {@code true} if word is a substring of the name","lastModifiedDate":"2023-08-27"},{"lineNumber":81,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":82,"author":{"gitId":"DonovanJJ"},"content":" public Boolean containName(String word) {","lastModifiedDate":"2023-08-27"},{"lineNumber":83,"author":{"gitId":"DonovanJJ"},"content":" return this.name.contains(word);","lastModifiedDate":"2023-08-27"},{"lineNumber":84,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":85,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":86,"author":{"gitId":"DonovanJJ"},"content":" abstract public void writeToFile(FileWriter fileWriter);","lastModifiedDate":"2023-08-26"},{"lineNumber":87,"author":{"gitId":"DonovanJJ"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"DonovanJJ":87}},{"path":"src/main/java/duke/task/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"DonovanJJ"},"content":"package duke.task;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"DonovanJJ"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"DonovanJJ"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"DonovanJJ"},"content":"/**","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"DonovanJJ"},"content":" * Emcapsulates a Todo task","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"DonovanJJ"},"content":" * @author Donovan Chan Jia Jun","lastModifiedDate":"2023-08-22"},{"lineNumber":9,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":10,"author":{"gitId":"DonovanJJ"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"DonovanJJ"},"content":" public Todo(String name) {","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"DonovanJJ"},"content":" super(name);","lastModifiedDate":"2023-08-20"},{"lineNumber":13,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":14,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":15,"author":{"gitId":"DonovanJJ"},"content":" public Todo(String name, boolean isComplete) {","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"DonovanJJ"},"content":" super(name, isComplete);","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"DonovanJJ"},"content":" * Checks if both objects are equal.","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"DonovanJJ"},"content":" * @param o Object to be compared against","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"DonovanJJ"},"content":" * @return {@code true} if both objects are equal","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"DonovanJJ"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"DonovanJJ"},"content":" public boolean equals(Object o) {","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"DonovanJJ"},"content":" if (this \u003d\u003d o) {","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"DonovanJJ"},"content":" return true;","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"DonovanJJ"},"content":" Todo task \u003d (Todo) o;","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"DonovanJJ"},"content":" return super.getName().equals(task.getName());","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":34,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"DonovanJJ"},"content":" * Write the Todo object to the storage file in its format.","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"DonovanJJ"},"content":" * @param fileWriter Filewriter that writes to a specific output file","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"DonovanJJ"},"content":" public void writeToFile(FileWriter fileWriter) {","lastModifiedDate":"2023-08-26"},{"lineNumber":40,"author":{"gitId":"DonovanJJ"},"content":" String marking \u003d super.isComplete() ? \"0\" : \"1\";","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"DonovanJJ"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":42,"author":{"gitId":"DonovanJJ"},"content":" fileWriter.write(\"T\" + \"|\" + marking + \"|\" + super.getName());","lastModifiedDate":"2023-08-26"},{"lineNumber":43,"author":{"gitId":"DonovanJJ"},"content":" fileWriter.write(System.lineSeparator());","lastModifiedDate":"2023-08-26"},{"lineNumber":44,"author":{"gitId":"DonovanJJ"},"content":" fileWriter.flush();","lastModifiedDate":"2023-08-26"},{"lineNumber":45,"author":{"gitId":"DonovanJJ"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":46,"author":{"gitId":"DonovanJJ"},"content":" e.printStackTrace();","lastModifiedDate":"2023-08-26"},{"lineNumber":47,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":48,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":49,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":50,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-08-22"},{"lineNumber":51,"author":{"gitId":"DonovanJJ"},"content":" * Retrieves the string representation of the Todo Object.","lastModifiedDate":"2023-08-22"},{"lineNumber":52,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-08-22"},{"lineNumber":53,"author":{"gitId":"DonovanJJ"},"content":" * @return String Represents the Todo","lastModifiedDate":"2023-08-22"},{"lineNumber":54,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":55,"author":{"gitId":"DonovanJJ"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":56,"author":{"gitId":"DonovanJJ"},"content":" public String toString() {","lastModifiedDate":"2023-08-20"},{"lineNumber":57,"author":{"gitId":"DonovanJJ"},"content":" return String.format(\"[T]%s %s\", super.getMarking(), super.name);","lastModifiedDate":"2023-08-20"},{"lineNumber":58,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":59,"author":{"gitId":"DonovanJJ"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"DonovanJJ":59}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"DonovanJJ"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"DonovanJJ"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"DonovanJJ"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"DonovanJJ"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"DonovanJJ"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"DonovanJJ"},"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-03"},{"lineNumber":9,"author":{"gitId":"DonovanJJ"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"DonovanJJ"},"content":" \u003cLabel fx:id\u003d\"dialog\" text\u003d\"Label\" wrapText\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"DonovanJJ"},"content":" \u003cImageView fx:id\u003d\"displayPicture\" fitHeight\u003d\"99.0\" fitWidth\u003d\"99.0\" pickOnBounds\u003d\"true\" preserveRatio\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"DonovanJJ"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"DonovanJJ"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"DonovanJJ"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"DonovanJJ"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"DonovanJJ"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"DonovanJJ":16}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"DonovanJJ"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"DonovanJJ"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"DonovanJJ"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"DonovanJJ"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"DonovanJJ"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"DonovanJJ"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"DonovanJJ"},"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.MainWindow\"\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"DonovanJJ"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"DonovanJJ"},"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\" /\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"DonovanJJ"},"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\" /\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"DonovanJJ"},"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-03"},{"lineNumber":14,"author":{"gitId":"DonovanJJ"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"DonovanJJ"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"552.0\" prefWidth\u003d\"388.0\" /\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"DonovanJJ"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"DonovanJJ"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"DonovanJJ"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"DonovanJJ"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"DonovanJJ":19}},{"path":"src/test/java/duke/DeadlinesTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"DonovanJJ"},"content":"package duke;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"DonovanJJ"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"DonovanJJ"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"DonovanJJ"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"DonovanJJ"},"content":"public class DeadlinesTest {","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"DonovanJJ"},"content":" @Test","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"DonovanJJ"},"content":" public void dummyTest() {","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"DonovanJJ"},"content":" assertEquals(2, 2);","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"DonovanJJ"},"content":" @Test","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"DonovanJJ"},"content":" public void stringRepTest() {","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"DonovanJJ"},"content":" Deadline task \u003d new Deadline(\"Testname1\", \"Tuesday\");","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"DonovanJJ"},"content":" assertEquals(\"[D][ ] Testname1 (by: Tuesday)\", task.toString());","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"DonovanJJ"},"content":" @Test","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"DonovanJJ"},"content":" public void stringRepTestDateTime() {","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"DonovanJJ"},"content":" Deadline task \u003d new Deadline(\"Testname1\", \"2/12/2019 1800\");","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"DonovanJJ"},"content":" assertEquals(\"[D][ ] Testname1 (by: 2 Dec 2019)\", task.toString());","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"DonovanJJ"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"DonovanJJ":26}},{"path":"src/test/java/duke/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"DonovanJJ"},"content":"package duke;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"DonovanJJ"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"DonovanJJ"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"DonovanJJ"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"DonovanJJ"},"content":"import duke.task.Event;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"DonovanJJ"},"content":"import duke.task.Todo;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"DonovanJJ"},"content":"public class ParserTest {","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"DonovanJJ"},"content":" @Test","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"DonovanJJ"},"content":" public void createTaskTestTodoException() {","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"DonovanJJ"},"content":" String input \u003d \"todo\";","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"DonovanJJ"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"DonovanJJ"},"content":" Parser.createTask(input);","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"DonovanJJ"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"DonovanJJ"},"content":" assertEquals(\"OOPS!!! The description of a todo cannot be empty.\", e.getMessage());","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"DonovanJJ"},"content":" @Test","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"DonovanJJ"},"content":" public void createTaskTestTodoValid() {","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"DonovanJJ"},"content":" String input \u003d \"todo read book\";","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"DonovanJJ"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"DonovanJJ"},"content":" assertEquals(new Todo(\"read book\"), Parser.createTask(input));","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"DonovanJJ"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"DonovanJJ"},"content":" assertEquals(\"OOPS!!! The description of a todo cannot be empty.\", e.getMessage());","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"DonovanJJ"},"content":" @Test","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"DonovanJJ"},"content":" public void createTaskTestDeadlineValid() {","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"DonovanJJ"},"content":" String input \u003d \"deadline return book /by Sunday\";","lastModifiedDate":"2023-08-26"},{"lineNumber":35,"author":{"gitId":"DonovanJJ"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":36,"author":{"gitId":"DonovanJJ"},"content":" assertEquals(new Deadline(\"return book\", \"Sunday\"), Parser.createTask(input));","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"DonovanJJ"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":38,"author":{"gitId":"DonovanJJ"},"content":" assertEquals(\"\", e.getMessage());","lastModifiedDate":"2023-08-26"},{"lineNumber":39,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":40,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":42,"author":{"gitId":"DonovanJJ"},"content":" @Test","lastModifiedDate":"2023-08-26"},{"lineNumber":43,"author":{"gitId":"DonovanJJ"},"content":" public void createTaskTestDeadlineInvalidException() {","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"DonovanJJ"},"content":" String input \u003d \"deadline return book Sunday\";","lastModifiedDate":"2023-08-26"},{"lineNumber":45,"author":{"gitId":"DonovanJJ"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":46,"author":{"gitId":"DonovanJJ"},"content":" assertEquals(new Deadline(\"return book Sunday\", \"Sunday\"), Parser.createTask(input));","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"DonovanJJ"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":48,"author":{"gitId":"DonovanJJ"},"content":" assertEquals(\"Invalid deadline task!\", e.getMessage());","lastModifiedDate":"2023-08-26"},{"lineNumber":49,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":50,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":51,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":52,"author":{"gitId":"DonovanJJ"},"content":" @Test","lastModifiedDate":"2023-08-26"},{"lineNumber":53,"author":{"gitId":"DonovanJJ"},"content":" public void createTaskTestDeadlineDateTime() {","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"DonovanJJ"},"content":" String input \u003d \"deadline return book /by 2/12/2019 1800\";","lastModifiedDate":"2023-08-26"},{"lineNumber":55,"author":{"gitId":"DonovanJJ"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":56,"author":{"gitId":"DonovanJJ"},"content":" assertEquals(new Deadline(\"return book\", \"2 Dec 2019\"), Parser.createTask(input));","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"DonovanJJ"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":58,"author":{"gitId":"DonovanJJ"},"content":" assertEquals(\"Invalid deadline task!\", e.getMessage());","lastModifiedDate":"2023-08-26"},{"lineNumber":59,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":60,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":61,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":62,"author":{"gitId":"DonovanJJ"},"content":" @Test","lastModifiedDate":"2023-08-26"},{"lineNumber":63,"author":{"gitId":"DonovanJJ"},"content":" public void createTaskTestEventValid() {","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"DonovanJJ"},"content":" String input \u003d \"event project meeting /from Mon 2pm /to 4pm\";","lastModifiedDate":"2023-08-26"},{"lineNumber":65,"author":{"gitId":"DonovanJJ"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":66,"author":{"gitId":"DonovanJJ"},"content":" assertEquals(new Event(\"project meeting\", \"Mon 2pm\", \"4pm\"), Parser.createTask(input));","lastModifiedDate":"2023-08-27"},{"lineNumber":67,"author":{"gitId":"DonovanJJ"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":68,"author":{"gitId":"DonovanJJ"},"content":" assertEquals(\"OOPS!!! The description of a todo cannot be empty.\", e.getMessage());","lastModifiedDate":"2023-08-26"},{"lineNumber":69,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":70,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":71,"author":{"gitId":"DonovanJJ"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"DonovanJJ":71}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"DonovanJJ"},"content":"todo borrow book","lastModifiedDate":"2023-08-22"},{"lineNumber":2,"author":{"gitId":"DonovanJJ"},"content":"deadline return book /by Sunday","lastModifiedDate":"2023-08-22"},{"lineNumber":3,"author":{"gitId":"DonovanJJ"},"content":"event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2023-08-22"},{"lineNumber":4,"author":{"gitId":"DonovanJJ"},"content":"list","lastModifiedDate":"2023-08-22"},{"lineNumber":5,"author":{"gitId":"DonovanJJ"},"content":"mark 3","lastModifiedDate":"2023-08-22"},{"lineNumber":6,"author":{"gitId":"DonovanJJ"},"content":"mark 1","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"DonovanJJ"},"content":"list","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"DonovanJJ"},"content":"task","lastModifiedDate":"2023-08-22"},{"lineNumber":9,"author":{"gitId":"DonovanJJ"},"content":"todo","lastModifiedDate":"2023-08-22"},{"lineNumber":10,"author":{"gitId":"DonovanJJ"},"content":"delete 3","lastModifiedDate":"2023-08-22"},{"lineNumber":11,"author":{"gitId":"DonovanJJ"},"content":"delete 1","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"DonovanJJ"},"content":"list","lastModifiedDate":"2023-08-22"},{"lineNumber":13,"author":{"gitId":"DonovanJJ"},"content":"bye","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"DonovanJJ":13}},{"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":"DonovanJJ"},"content":"java -classpath ..\\bin duke.Duke \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-08-26"},{"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":{"DonovanJJ":1,"-":20}}] +[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"DonovanJJ"},"content":"# duke.Duke project template","lastModifiedDate":"2023-08-26"},{"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":"DonovanJJ"},"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-08-26"},{"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":{"DonovanJJ":2,"-":22}},{"path":"Users/donovan/Documents/Modules/CS2103T/ip/data/ipOutput.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"DonovanJJ"},"content":"T|0|borrow book","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"DonovanJJ"},"content":"D|0|return book|Sunday","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"DonovanJJ"},"content":"D|0|return book|2 Dec 2019","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"DonovanJJ":3}},{"path":"build.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"plugins {","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"DonovanJJ"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"-"},"content":" id \u0027java\u0027","lastModifiedDate":"2020-05-25"},{"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":"DonovanJJ"},"content":"checkstyle {","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"DonovanJJ"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"DonovanJJ"},"content":"}","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":18,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":19,"author":{"gitId":"DonovanJJ"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"DonovanJJ"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"DonovanJJ"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"DonovanJJ"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"DonovanJJ"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"DonovanJJ"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"DonovanJJ"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"DonovanJJ"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"DonovanJJ"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"DonovanJJ"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"DonovanJJ"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"DonovanJJ"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"DonovanJJ"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","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":"DonovanJJ"},"content":" mainClass.set(\"duke.Launcher\")","lastModifiedDate":"2023-09-06"},{"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":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"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":{"DonovanJJ":20,"-":40}},{"path":"src/main/java/duke/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"DonovanJJ"},"content":"package duke;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"DonovanJJ"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"DonovanJJ"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"DonovanJJ"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"DonovanJJ"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"DonovanJJ"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"DonovanJJ"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"DonovanJJ"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"DonovanJJ"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"DonovanJJ"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"DonovanJJ"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"DonovanJJ"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"DonovanJJ"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"DonovanJJ"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"DonovanJJ"},"content":" * An example of a custom control using FXML.","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"DonovanJJ"},"content":" * This control represents a dialog box consisting of an ImageView to represent the speaker\u0027s face and a label","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"DonovanJJ"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"DonovanJJ"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"DonovanJJ"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"DonovanJJ"},"content":" private Label dialog;","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"DonovanJJ"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"DonovanJJ"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"DonovanJJ"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"DonovanJJ"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"DonovanJJ"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"DonovanJJ"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"DonovanJJ"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"DonovanJJ"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"DonovanJJ"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"DonovanJJ"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"DonovanJJ"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"DonovanJJ"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"DonovanJJ"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"DonovanJJ"},"content":" private void flip() {","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"DonovanJJ"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"DonovanJJ"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"DonovanJJ"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"DonovanJJ"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"DonovanJJ"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"DonovanJJ"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"DonovanJJ"},"content":" public static DialogBox getDukeDialog(String text, Image img) {","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"DonovanJJ"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"DonovanJJ"},"content":" db.flip();","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"DonovanJJ"},"content":" return db;","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"DonovanJJ"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"DonovanJJ":61}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"DonovanJJ"},"content":"package duke;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"DonovanJJ"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"DonovanJJ"},"content":"/**","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"DonovanJJ"},"content":" * Encapsulates the bot application.","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"DonovanJJ"},"content":" * @author Donovan Chan Jia Jun","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"DonovanJJ"},"content":"public class Duke {","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":12,"author":{"gitId":"DonovanJJ"},"content":" private String outputPath;","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"DonovanJJ"},"content":" private Storage data;","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"DonovanJJ"},"content":" private TaskList tasks;","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"DonovanJJ"},"content":" private Ui ui;","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"DonovanJJ"},"content":" * Constructs the bot object.","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"DonovanJJ"},"content":" * @param filePath String represetation of the relative path","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"DonovanJJ"},"content":" public Duke(String filePath) {","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"DonovanJJ"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2023-08-26"},{"lineNumber":24,"author":{"gitId":"DonovanJJ"},"content":" this.data \u003d new Storage(filePath);","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"DonovanJJ"},"content":" this.outputPath \u003d filePath;","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"DonovanJJ"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"DonovanJJ"},"content":" this.tasks \u003d new TaskList(this.data.loadOutputFile());","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"DonovanJJ"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"DonovanJJ"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":34,"author":{"gitId":"DonovanJJ"},"content":" * You should have your own function to generate a response to user input.","lastModifiedDate":"2023-09-07"},{"lineNumber":35,"author":{"gitId":"DonovanJJ"},"content":" * Replace this stub with your completed method.","lastModifiedDate":"2023-09-07"},{"lineNumber":36,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":37,"author":{"gitId":"DonovanJJ"},"content":" public String getResponse(String input) {","lastModifiedDate":"2023-09-07"},{"lineNumber":38,"author":{"gitId":"DonovanJJ"},"content":" if (Parser.parsable(input)) {","lastModifiedDate":"2023-09-07"},{"lineNumber":39,"author":{"gitId":"DonovanJJ"},"content":" if (this.outputPath.equals(\"\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"DonovanJJ"},"content":" this.ui.emptyFilePath();","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":42,"author":{"gitId":"DonovanJJ"},"content":" return Parser.parse(input, ui, this.tasks, this.data);","lastModifiedDate":"2023-09-07"},{"lineNumber":43,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":44,"author":{"gitId":"DonovanJJ"},"content":" return this.ui.exit();","lastModifiedDate":"2023-09-07"},{"lineNumber":45,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":46,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"DonovanJJ"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"DonovanJJ":47}},{"path":"src/main/java/duke/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"DonovanJJ"},"content":"package duke;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"DonovanJJ"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"DonovanJJ"},"content":"/**","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"DonovanJJ"},"content":" * Class that encapsulates the starting point of the program.","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"DonovanJJ"},"content":"public class Launcher {","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"DonovanJJ"},"content":" * Launches the chat application.","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"DonovanJJ"},"content":" * @param args","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"DonovanJJ"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"DonovanJJ"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"DonovanJJ"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"DonovanJJ":17}},{"path":"src/main/java/duke/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"DonovanJJ"},"content":"package duke;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"DonovanJJ"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"DonovanJJ"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"DonovanJJ"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"DonovanJJ"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"DonovanJJ"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"DonovanJJ"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"DonovanJJ"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"DonovanJJ"},"content":" * A GUI for Duke using FXML.","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"DonovanJJ"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"DonovanJJ"},"content":" private Duke duke \u003d new Duke(\"./ipOutput.txt\");","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"DonovanJJ"},"content":" * Starts up the application.","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"DonovanJJ"},"content":" * @param stage the primary stage for this application, onto which the application scene can be set.","lastModifiedDate":"2023-09-07"},{"lineNumber":22,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"DonovanJJ"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"DonovanJJ"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"DonovanJJ"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"DonovanJJ"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"DonovanJJ"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"DonovanJJ"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"DonovanJJ"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"DonovanJJ"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setDuke(duke);","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"DonovanJJ"},"content":" stage.show();","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"DonovanJJ"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"DonovanJJ"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"DonovanJJ"},"content":" } catch (IllegalStateException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"DonovanJJ"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"DonovanJJ"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"DonovanJJ":38}},{"path":"src/main/java/duke/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"DonovanJJ"},"content":"package duke;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"DonovanJJ"},"content":"import javafx.animation.PauseTransition;","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"DonovanJJ"},"content":"import javafx.application.Platform;","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"DonovanJJ"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"DonovanJJ"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"DonovanJJ"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"DonovanJJ"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"DonovanJJ"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"DonovanJJ"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"DonovanJJ"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"DonovanJJ"},"content":"import javafx.util.Duration;","lastModifiedDate":"2023-09-07"},{"lineNumber":13,"author":{"gitId":"DonovanJJ"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"DonovanJJ"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"DonovanJJ"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"DonovanJJ"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"DonovanJJ"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"DonovanJJ"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"DonovanJJ"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"DonovanJJ"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"DonovanJJ"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"DonovanJJ"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"DonovanJJ"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"DonovanJJ"},"content":" private Duke duke;","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"DonovanJJ"},"content":" private Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/babyYoda.jpeg\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"DonovanJJ"},"content":" private Image dukeImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/yoda.jpeg\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"DonovanJJ"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"DonovanJJ"},"content":" public void initialize() {","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"DonovanJJ"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"DonovanJJ"},"content":" public void setDuke(Duke d) {","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"DonovanJJ"},"content":" duke \u003d d;","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"DonovanJJ"},"content":" * Creates two dialog boxes, one echoing user input and the other containing Duke\u0027s reply and then appends them to","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"DonovanJJ"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"DonovanJJ"},"content":" @FXML","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"DonovanJJ"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"DonovanJJ"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"DonovanJJ"},"content":" String response \u003d duke.getResponse(input);","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"DonovanJJ"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"DonovanJJ"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"DonovanJJ"},"content":" DialogBox.getDukeDialog(response, dukeImage)","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"DonovanJJ"},"content":" );","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"DonovanJJ"},"content":" userInput.clear();","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"DonovanJJ"},"content":" if (response.equals(\"Bye. Hope to see you again soon!\")) {","lastModifiedDate":"2023-09-07"},{"lineNumber":55,"author":{"gitId":"DonovanJJ"},"content":" PauseTransition delay \u003d new PauseTransition(Duration.seconds(2));","lastModifiedDate":"2023-09-07"},{"lineNumber":56,"author":{"gitId":"DonovanJJ"},"content":" delay.setOnFinished(event -\u003e Platform.exit());","lastModifiedDate":"2023-09-07"},{"lineNumber":57,"author":{"gitId":"DonovanJJ"},"content":" delay.play();","lastModifiedDate":"2023-09-07"},{"lineNumber":58,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":59,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"DonovanJJ"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"DonovanJJ":60}},{"path":"src/main/java/duke/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"DonovanJJ"},"content":"package duke;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"DonovanJJ"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"DonovanJJ"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"DonovanJJ"},"content":"import duke.task.Event;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"DonovanJJ"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"DonovanJJ"},"content":"import duke.task.Todo;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"DonovanJJ"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"DonovanJJ"},"content":" * Encapsulates the logic of analysing the user\u0027s String input.","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"DonovanJJ"},"content":" * Decides on what should be done next based on it","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"DonovanJJ"},"content":" * @author Donovan Chan Jia Jun","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"DonovanJJ"},"content":"public class Parser {","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"DonovanJJ"},"content":" * Checks if input string is parsable or not.","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"DonovanJJ"},"content":" * @param input The input string to check","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"DonovanJJ"},"content":" * @return {@code true} if the input string is not equal to \"bye\"","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"DonovanJJ"},"content":" public static boolean parsable(String input) {","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"DonovanJJ"},"content":" return !input.equals(\"bye\");","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"DonovanJJ"},"content":" * Creates the tasks based on String input.","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"DonovanJJ"},"content":" * @param input String input by user","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"DonovanJJ"},"content":" * @return A task object of the appropriate subclass (Deadlines, Events, Todos)","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"DonovanJJ"},"content":" * @throws Exception If the input string is not valid","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":35,"author":{"gitId":"DonovanJJ"},"content":" public static Task createTask(String input) throws Exception {","lastModifiedDate":"2023-08-26"},{"lineNumber":36,"author":{"gitId":"DonovanJJ"},"content":" // Splits based on white spaces, identifies based on the relevant /...","lastModifiedDate":"2023-08-26"},{"lineNumber":37,"author":{"gitId":"DonovanJJ"},"content":" String[] arrStrings \u003d input.split(\"\\\\s+\");","lastModifiedDate":"2023-08-26"},{"lineNumber":38,"author":{"gitId":"DonovanJJ"},"content":" String command \u003d arrStrings[0];","lastModifiedDate":"2023-08-26"},{"lineNumber":39,"author":{"gitId":"DonovanJJ"},"content":" String name \u003d \"\";","lastModifiedDate":"2023-08-26"},{"lineNumber":40,"author":{"gitId":"DonovanJJ"},"content":" if (command.equals(\"deadline\")) {","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"DonovanJJ"},"content":" String deadline \u003d \"\";","lastModifiedDate":"2023-08-26"},{"lineNumber":42,"author":{"gitId":"DonovanJJ"},"content":" boolean completedName \u003d false;","lastModifiedDate":"2023-08-26"},{"lineNumber":43,"author":{"gitId":"DonovanJJ"},"content":" for (int i \u003d 1; i \u003c arrStrings.length; i++) {","lastModifiedDate":"2023-08-26"},{"lineNumber":44,"author":{"gitId":"DonovanJJ"},"content":" if (arrStrings[i].equals(\"/by\")) {","lastModifiedDate":"2023-08-26"},{"lineNumber":45,"author":{"gitId":"DonovanJJ"},"content":" completedName \u003d true;","lastModifiedDate":"2023-08-26"},{"lineNumber":46,"author":{"gitId":"DonovanJJ"},"content":" continue;","lastModifiedDate":"2023-08-26"},{"lineNumber":47,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":48,"author":{"gitId":"DonovanJJ"},"content":" if (completedName) {","lastModifiedDate":"2023-08-26"},{"lineNumber":49,"author":{"gitId":"DonovanJJ"},"content":" deadline +\u003d arrStrings[i] + \" \";","lastModifiedDate":"2023-08-26"},{"lineNumber":50,"author":{"gitId":"DonovanJJ"},"content":" } else {","lastModifiedDate":"2023-08-26"},{"lineNumber":51,"author":{"gitId":"DonovanJJ"},"content":" name +\u003d arrStrings[i] + \" \";","lastModifiedDate":"2023-08-26"},{"lineNumber":52,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":53,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":54,"author":{"gitId":"DonovanJJ"},"content":" if (!completedName) {","lastModifiedDate":"2023-08-26"},{"lineNumber":55,"author":{"gitId":"DonovanJJ"},"content":" throw new Exception(\"Invalid deadline task!\");","lastModifiedDate":"2023-08-26"},{"lineNumber":56,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":57,"author":{"gitId":"DonovanJJ"},"content":" return new Deadline(name.substring(0, name.length() - 1), deadline.substring(0, deadline.length() - 1));","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"DonovanJJ"},"content":" } else if (command.equals(\"todo\")) {","lastModifiedDate":"2023-08-26"},{"lineNumber":59,"author":{"gitId":"DonovanJJ"},"content":" if (arrStrings.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-26"},{"lineNumber":60,"author":{"gitId":"DonovanJJ"},"content":" throw new Exception(\"OOPS!!! The description of a todo cannot be empty.\");","lastModifiedDate":"2023-08-26"},{"lineNumber":61,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":62,"author":{"gitId":"DonovanJJ"},"content":" for (int i \u003d 1; i \u003c arrStrings.length; i++) {","lastModifiedDate":"2023-08-26"},{"lineNumber":63,"author":{"gitId":"DonovanJJ"},"content":" name +\u003d arrStrings[i] + \" \";","lastModifiedDate":"2023-08-26"},{"lineNumber":64,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":65,"author":{"gitId":"DonovanJJ"},"content":" return new Todo(name.substring(0, name.length() - 1));","lastModifiedDate":"2023-08-27"},{"lineNumber":66,"author":{"gitId":"DonovanJJ"},"content":" } else if (command.equals(\"event\")) {","lastModifiedDate":"2023-08-26"},{"lineNumber":67,"author":{"gitId":"DonovanJJ"},"content":" String from \u003d \"\";","lastModifiedDate":"2023-08-26"},{"lineNumber":68,"author":{"gitId":"DonovanJJ"},"content":" String to \u003d \"\";","lastModifiedDate":"2023-08-26"},{"lineNumber":69,"author":{"gitId":"DonovanJJ"},"content":" boolean completedName \u003d false;","lastModifiedDate":"2023-08-26"},{"lineNumber":70,"author":{"gitId":"DonovanJJ"},"content":" boolean completedFrom \u003d false;","lastModifiedDate":"2023-08-26"},{"lineNumber":71,"author":{"gitId":"DonovanJJ"},"content":" for (int i \u003d 1; i \u003c arrStrings.length; i++) {","lastModifiedDate":"2023-08-26"},{"lineNumber":72,"author":{"gitId":"DonovanJJ"},"content":" if (arrStrings[i].equals(\"/from\")) {","lastModifiedDate":"2023-08-26"},{"lineNumber":73,"author":{"gitId":"DonovanJJ"},"content":" completedName \u003d true;","lastModifiedDate":"2023-08-26"},{"lineNumber":74,"author":{"gitId":"DonovanJJ"},"content":" } else if (arrStrings[i].equals(\"/to\")) {","lastModifiedDate":"2023-08-26"},{"lineNumber":75,"author":{"gitId":"DonovanJJ"},"content":" completedFrom \u003d true;","lastModifiedDate":"2023-08-26"},{"lineNumber":76,"author":{"gitId":"DonovanJJ"},"content":" } else if (!completedFrom \u0026\u0026 completedName) {","lastModifiedDate":"2023-08-26"},{"lineNumber":77,"author":{"gitId":"DonovanJJ"},"content":" from +\u003d arrStrings[i] + \" \";","lastModifiedDate":"2023-08-26"},{"lineNumber":78,"author":{"gitId":"DonovanJJ"},"content":" } else if (completedFrom \u0026\u0026 completedName) {","lastModifiedDate":"2023-08-26"},{"lineNumber":79,"author":{"gitId":"DonovanJJ"},"content":" to +\u003d arrStrings[i] + \" \";","lastModifiedDate":"2023-08-26"},{"lineNumber":80,"author":{"gitId":"DonovanJJ"},"content":" } else {","lastModifiedDate":"2023-08-26"},{"lineNumber":81,"author":{"gitId":"DonovanJJ"},"content":" name +\u003d arrStrings[i] + \" \";","lastModifiedDate":"2023-08-26"},{"lineNumber":82,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":83,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":84,"author":{"gitId":"DonovanJJ"},"content":" return new Event(name.substring(0, name.length() - 1), from.substring(0, from.length() - 1),","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"DonovanJJ"},"content":" to.substring(0, to.length() - 1));","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"DonovanJJ"},"content":" } else {","lastModifiedDate":"2023-08-26"},{"lineNumber":87,"author":{"gitId":"DonovanJJ"},"content":" throw new Exception(\"OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-08-26"},{"lineNumber":88,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":89,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":90,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":91,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":92,"author":{"gitId":"DonovanJJ"},"content":" * Parse the input string by splitting based on whtiespaces.","lastModifiedDate":"2023-08-27"},{"lineNumber":93,"author":{"gitId":"DonovanJJ"},"content":" * Sorts the string based on its command","lastModifiedDate":"2023-08-27"},{"lineNumber":94,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":95,"author":{"gitId":"DonovanJJ"},"content":" * @param input The input string representing the task given by user","lastModifiedDate":"2023-08-27"},{"lineNumber":96,"author":{"gitId":"DonovanJJ"},"content":" * @param ui The user interface responsible for sending outputs to the screen","lastModifiedDate":"2023-08-27"},{"lineNumber":97,"author":{"gitId":"DonovanJJ"},"content":" * @param taskList ArrayList that stores the tasks loaded from memory","lastModifiedDate":"2023-08-27"},{"lineNumber":98,"author":{"gitId":"DonovanJJ"},"content":" * @param storage Storage that can be written to or read from","lastModifiedDate":"2023-08-27"},{"lineNumber":99,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":100,"author":{"gitId":"DonovanJJ"},"content":" public static String parse(String input, Ui ui, TaskList taskList, Storage storage) {","lastModifiedDate":"2023-09-07"},{"lineNumber":101,"author":{"gitId":"DonovanJJ"},"content":" // Splits the input based on whitespaces.","lastModifiedDate":"2023-08-26"},{"lineNumber":102,"author":{"gitId":"DonovanJJ"},"content":" String command \u003d input.split(\"\\\\s+\")[0];","lastModifiedDate":"2023-08-26"},{"lineNumber":103,"author":{"gitId":"DonovanJJ"},"content":" String message \u003d \"\";","lastModifiedDate":"2023-09-07"},{"lineNumber":104,"author":{"gitId":"DonovanJJ"},"content":" int choice \u003d -1;","lastModifiedDate":"2023-08-26"},{"lineNumber":105,"author":{"gitId":"DonovanJJ"},"content":" switch (command) {","lastModifiedDate":"2023-08-26"},{"lineNumber":106,"author":{"gitId":"DonovanJJ"},"content":" case \"list\":","lastModifiedDate":"2023-08-26"},{"lineNumber":107,"author":{"gitId":"DonovanJJ"},"content":" message \u003d ui.listTask(taskList);","lastModifiedDate":"2023-09-07"},{"lineNumber":108,"author":{"gitId":"DonovanJJ"},"content":" break;","lastModifiedDate":"2023-08-26"},{"lineNumber":109,"author":{"gitId":"DonovanJJ"},"content":" case \"mark\":","lastModifiedDate":"2023-08-26"},{"lineNumber":110,"author":{"gitId":"DonovanJJ"},"content":" choice \u003d Integer.parseInt(input.split(\"\\\\s+\")[1]);","lastModifiedDate":"2023-08-26"},{"lineNumber":111,"author":{"gitId":"DonovanJJ"},"content":" taskList.mark(choice);","lastModifiedDate":"2023-08-26"},{"lineNumber":112,"author":{"gitId":"DonovanJJ"},"content":" message \u003d ui.displayMarkTask(taskList, choice);","lastModifiedDate":"2023-09-07"},{"lineNumber":113,"author":{"gitId":"DonovanJJ"},"content":" break;","lastModifiedDate":"2023-08-26"},{"lineNumber":114,"author":{"gitId":"DonovanJJ"},"content":" case \"unmark\":","lastModifiedDate":"2023-08-26"},{"lineNumber":115,"author":{"gitId":"DonovanJJ"},"content":" choice \u003d Integer.parseInt(input.split(\"\\\\s+\")[1]);","lastModifiedDate":"2023-08-26"},{"lineNumber":116,"author":{"gitId":"DonovanJJ"},"content":" taskList.unmark(choice);","lastModifiedDate":"2023-08-26"},{"lineNumber":117,"author":{"gitId":"DonovanJJ"},"content":" message \u003d ui.displayUnmarkTask(taskList, choice);","lastModifiedDate":"2023-09-07"},{"lineNumber":118,"author":{"gitId":"DonovanJJ"},"content":" break;","lastModifiedDate":"2023-08-26"},{"lineNumber":119,"author":{"gitId":"DonovanJJ"},"content":" case \"delete\":","lastModifiedDate":"2023-08-26"},{"lineNumber":120,"author":{"gitId":"DonovanJJ"},"content":" choice \u003d Integer.parseInt(input.split(\"\\\\s+\")[1]);","lastModifiedDate":"2023-08-26"},{"lineNumber":121,"author":{"gitId":"DonovanJJ"},"content":" Task removedTask \u003d taskList.delete(choice);","lastModifiedDate":"2023-08-26"},{"lineNumber":122,"author":{"gitId":"DonovanJJ"},"content":" message \u003d ui.displayDeleteTask(removedTask, taskList);","lastModifiedDate":"2023-09-07"},{"lineNumber":123,"author":{"gitId":"DonovanJJ"},"content":" break;","lastModifiedDate":"2023-08-26"},{"lineNumber":124,"author":{"gitId":"DonovanJJ"},"content":" case \"find\":","lastModifiedDate":"2023-08-27"},{"lineNumber":125,"author":{"gitId":"DonovanJJ"},"content":" String word \u003d input.split(\"\\\\s+\")[1];","lastModifiedDate":"2023-08-27"},{"lineNumber":126,"author":{"gitId":"DonovanJJ"},"content":" ArrayList\u003cTask\u003e matchingList \u003d taskList.find(word);","lastModifiedDate":"2023-08-27"},{"lineNumber":127,"author":{"gitId":"DonovanJJ"},"content":" message \u003d ui.displayMatchingTask(matchingList);","lastModifiedDate":"2023-09-07"},{"lineNumber":128,"author":{"gitId":"DonovanJJ"},"content":" break;","lastModifiedDate":"2023-08-27"},{"lineNumber":129,"author":{"gitId":"DonovanJJ"},"content":" default:","lastModifiedDate":"2023-08-26"},{"lineNumber":130,"author":{"gitId":"DonovanJJ"},"content":" Task task \u003d null;","lastModifiedDate":"2023-08-26"},{"lineNumber":131,"author":{"gitId":"DonovanJJ"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":132,"author":{"gitId":"DonovanJJ"},"content":" task \u003d createTask(input);","lastModifiedDate":"2023-08-26"},{"lineNumber":133,"author":{"gitId":"DonovanJJ"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":134,"author":{"gitId":"DonovanJJ"},"content":" message \u003d ui.showExceptionError(e);","lastModifiedDate":"2023-09-07"},{"lineNumber":135,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":136,"author":{"gitId":"DonovanJJ"},"content":" if (task !\u003d null) {","lastModifiedDate":"2023-08-26"},{"lineNumber":137,"author":{"gitId":"DonovanJJ"},"content":" taskList.add(task);","lastModifiedDate":"2023-08-26"},{"lineNumber":138,"author":{"gitId":"DonovanJJ"},"content":" message \u003d ui.displayAddTask(task, taskList);","lastModifiedDate":"2023-09-07"},{"lineNumber":139,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":140,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":141,"author":{"gitId":"DonovanJJ"},"content":" storage.updateTasks(taskList);","lastModifiedDate":"2023-08-26"},{"lineNumber":142,"author":{"gitId":"DonovanJJ"},"content":" return message;","lastModifiedDate":"2023-09-07"},{"lineNumber":143,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":144,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":145,"author":{"gitId":"DonovanJJ"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"DonovanJJ":145}},{"path":"src/main/java/duke/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"DonovanJJ"},"content":"package duke;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"DonovanJJ"},"content":"import java.io.File;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"DonovanJJ"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"DonovanJJ"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"DonovanJJ"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"DonovanJJ"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"DonovanJJ"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"DonovanJJ"},"content":"import java.util.function.Consumer;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"DonovanJJ"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"DonovanJJ"},"content":"import duke.task.Event;","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"DonovanJJ"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"DonovanJJ"},"content":"import duke.task.Todo;","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"DonovanJJ"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"DonovanJJ"},"content":" * Encapsulates the Persistent data storage of the application.","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"DonovanJJ"},"content":" * Data is stored in a text file for convenience","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"DonovanJJ"},"content":" * @author Donovan Chan Jia Jun","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"DonovanJJ"},"content":"public class Storage {","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":24,"author":{"gitId":"DonovanJJ"},"content":" private String outputPath;","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"DonovanJJ"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"DonovanJJ"},"content":" this.outputPath \u003d filePath;","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"DonovanJJ"},"content":" * Creates the output file if does not exist. Also creates directories that are missing.","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"DonovanJJ"},"content":" * @return File filePointer to output file","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":34,"author":{"gitId":"DonovanJJ"},"content":" public File createOutputFile() {","lastModifiedDate":"2023-08-26"},{"lineNumber":35,"author":{"gitId":"DonovanJJ"},"content":" File filePointer \u003d new File(this.outputPath);","lastModifiedDate":"2023-08-26"},{"lineNumber":36,"author":{"gitId":"DonovanJJ"},"content":" if (!filePointer.exists()) {","lastModifiedDate":"2023-08-26"},{"lineNumber":37,"author":{"gitId":"DonovanJJ"},"content":" File directory \u003d new File(new File(this.outputPath).getParent());","lastModifiedDate":"2023-08-26"},{"lineNumber":38,"author":{"gitId":"DonovanJJ"},"content":" // create directory if it doesn\u0027t exist","lastModifiedDate":"2023-08-26"},{"lineNumber":39,"author":{"gitId":"DonovanJJ"},"content":" if (!directory.exists()) {","lastModifiedDate":"2023-08-26"},{"lineNumber":40,"author":{"gitId":"DonovanJJ"},"content":" boolean result \u003d directory.mkdirs();","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":42,"author":{"gitId":"DonovanJJ"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":43,"author":{"gitId":"DonovanJJ"},"content":" // create file in that directory","lastModifiedDate":"2023-08-26"},{"lineNumber":44,"author":{"gitId":"DonovanJJ"},"content":" if (!filePointer.createNewFile()) {","lastModifiedDate":"2023-08-26"},{"lineNumber":45,"author":{"gitId":"DonovanJJ"},"content":" throw new FileNotFoundException();","lastModifiedDate":"2023-08-26"},{"lineNumber":46,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":47,"author":{"gitId":"DonovanJJ"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":48,"author":{"gitId":"DonovanJJ"},"content":" e.printStackTrace();","lastModifiedDate":"2023-08-26"},{"lineNumber":49,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":50,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":51,"author":{"gitId":"DonovanJJ"},"content":" return filePointer;","lastModifiedDate":"2023-08-26"},{"lineNumber":52,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":53,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":54,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"DonovanJJ"},"content":" * Loads the data from the Storage memory to the temporary Tasklist.","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"DonovanJJ"},"content":" * @return ArrayList Contains the list of Task objects loaded from memory","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"DonovanJJ"},"content":" * @throws FileNotFoundException If no file is found at the filepath specified","lastModifiedDate":"2023-08-27"},{"lineNumber":59,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":60,"author":{"gitId":"DonovanJJ"},"content":" public ArrayList\u003cTask\u003e loadOutputFile() throws FileNotFoundException {","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"DonovanJJ"},"content":" File filePointer \u003d this.createOutputFile();","lastModifiedDate":"2023-08-26"},{"lineNumber":62,"author":{"gitId":"DonovanJJ"},"content":" Scanner storageScanner \u003d new Scanner(filePointer);","lastModifiedDate":"2023-08-26"},{"lineNumber":63,"author":{"gitId":"DonovanJJ"},"content":" ArrayList\u003cTask\u003e arrList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-26"},{"lineNumber":64,"author":{"gitId":"DonovanJJ"},"content":" while (storageScanner.hasNext()) {","lastModifiedDate":"2023-08-26"},{"lineNumber":65,"author":{"gitId":"DonovanJJ"},"content":" String item \u003d storageScanner.nextLine();","lastModifiedDate":"2023-08-26"},{"lineNumber":66,"author":{"gitId":"DonovanJJ"},"content":" if (item !\u003d \"\") {","lastModifiedDate":"2023-08-26"},{"lineNumber":67,"author":{"gitId":"DonovanJJ"},"content":" // process the item","lastModifiedDate":"2023-08-26"},{"lineNumber":68,"author":{"gitId":"DonovanJJ"},"content":" // T|1|read book","lastModifiedDate":"2023-08-26"},{"lineNumber":69,"author":{"gitId":"DonovanJJ"},"content":" String[] itemParts \u003d item.split(\"\\\\|\");","lastModifiedDate":"2023-08-26"},{"lineNumber":70,"author":{"gitId":"DonovanJJ"},"content":" boolean itemComplete \u003d itemParts[1].equals(\"0\");","lastModifiedDate":"2023-08-26"},{"lineNumber":71,"author":{"gitId":"DonovanJJ"},"content":" String name \u003d itemParts[2];","lastModifiedDate":"2023-08-26"},{"lineNumber":72,"author":{"gitId":"DonovanJJ"},"content":" switch (itemParts[0]) {","lastModifiedDate":"2023-08-26"},{"lineNumber":73,"author":{"gitId":"DonovanJJ"},"content":" case \"T\":","lastModifiedDate":"2023-08-26"},{"lineNumber":74,"author":{"gitId":"DonovanJJ"},"content":" arrList.add(new Todo(name, itemComplete));","lastModifiedDate":"2023-08-27"},{"lineNumber":75,"author":{"gitId":"DonovanJJ"},"content":" break;","lastModifiedDate":"2023-08-26"},{"lineNumber":76,"author":{"gitId":"DonovanJJ"},"content":" case \"D\":","lastModifiedDate":"2023-08-26"},{"lineNumber":77,"author":{"gitId":"DonovanJJ"},"content":" String deadline \u003d itemParts[3];","lastModifiedDate":"2023-08-26"},{"lineNumber":78,"author":{"gitId":"DonovanJJ"},"content":" arrList.add(new Deadline(name, deadline, itemComplete));","lastModifiedDate":"2023-08-27"},{"lineNumber":79,"author":{"gitId":"DonovanJJ"},"content":" break;","lastModifiedDate":"2023-08-26"},{"lineNumber":80,"author":{"gitId":"DonovanJJ"},"content":" case \"E\":","lastModifiedDate":"2023-08-26"},{"lineNumber":81,"author":{"gitId":"DonovanJJ"},"content":" System.out.println(item);","lastModifiedDate":"2023-08-26"},{"lineNumber":82,"author":{"gitId":"DonovanJJ"},"content":" String from \u003d itemParts[3];","lastModifiedDate":"2023-08-26"},{"lineNumber":83,"author":{"gitId":"DonovanJJ"},"content":" String to \u003d itemParts[4];","lastModifiedDate":"2023-08-26"},{"lineNumber":84,"author":{"gitId":"DonovanJJ"},"content":" arrList.add(new Event(name, from, to, itemComplete));","lastModifiedDate":"2023-08-27"},{"lineNumber":85,"author":{"gitId":"DonovanJJ"},"content":" break;","lastModifiedDate":"2023-08-26"},{"lineNumber":86,"author":{"gitId":"DonovanJJ"},"content":" default:","lastModifiedDate":"2023-08-26"},{"lineNumber":87,"author":{"gitId":"DonovanJJ"},"content":" System.out.println(\"Error when reading file\");","lastModifiedDate":"2023-08-26"},{"lineNumber":88,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":89,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":90,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":91,"author":{"gitId":"DonovanJJ"},"content":" storageScanner.close();","lastModifiedDate":"2023-08-26"},{"lineNumber":92,"author":{"gitId":"DonovanJJ"},"content":" return arrList;","lastModifiedDate":"2023-08-26"},{"lineNumber":93,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":94,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":95,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":96,"author":{"gitId":"DonovanJJ"},"content":" * Writes the data from TaskList to permanent storage at the file output location.","lastModifiedDate":"2023-08-27"},{"lineNumber":97,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":98,"author":{"gitId":"DonovanJJ"},"content":" * @param taskList TaskList object that encapsulates the arraylist data structure, contains the updated tasks","lastModifiedDate":"2023-08-27"},{"lineNumber":99,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":100,"author":{"gitId":"DonovanJJ"},"content":" public void updateTasks(TaskList taskList) {","lastModifiedDate":"2023-08-26"},{"lineNumber":101,"author":{"gitId":"DonovanJJ"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":102,"author":{"gitId":"DonovanJJ"},"content":" FileWriter writer \u003d new FileWriter(outputPath, false);","lastModifiedDate":"2023-08-26"},{"lineNumber":103,"author":{"gitId":"DonovanJJ"},"content":" Consumer\u003cTask\u003e storeTask \u003d task -\u003e task.writeToFile(writer);","lastModifiedDate":"2023-08-26"},{"lineNumber":104,"author":{"gitId":"DonovanJJ"},"content":" taskList.getArrList().forEach(storeTask);","lastModifiedDate":"2023-08-26"},{"lineNumber":105,"author":{"gitId":"DonovanJJ"},"content":" writer.close();","lastModifiedDate":"2023-08-26"},{"lineNumber":106,"author":{"gitId":"DonovanJJ"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":107,"author":{"gitId":"DonovanJJ"},"content":" e.printStackTrace();","lastModifiedDate":"2023-08-26"},{"lineNumber":108,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":109,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":110,"author":{"gitId":"DonovanJJ"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"DonovanJJ":110}},{"path":"src/main/java/duke/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"DonovanJJ"},"content":"package duke;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"DonovanJJ"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"DonovanJJ"},"content":"import java.util.function.Predicate;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"DonovanJJ"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"DonovanJJ"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"DonovanJJ"},"content":" * Represents the temporary storage used when running the application.","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"DonovanJJ"},"content":" * @author Donovan Chan Jia Jun","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"DonovanJJ"},"content":"public class TaskList {","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"DonovanJJ"},"content":" private ArrayList\u003cTask\u003e arrList;","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"DonovanJJ"},"content":" public TaskList() {","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"DonovanJJ"},"content":" this.arrList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"DonovanJJ"},"content":" * Constructs TaskList instance to store list of Task.","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"DonovanJJ"},"content":" * @param arrList ArrayList containing Tasks of the user","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"DonovanJJ"},"content":" public TaskList(ArrayList\u003cTask\u003e arrList) {","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"DonovanJJ"},"content":" this.arrList \u003d arrList;","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"DonovanJJ"},"content":" * Returns the encapsulated ArrayList.","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"DonovanJJ"},"content":" * @return ArrayList Containing the Task objects","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"DonovanJJ"},"content":" public ArrayList\u003cTask\u003e getArrList() {","lastModifiedDate":"2023-08-26"},{"lineNumber":36,"author":{"gitId":"DonovanJJ"},"content":" return this.arrList;","lastModifiedDate":"2023-08-26"},{"lineNumber":37,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":38,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":39,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"DonovanJJ"},"content":" * Returnst he size of the list of tasks.","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"DonovanJJ"},"content":" * @return int Size of list of tasks from the ArrayList","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"DonovanJJ"},"content":" public int size() {","lastModifiedDate":"2023-08-26"},{"lineNumber":45,"author":{"gitId":"DonovanJJ"},"content":" return this.arrList.size();","lastModifiedDate":"2023-08-26"},{"lineNumber":46,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":47,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"DonovanJJ"},"content":" * Marks and updates the tasklist.","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"DonovanJJ"},"content":" * @param choice Number input from the user, deciding which task index to mark (Note that choice starts from 1)","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"DonovanJJ"},"content":" public void mark(int choice) {","lastModifiedDate":"2023-08-26"},{"lineNumber":54,"author":{"gitId":"DonovanJJ"},"content":" this.arrList.get(choice - 1).markDone();","lastModifiedDate":"2023-08-26"},{"lineNumber":55,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":56,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":57,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"DonovanJJ"},"content":" * Un-marks and updates the tasklist.","lastModifiedDate":"2023-08-27"},{"lineNumber":59,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":60,"author":{"gitId":"DonovanJJ"},"content":" * @param choice Number input from the user, deciding which task index to un-mark (Note that choice starts from 1)","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"DonovanJJ"},"content":" public void unmark(int choice) {","lastModifiedDate":"2023-08-26"},{"lineNumber":63,"author":{"gitId":"DonovanJJ"},"content":" this.arrList.get(choice - 1).markUndone();","lastModifiedDate":"2023-08-26"},{"lineNumber":64,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":65,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":66,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":67,"author":{"gitId":"DonovanJJ"},"content":" * Add task to the tasklist.","lastModifiedDate":"2023-08-27"},{"lineNumber":68,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":69,"author":{"gitId":"DonovanJJ"},"content":" * @param task Task object to be added to the tasklist","lastModifiedDate":"2023-08-27"},{"lineNumber":70,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":71,"author":{"gitId":"DonovanJJ"},"content":" public void add(Task task) {","lastModifiedDate":"2023-08-26"},{"lineNumber":72,"author":{"gitId":"DonovanJJ"},"content":" this.arrList.add(task);","lastModifiedDate":"2023-08-26"},{"lineNumber":73,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":74,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":75,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":76,"author":{"gitId":"DonovanJJ"},"content":" * Delete task of particular choice from the tasklist.","lastModifiedDate":"2023-08-27"},{"lineNumber":77,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":78,"author":{"gitId":"DonovanJJ"},"content":" * @param choice int representing the choice of task to be removed from tasklist (Note that choice starts from 1)","lastModifiedDate":"2023-08-27"},{"lineNumber":79,"author":{"gitId":"DonovanJJ"},"content":" * @return Task that has been deleted","lastModifiedDate":"2023-08-27"},{"lineNumber":80,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":81,"author":{"gitId":"DonovanJJ"},"content":" public Task delete(int choice) {","lastModifiedDate":"2023-08-26"},{"lineNumber":82,"author":{"gitId":"DonovanJJ"},"content":" return this.arrList.remove(choice - 1);","lastModifiedDate":"2023-08-26"},{"lineNumber":83,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":84,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":85,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":86,"author":{"gitId":"DonovanJJ"},"content":" * Returns a list of tasks that contain the word as the name.","lastModifiedDate":"2023-08-27"},{"lineNumber":87,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":88,"author":{"gitId":"DonovanJJ"},"content":" * @param word String input by user representing the task name to correspond to","lastModifiedDate":"2023-08-27"},{"lineNumber":89,"author":{"gitId":"DonovanJJ"},"content":" * @return ArrayList of tasks that corresponds to the word input","lastModifiedDate":"2023-08-27"},{"lineNumber":90,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":91,"author":{"gitId":"DonovanJJ"},"content":" public ArrayList\u003cTask\u003e find(String word) {","lastModifiedDate":"2023-08-27"},{"lineNumber":92,"author":{"gitId":"DonovanJJ"},"content":" Predicate\u003cTask\u003e findName \u003d task -\u003e task.containsName(word);","lastModifiedDate":"2023-09-09"},{"lineNumber":93,"author":{"gitId":"DonovanJJ"},"content":" ArrayList\u003cTask\u003e tempList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-27"},{"lineNumber":94,"author":{"gitId":"DonovanJJ"},"content":" for (Task task : this.arrList) {","lastModifiedDate":"2023-08-27"},{"lineNumber":95,"author":{"gitId":"DonovanJJ"},"content":" if (findName.test(task)) {","lastModifiedDate":"2023-08-27"},{"lineNumber":96,"author":{"gitId":"DonovanJJ"},"content":" tempList.add(task);","lastModifiedDate":"2023-08-27"},{"lineNumber":97,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":98,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":99,"author":{"gitId":"DonovanJJ"},"content":" return tempList;","lastModifiedDate":"2023-08-27"},{"lineNumber":100,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":101,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":102,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":103,"author":{"gitId":"DonovanJJ"},"content":" * Returns the String representation of the selected Task choice that is shown when listed.","lastModifiedDate":"2023-08-27"},{"lineNumber":104,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":105,"author":{"gitId":"DonovanJJ"},"content":" * @param choice int representing the choice of task to represent from tasklist (Note that choice starts from 1)","lastModifiedDate":"2023-08-27"},{"lineNumber":106,"author":{"gitId":"DonovanJJ"},"content":" * @return String representation of the Task in the tasklist","lastModifiedDate":"2023-08-27"},{"lineNumber":107,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":108,"author":{"gitId":"DonovanJJ"},"content":" public String taskToString(int choice) {","lastModifiedDate":"2023-08-26"},{"lineNumber":109,"author":{"gitId":"DonovanJJ"},"content":" return this.arrList.get(choice - 1).toString();","lastModifiedDate":"2023-08-26"},{"lineNumber":110,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":111,"author":{"gitId":"DonovanJJ"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"DonovanJJ":111}},{"path":"src/main/java/duke/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"DonovanJJ"},"content":"package duke;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"DonovanJJ"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"DonovanJJ"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"DonovanJJ"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"DonovanJJ"},"content":" * Encapsulates the response and User Interface of the application.","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"DonovanJJ"},"content":" * @author Donovan Chan Jia Jun","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"DonovanJJ"},"content":"public class Ui {","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"DonovanJJ"},"content":" private final String chatbotName \u003d \"notDuke\";","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"DonovanJJ"},"content":" private final String intro \u003d \"Hello! I\u0027m \" + this.chatbotName + \"\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"DonovanJJ"},"content":" + \"What can I do for you?\";","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"DonovanJJ"},"content":" private final String EXITMESSAGE \u003d \"Bye. Hope to see you again soon!\";","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"DonovanJJ"},"content":" * UI constructor.","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"DonovanJJ"},"content":" public Ui() {","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":23,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":24,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"DonovanJJ"},"content":" * Prints the error message in an exception.","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"DonovanJJ"},"content":" * @param e Exception which message should be printed out","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"DonovanJJ"},"content":" public String showExceptionError(Exception e) {","lastModifiedDate":"2023-09-07"},{"lineNumber":31,"author":{"gitId":"DonovanJJ"},"content":" return String.format(e.getMessage());","lastModifiedDate":"2023-09-07"},{"lineNumber":32,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":34,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"DonovanJJ"},"content":" * Print that the file path is empty.","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"DonovanJJ"},"content":" * */","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"DonovanJJ"},"content":" public void emptyFilePath() {","lastModifiedDate":"2023-08-26"},{"lineNumber":38,"author":{"gitId":"DonovanJJ"},"content":" System.out.println(\"File path is empty!\");","lastModifiedDate":"2023-08-26"},{"lineNumber":39,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":40,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"DonovanJJ"},"content":" * Prints out the exit message when user exits the program.","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"DonovanJJ"},"content":" public String exit() {","lastModifiedDate":"2023-09-07"},{"lineNumber":45,"author":{"gitId":"DonovanJJ"},"content":" return this.EXITMESSAGE;","lastModifiedDate":"2023-09-07"},{"lineNumber":46,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":47,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":48,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"DonovanJJ"},"content":" * Prints the String representation of tasks in the given tasklist with numbering for choice.","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"DonovanJJ"},"content":" * @param taskList Tasklist to be listed from","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"DonovanJJ"},"content":" public String listTask(TaskList taskList) {","lastModifiedDate":"2023-09-07"},{"lineNumber":54,"author":{"gitId":"DonovanJJ"},"content":" ArrayList\u003cTask\u003e arrList \u003d taskList.getArrList();","lastModifiedDate":"2023-08-26"},{"lineNumber":55,"author":{"gitId":"DonovanJJ"},"content":" String message \u003d \"\";","lastModifiedDate":"2023-09-07"},{"lineNumber":56,"author":{"gitId":"DonovanJJ"},"content":" int counter \u003d 0;","lastModifiedDate":"2023-08-26"},{"lineNumber":57,"author":{"gitId":"DonovanJJ"},"content":" message \u003d \"Here are the tasks in your list:\\n\";","lastModifiedDate":"2023-09-07"},{"lineNumber":58,"author":{"gitId":"DonovanJJ"},"content":" for (Task task : arrList) {","lastModifiedDate":"2023-08-26"},{"lineNumber":59,"author":{"gitId":"DonovanJJ"},"content":" counter++;","lastModifiedDate":"2023-08-26"},{"lineNumber":60,"author":{"gitId":"DonovanJJ"},"content":" message +\u003d String.format(\"%d.%s\\n\", counter, task.toString());","lastModifiedDate":"2023-09-07"},{"lineNumber":61,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":62,"author":{"gitId":"DonovanJJ"},"content":" return message;","lastModifiedDate":"2023-09-07"},{"lineNumber":63,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":64,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":65,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":66,"author":{"gitId":"DonovanJJ"},"content":" * Prints the display when user marks a task.","lastModifiedDate":"2023-08-27"},{"lineNumber":67,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":68,"author":{"gitId":"DonovanJJ"},"content":" * @param tasks Tasklist containing the task to be marked.","lastModifiedDate":"2023-08-27"},{"lineNumber":69,"author":{"gitId":"DonovanJJ"},"content":" * @param choice int representing the user\u0027s choice of task to mark","lastModifiedDate":"2023-08-27"},{"lineNumber":70,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":71,"author":{"gitId":"DonovanJJ"},"content":" public String displayMarkTask(TaskList tasks, int choice) {","lastModifiedDate":"2023-09-07"},{"lineNumber":72,"author":{"gitId":"DonovanJJ"},"content":" return \"Nice! I\u0027ve marked this task as done:\\n\"","lastModifiedDate":"2023-09-07"},{"lineNumber":73,"author":{"gitId":"DonovanJJ"},"content":" + tasks.taskToString(choice);","lastModifiedDate":"2023-09-07"},{"lineNumber":74,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":75,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":76,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":77,"author":{"gitId":"DonovanJJ"},"content":" * Prints the display when user unmarks a task.","lastModifiedDate":"2023-08-27"},{"lineNumber":78,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":79,"author":{"gitId":"DonovanJJ"},"content":" * @param tasks Tasklist containing the task to be unmarked","lastModifiedDate":"2023-08-27"},{"lineNumber":80,"author":{"gitId":"DonovanJJ"},"content":" * @param choice int representing the user\u0027s choice of task to mark","lastModifiedDate":"2023-08-27"},{"lineNumber":81,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":82,"author":{"gitId":"DonovanJJ"},"content":" public String displayUnmarkTask(TaskList tasks, int choice) {","lastModifiedDate":"2023-09-07"},{"lineNumber":83,"author":{"gitId":"DonovanJJ"},"content":" return \"OK, I\u0027ve marked this task as not done yet:\\n\"","lastModifiedDate":"2023-09-07"},{"lineNumber":84,"author":{"gitId":"DonovanJJ"},"content":" + tasks.taskToString(choice);","lastModifiedDate":"2023-09-07"},{"lineNumber":85,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":86,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":87,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":88,"author":{"gitId":"DonovanJJ"},"content":" * Prints the display when a user deletes a task.","lastModifiedDate":"2023-08-27"},{"lineNumber":89,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":90,"author":{"gitId":"DonovanJJ"},"content":" * @param removedTask Task that is removed","lastModifiedDate":"2023-08-27"},{"lineNumber":91,"author":{"gitId":"DonovanJJ"},"content":" * @param tasks The list of tasks that the task was removed from","lastModifiedDate":"2023-08-27"},{"lineNumber":92,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":93,"author":{"gitId":"DonovanJJ"},"content":" public String displayDeleteTask(Task removedTask, TaskList tasks) {","lastModifiedDate":"2023-09-07"},{"lineNumber":94,"author":{"gitId":"DonovanJJ"},"content":" return String.format(\"Noted. I\u0027ve removed this task:\\n\"","lastModifiedDate":"2023-09-07"},{"lineNumber":95,"author":{"gitId":"DonovanJJ"},"content":" + \" %s\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":96,"author":{"gitId":"DonovanJJ"},"content":" + \"Now you have %d tasks in the list.\\n\",","lastModifiedDate":"2023-09-02"},{"lineNumber":97,"author":{"gitId":"DonovanJJ"},"content":" removedTask.toString(), tasks.size());","lastModifiedDate":"2023-09-02"},{"lineNumber":98,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":99,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":100,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":101,"author":{"gitId":"DonovanJJ"},"content":" * Prints the display when a user adds a task.","lastModifiedDate":"2023-08-27"},{"lineNumber":102,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":103,"author":{"gitId":"DonovanJJ"},"content":" * @param addedTask Task that is added","lastModifiedDate":"2023-08-27"},{"lineNumber":104,"author":{"gitId":"DonovanJJ"},"content":" * @param tasks The list of tasks that the task was removed from","lastModifiedDate":"2023-08-27"},{"lineNumber":105,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":106,"author":{"gitId":"DonovanJJ"},"content":" public String displayAddTask(Task addedTask, TaskList tasks) {","lastModifiedDate":"2023-09-07"},{"lineNumber":107,"author":{"gitId":"DonovanJJ"},"content":" return String.format(\"Got it. I\u0027ve added this task:\\n\"","lastModifiedDate":"2023-09-07"},{"lineNumber":108,"author":{"gitId":"DonovanJJ"},"content":" + \" %s\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":109,"author":{"gitId":"DonovanJJ"},"content":" + \"Now you have %d tasks in the list.\\n\", addedTask.toString(), tasks.size());","lastModifiedDate":"2023-09-02"},{"lineNumber":110,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":111,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":112,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":113,"author":{"gitId":"DonovanJJ"},"content":" * Prints the Task that is found using the Find function.","lastModifiedDate":"2023-09-02"},{"lineNumber":114,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":115,"author":{"gitId":"DonovanJJ"},"content":" * @param arrList List of tasks to display","lastModifiedDate":"2023-09-02"},{"lineNumber":116,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":117,"author":{"gitId":"DonovanJJ"},"content":" public String displayMatchingTask(ArrayList\u003cTask\u003e arrList) {","lastModifiedDate":"2023-09-07"},{"lineNumber":118,"author":{"gitId":"DonovanJJ"},"content":" int size \u003d arrList.size();","lastModifiedDate":"2023-08-27"},{"lineNumber":119,"author":{"gitId":"DonovanJJ"},"content":" String msg \u003d \"\";","lastModifiedDate":"2023-09-07"},{"lineNumber":120,"author":{"gitId":"DonovanJJ"},"content":" if (size \u003e 0) {","lastModifiedDate":"2023-08-27"},{"lineNumber":121,"author":{"gitId":"DonovanJJ"},"content":" msg +\u003d \"Here are the amtching tasks in your list:\\n\";","lastModifiedDate":"2023-09-07"},{"lineNumber":122,"author":{"gitId":"DonovanJJ"},"content":" for (int i \u003d 1; i \u003c\u003d size; i++) {","lastModifiedDate":"2023-08-27"},{"lineNumber":123,"author":{"gitId":"DonovanJJ"},"content":" msg +\u003d String.format(\"%d.%s\\n\", i, arrList.get(i - 1).toString());","lastModifiedDate":"2023-09-07"},{"lineNumber":124,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":125,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":126,"author":{"gitId":"DonovanJJ"},"content":" return msg;","lastModifiedDate":"2023-09-07"},{"lineNumber":127,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":128,"author":{"gitId":"DonovanJJ"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"DonovanJJ":128}},{"path":"src/main/java/duke/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"DonovanJJ"},"content":"package duke.task;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"DonovanJJ"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"DonovanJJ"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"DonovanJJ"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"DonovanJJ"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"DonovanJJ"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"DonovanJJ"},"content":"/**","lastModifiedDate":"2023-08-22"},{"lineNumber":10,"author":{"gitId":"DonovanJJ"},"content":" * Encapsulates the Deadline Task.","lastModifiedDate":"2023-08-22"},{"lineNumber":11,"author":{"gitId":"DonovanJJ"},"content":" * @author Donovan Chan Jia Jun","lastModifiedDate":"2023-08-22"},{"lineNumber":12,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":13,"author":{"gitId":"DonovanJJ"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"DonovanJJ"},"content":" private String deadline;","lastModifiedDate":"2023-08-20"},{"lineNumber":15,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"DonovanJJ"},"content":" * Constructs a Deadline object.","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"DonovanJJ"},"content":" * @param name String representation for the name of the Deadline Object","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"DonovanJJ"},"content":" * @param deadline String representaiton for the deadline of the Deadline Object","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"DonovanJJ"},"content":" public Deadline(String name, String deadline) {","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"DonovanJJ"},"content":" super(name);","lastModifiedDate":"2023-08-20"},{"lineNumber":24,"author":{"gitId":"DonovanJJ"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"d/M/yyyy HHmm\");","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"DonovanJJ"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"DonovanJJ"},"content":" LocalDateTime dateTime \u003d LocalDateTime.parse(deadline, formatter);","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"DonovanJJ"},"content":" DateTimeFormatter outputFormatter \u003d DateTimeFormatter.ofPattern(\"d MMM yyyy\");","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"DonovanJJ"},"content":" deadline \u003d dateTime.format(outputFormatter);","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"DonovanJJ"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"DonovanJJ"},"content":" this.deadline \u003d deadline;","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"DonovanJJ"},"content":" this.deadline \u003d deadline;","lastModifiedDate":"2023-08-20"},{"lineNumber":33,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":34,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":35,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"DonovanJJ"},"content":" * Constructs a Deadline Object.","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"DonovanJJ"},"content":" * @param name String representation for the name of the Deadline Object","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"DonovanJJ"},"content":" * @param deadline String representaiton for the deadline of the Deadline Object","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"DonovanJJ"},"content":" * @param isComplete Boolean value for when the Deadline task is completed","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"DonovanJJ"},"content":" public Deadline(String name, String deadline, boolean isComplete) {","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"DonovanJJ"},"content":" super(name, isComplete);","lastModifiedDate":"2023-08-26"},{"lineNumber":44,"author":{"gitId":"DonovanJJ"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"d/M/yyyy HHmm\");","lastModifiedDate":"2023-08-26"},{"lineNumber":45,"author":{"gitId":"DonovanJJ"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":46,"author":{"gitId":"DonovanJJ"},"content":" LocalDateTime dateTime \u003d LocalDateTime.parse(deadline, formatter);","lastModifiedDate":"2023-08-26"},{"lineNumber":47,"author":{"gitId":"DonovanJJ"},"content":" DateTimeFormatter outputFormatter \u003d DateTimeFormatter.ofPattern(\"d MMM yyyy\");","lastModifiedDate":"2023-08-26"},{"lineNumber":48,"author":{"gitId":"DonovanJJ"},"content":" deadline \u003d dateTime.format(outputFormatter);","lastModifiedDate":"2023-08-26"},{"lineNumber":49,"author":{"gitId":"DonovanJJ"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":50,"author":{"gitId":"DonovanJJ"},"content":" this.deadline \u003d deadline;","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":52,"author":{"gitId":"DonovanJJ"},"content":" this.deadline \u003d deadline;","lastModifiedDate":"2023-08-26"},{"lineNumber":53,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":54,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":55,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"DonovanJJ"},"content":" * Checks if task and another object are equal.","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"DonovanJJ"},"content":" * @param task Task to be compared against","lastModifiedDate":"2023-08-27"},{"lineNumber":59,"author":{"gitId":"DonovanJJ"},"content":" * @return {@code true} if both tasks are equal","lastModifiedDate":"2023-08-27"},{"lineNumber":60,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"DonovanJJ"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":62,"author":{"gitId":"DonovanJJ"},"content":" public boolean equals(Object task) {","lastModifiedDate":"2023-08-26"},{"lineNumber":63,"author":{"gitId":"DonovanJJ"},"content":" if (this \u003d\u003d task) {","lastModifiedDate":"2023-08-26"},{"lineNumber":64,"author":{"gitId":"DonovanJJ"},"content":" return true;","lastModifiedDate":"2023-08-26"},{"lineNumber":65,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":66,"author":{"gitId":"DonovanJJ"},"content":" if (task instanceof Deadline) {","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"DonovanJJ"},"content":" Deadline temp \u003d (Deadline) task;","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"DonovanJJ"},"content":" return temp.deadline.equals(this.deadline) \u0026\u0026 this.getName().equals(temp.getName());","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"DonovanJJ"},"content":" return false;","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":72,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":73,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":74,"author":{"gitId":"DonovanJJ"},"content":" * Write the Deadline object to the storage file in its format.","lastModifiedDate":"2023-08-27"},{"lineNumber":75,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":76,"author":{"gitId":"DonovanJJ"},"content":" * @param fileWriter Filewriter that writes to a specific output file","lastModifiedDate":"2023-08-27"},{"lineNumber":77,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":78,"author":{"gitId":"DonovanJJ"},"content":" public void writeToFile(FileWriter fileWriter) {","lastModifiedDate":"2023-08-26"},{"lineNumber":79,"author":{"gitId":"DonovanJJ"},"content":" String marking \u003d super.isComplete() ? \"0\" : \"1\";","lastModifiedDate":"2023-08-26"},{"lineNumber":80,"author":{"gitId":"DonovanJJ"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":81,"author":{"gitId":"DonovanJJ"},"content":" fileWriter.write(\"D\" + \"|\" + marking + \"|\" + super.getName() + \"|\" + this.deadline);","lastModifiedDate":"2023-08-26"},{"lineNumber":82,"author":{"gitId":"DonovanJJ"},"content":" fileWriter.write(System.lineSeparator());","lastModifiedDate":"2023-08-26"},{"lineNumber":83,"author":{"gitId":"DonovanJJ"},"content":" fileWriter.flush();","lastModifiedDate":"2023-08-26"},{"lineNumber":84,"author":{"gitId":"DonovanJJ"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":85,"author":{"gitId":"DonovanJJ"},"content":" e.printStackTrace();","lastModifiedDate":"2023-08-26"},{"lineNumber":86,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":87,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":88,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":89,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-08-22"},{"lineNumber":90,"author":{"gitId":"DonovanJJ"},"content":" * Retrieves the String representation of the Deadline object.","lastModifiedDate":"2023-08-22"},{"lineNumber":91,"author":{"gitId":"DonovanJJ"},"content":" * @return String","lastModifiedDate":"2023-08-22"},{"lineNumber":92,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":93,"author":{"gitId":"DonovanJJ"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":94,"author":{"gitId":"DonovanJJ"},"content":" public String toString() {","lastModifiedDate":"2023-08-20"},{"lineNumber":95,"author":{"gitId":"DonovanJJ"},"content":" return String.format(\"[D]%s %s (by: %s)\", super.getMarking(), super.name, this.deadline);","lastModifiedDate":"2023-08-20"},{"lineNumber":96,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":97,"author":{"gitId":"DonovanJJ"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"DonovanJJ":97}},{"path":"src/main/java/duke/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"DonovanJJ"},"content":"package duke.task;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"DonovanJJ"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"DonovanJJ"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"DonovanJJ"},"content":"/**","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"DonovanJJ"},"content":" * Encapsulates the task.Events Task.","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"DonovanJJ"},"content":" * @author Donovan Chan Jia Jun","lastModifiedDate":"2023-08-22"},{"lineNumber":9,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":10,"author":{"gitId":"DonovanJJ"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"DonovanJJ"},"content":" private String from;","lastModifiedDate":"2023-08-20"},{"lineNumber":12,"author":{"gitId":"DonovanJJ"},"content":" private String to;","lastModifiedDate":"2023-08-20"},{"lineNumber":13,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"DonovanJJ"},"content":" * Constructs Event Object.","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"DonovanJJ"},"content":" * @param name String representation for the name of the event","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"DonovanJJ"},"content":" * @param from String representation for when the event starts","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"DonovanJJ"},"content":" * @param to String representation for when the event ends","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"DonovanJJ"},"content":" public Event(String name, String from, String to) {","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"DonovanJJ"},"content":" super(name);","lastModifiedDate":"2023-08-20"},{"lineNumber":23,"author":{"gitId":"DonovanJJ"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-20"},{"lineNumber":24,"author":{"gitId":"DonovanJJ"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-20"},{"lineNumber":25,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":26,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":27,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"DonovanJJ"},"content":" * Constructs Event Object.","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"DonovanJJ"},"content":" * @param name name String representation for the name of the event","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"DonovanJJ"},"content":" * @param from String representation for when the event starts","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"DonovanJJ"},"content":" * @param to String representation for when the event ends","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"DonovanJJ"},"content":" * @param isComplete Boolean value to show if Event has been marked as complete","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"DonovanJJ"},"content":" public Event(String name, String from, String to, boolean isComplete) {","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"DonovanJJ"},"content":" super(name, isComplete);","lastModifiedDate":"2023-08-26"},{"lineNumber":37,"author":{"gitId":"DonovanJJ"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-26"},{"lineNumber":38,"author":{"gitId":"DonovanJJ"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-26"},{"lineNumber":39,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":40,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"DonovanJJ"},"content":" private String getTo() {","lastModifiedDate":"2023-08-26"},{"lineNumber":42,"author":{"gitId":"DonovanJJ"},"content":" return this.to;","lastModifiedDate":"2023-08-26"},{"lineNumber":43,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":44,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":45,"author":{"gitId":"DonovanJJ"},"content":" private String getFrom() {","lastModifiedDate":"2023-08-26"},{"lineNumber":46,"author":{"gitId":"DonovanJJ"},"content":" return this.from;","lastModifiedDate":"2023-08-26"},{"lineNumber":47,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":48,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":49,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"DonovanJJ"},"content":" * Checks if both objects are equal.","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"DonovanJJ"},"content":" * @param task Task object to be compared agianst","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"DonovanJJ"},"content":" * @return {@code true} if both objects are equal","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"DonovanJJ"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":56,"author":{"gitId":"DonovanJJ"},"content":" public boolean equals(Object task) {","lastModifiedDate":"2023-08-26"},{"lineNumber":57,"author":{"gitId":"DonovanJJ"},"content":" if (this \u003d\u003d task) {","lastModifiedDate":"2023-08-26"},{"lineNumber":58,"author":{"gitId":"DonovanJJ"},"content":" return true;","lastModifiedDate":"2023-08-26"},{"lineNumber":59,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":60,"author":{"gitId":"DonovanJJ"},"content":" Event eventTask \u003d (Event) task;","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"DonovanJJ"},"content":" return this.to.equals(eventTask.getTo()) \u0026\u0026 this.getName().equals(eventTask.getName())","lastModifiedDate":"2023-08-26"},{"lineNumber":62,"author":{"gitId":"DonovanJJ"},"content":" \u0026\u0026 this.from.equals(eventTask.getFrom());","lastModifiedDate":"2023-08-26"},{"lineNumber":63,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":64,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":65,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":66,"author":{"gitId":"DonovanJJ"},"content":" * Write the Event object to the storage file in its format.","lastModifiedDate":"2023-08-27"},{"lineNumber":67,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":68,"author":{"gitId":"DonovanJJ"},"content":" * @param fileWriter Filewriter that writes to a specific output file","lastModifiedDate":"2023-08-27"},{"lineNumber":69,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":70,"author":{"gitId":"DonovanJJ"},"content":" public void writeToFile(FileWriter fileWriter) {","lastModifiedDate":"2023-08-26"},{"lineNumber":71,"author":{"gitId":"DonovanJJ"},"content":" String marking \u003d super.isComplete() ? \"0\" : \"1\";","lastModifiedDate":"2023-08-26"},{"lineNumber":72,"author":{"gitId":"DonovanJJ"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":73,"author":{"gitId":"DonovanJJ"},"content":" fileWriter.write(\"E\" + \"|\" + marking + \"|\" + super.getName() + \"|\" + this.from + \"|\" + this.to);","lastModifiedDate":"2023-08-26"},{"lineNumber":74,"author":{"gitId":"DonovanJJ"},"content":" fileWriter.write(System.lineSeparator());","lastModifiedDate":"2023-08-26"},{"lineNumber":75,"author":{"gitId":"DonovanJJ"},"content":" fileWriter.flush();","lastModifiedDate":"2023-08-26"},{"lineNumber":76,"author":{"gitId":"DonovanJJ"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":77,"author":{"gitId":"DonovanJJ"},"content":" e.printStackTrace();","lastModifiedDate":"2023-08-26"},{"lineNumber":78,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":79,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":80,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":81,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-08-22"},{"lineNumber":82,"author":{"gitId":"DonovanJJ"},"content":" * Retrieves the String representation of the task.Events object.","lastModifiedDate":"2023-08-26"},{"lineNumber":83,"author":{"gitId":"DonovanJJ"},"content":" * @return String","lastModifiedDate":"2023-08-22"},{"lineNumber":84,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":85,"author":{"gitId":"DonovanJJ"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":86,"author":{"gitId":"DonovanJJ"},"content":" public String toString() {","lastModifiedDate":"2023-08-20"},{"lineNumber":87,"author":{"gitId":"DonovanJJ"},"content":" return String.format(\"[E]%s %s (from: %s to: %s)\", super.getMarking(), super.name, this.from, this.to);","lastModifiedDate":"2023-08-20"},{"lineNumber":88,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":89,"author":{"gitId":"DonovanJJ"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"DonovanJJ":89}},{"path":"src/main/java/duke/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"DonovanJJ"},"content":"package duke.task;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"DonovanJJ"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"DonovanJJ"},"content":"/**","lastModifiedDate":"2023-08-22"},{"lineNumber":6,"author":{"gitId":"DonovanJJ"},"content":" * Encapsulates the abstract concept of a Task.","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"DonovanJJ"},"content":" * @author Donovan Chan Jia Jun","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":9,"author":{"gitId":"DonovanJJ"},"content":"public abstract class Task {","lastModifiedDate":"2023-08-20"},{"lineNumber":10,"author":{"gitId":"DonovanJJ"},"content":" protected boolean isComplete;","lastModifiedDate":"2023-08-20"},{"lineNumber":11,"author":{"gitId":"DonovanJJ"},"content":" protected String name;","lastModifiedDate":"2023-08-20"},{"lineNumber":12,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"DonovanJJ"},"content":" * Constructs the Task object.","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"DonovanJJ"},"content":" * @param name String representation for the name of the Task","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"DonovanJJ"},"content":" protected Task(String name) {","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"DonovanJJ"},"content":" this.isComplete \u003d false;","lastModifiedDate":"2023-08-20"},{"lineNumber":20,"author":{"gitId":"DonovanJJ"},"content":" this.name \u003d name;","lastModifiedDate":"2023-08-20"},{"lineNumber":21,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":22,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":23,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"DonovanJJ"},"content":" * Constructs the Task object.","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"DonovanJJ"},"content":" * @param name String represetnationf or the name of the Task","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"DonovanJJ"},"content":" * @param isComplete Boolean value representing if the Task has been marked as complete","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"DonovanJJ"},"content":" public Task(String name, boolean isComplete) {","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"DonovanJJ"},"content":" this.isComplete \u003d isComplete;","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"DonovanJJ"},"content":" this.name \u003d name;","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":34,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-08-22"},{"lineNumber":35,"author":{"gitId":"DonovanJJ"},"content":" * Check if task is complete.","lastModifiedDate":"2023-08-22"},{"lineNumber":36,"author":{"gitId":"DonovanJJ"},"content":" * @return boolean. True if completed","lastModifiedDate":"2023-08-22"},{"lineNumber":37,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":38,"author":{"gitId":"DonovanJJ"},"content":" public boolean isComplete() {","lastModifiedDate":"2023-08-20"},{"lineNumber":39,"author":{"gitId":"DonovanJJ"},"content":" return this.isComplete;","lastModifiedDate":"2023-08-20"},{"lineNumber":40,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":41,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":42,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-08-22"},{"lineNumber":43,"author":{"gitId":"DonovanJJ"},"content":" * Marks the task to be completed.","lastModifiedDate":"2023-08-22"},{"lineNumber":44,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":45,"author":{"gitId":"DonovanJJ"},"content":" public void markDone() {","lastModifiedDate":"2023-08-20"},{"lineNumber":46,"author":{"gitId":"DonovanJJ"},"content":" this.isComplete \u003d true;","lastModifiedDate":"2023-08-20"},{"lineNumber":47,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":48,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":49,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-08-22"},{"lineNumber":50,"author":{"gitId":"DonovanJJ"},"content":" * Marks the task to be incomplete.","lastModifiedDate":"2023-08-22"},{"lineNumber":51,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":52,"author":{"gitId":"DonovanJJ"},"content":" public void markUndone() {","lastModifiedDate":"2023-08-20"},{"lineNumber":53,"author":{"gitId":"DonovanJJ"},"content":" this.isComplete \u003d false;","lastModifiedDate":"2023-08-20"},{"lineNumber":54,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":55,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":56,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-08-22"},{"lineNumber":57,"author":{"gitId":"DonovanJJ"},"content":" * Obtains the String representation of whether task is completed.","lastModifiedDate":"2023-08-22"},{"lineNumber":58,"author":{"gitId":"DonovanJJ"},"content":" * @return String. Symbol of completion","lastModifiedDate":"2023-08-22"},{"lineNumber":59,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":60,"author":{"gitId":"DonovanJJ"},"content":" public String getMarking() {","lastModifiedDate":"2023-08-20"},{"lineNumber":61,"author":{"gitId":"DonovanJJ"},"content":" if (isComplete()) {","lastModifiedDate":"2023-08-20"},{"lineNumber":62,"author":{"gitId":"DonovanJJ"},"content":" return \"[X]\";","lastModifiedDate":"2023-08-20"},{"lineNumber":63,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":64,"author":{"gitId":"DonovanJJ"},"content":" return \"[ ]\";","lastModifiedDate":"2023-08-20"},{"lineNumber":65,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":66,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":67,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":68,"author":{"gitId":"DonovanJJ"},"content":" * Returns the name of the Task Object.","lastModifiedDate":"2023-08-27"},{"lineNumber":69,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":70,"author":{"gitId":"DonovanJJ"},"content":" * @return String representation of its name","lastModifiedDate":"2023-08-27"},{"lineNumber":71,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":72,"author":{"gitId":"DonovanJJ"},"content":" public String getName() {","lastModifiedDate":"2023-08-26"},{"lineNumber":73,"author":{"gitId":"DonovanJJ"},"content":" return this.name;","lastModifiedDate":"2023-08-26"},{"lineNumber":74,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":75,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":76,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":77,"author":{"gitId":"DonovanJJ"},"content":" * Checks if given word String is a substring of its name.","lastModifiedDate":"2023-08-27"},{"lineNumber":78,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":79,"author":{"gitId":"DonovanJJ"},"content":" * @param word String repreentingt the name substring they are looking for","lastModifiedDate":"2023-08-27"},{"lineNumber":80,"author":{"gitId":"DonovanJJ"},"content":" * @return {@code true} if word is a substring of the name","lastModifiedDate":"2023-08-27"},{"lineNumber":81,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":82,"author":{"gitId":"DonovanJJ"},"content":" public Boolean containsName(String word) {","lastModifiedDate":"2023-09-09"},{"lineNumber":83,"author":{"gitId":"DonovanJJ"},"content":" return this.name.contains(word);","lastModifiedDate":"2023-08-27"},{"lineNumber":84,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":85,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":86,"author":{"gitId":"DonovanJJ"},"content":" abstract public void writeToFile(FileWriter fileWriter);","lastModifiedDate":"2023-08-26"},{"lineNumber":87,"author":{"gitId":"DonovanJJ"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"DonovanJJ":87}},{"path":"src/main/java/duke/task/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"DonovanJJ"},"content":"package duke.task;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"DonovanJJ"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"DonovanJJ"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"DonovanJJ"},"content":"/**","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"DonovanJJ"},"content":" * Emcapsulates a Todo task","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"DonovanJJ"},"content":" * @author Donovan Chan Jia Jun","lastModifiedDate":"2023-08-22"},{"lineNumber":9,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":10,"author":{"gitId":"DonovanJJ"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"DonovanJJ"},"content":" public Todo(String name) {","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"DonovanJJ"},"content":" super(name);","lastModifiedDate":"2023-08-20"},{"lineNumber":13,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":14,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":15,"author":{"gitId":"DonovanJJ"},"content":" public Todo(String name, boolean isComplete) {","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"DonovanJJ"},"content":" super(name, isComplete);","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"DonovanJJ"},"content":" * Checks if both objects are equal.","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"DonovanJJ"},"content":" * @param o Object to be compared against","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"DonovanJJ"},"content":" * @return {@code true} if both objects are equal","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"DonovanJJ"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"DonovanJJ"},"content":" public boolean equals(Object o) {","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"DonovanJJ"},"content":" if (this \u003d\u003d o) {","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"DonovanJJ"},"content":" return true;","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"DonovanJJ"},"content":" Todo task \u003d (Todo) o;","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"DonovanJJ"},"content":" return super.getName().equals(task.getName());","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":34,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"DonovanJJ"},"content":" * Write the Todo object to the storage file in its format.","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"DonovanJJ"},"content":" * @param fileWriter Filewriter that writes to a specific output file","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"DonovanJJ"},"content":" public void writeToFile(FileWriter fileWriter) {","lastModifiedDate":"2023-08-26"},{"lineNumber":40,"author":{"gitId":"DonovanJJ"},"content":" String marking \u003d super.isComplete() ? \"0\" : \"1\";","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"DonovanJJ"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":42,"author":{"gitId":"DonovanJJ"},"content":" fileWriter.write(\"T\" + \"|\" + marking + \"|\" + super.getName());","lastModifiedDate":"2023-08-26"},{"lineNumber":43,"author":{"gitId":"DonovanJJ"},"content":" fileWriter.write(System.lineSeparator());","lastModifiedDate":"2023-08-26"},{"lineNumber":44,"author":{"gitId":"DonovanJJ"},"content":" fileWriter.flush();","lastModifiedDate":"2023-08-26"},{"lineNumber":45,"author":{"gitId":"DonovanJJ"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":46,"author":{"gitId":"DonovanJJ"},"content":" e.printStackTrace();","lastModifiedDate":"2023-08-26"},{"lineNumber":47,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":48,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":49,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":50,"author":{"gitId":"DonovanJJ"},"content":" /**","lastModifiedDate":"2023-08-22"},{"lineNumber":51,"author":{"gitId":"DonovanJJ"},"content":" * Retrieves the string representation of the Todo Object.","lastModifiedDate":"2023-08-22"},{"lineNumber":52,"author":{"gitId":"DonovanJJ"},"content":" *","lastModifiedDate":"2023-08-22"},{"lineNumber":53,"author":{"gitId":"DonovanJJ"},"content":" * @return String Represents the Todo","lastModifiedDate":"2023-08-22"},{"lineNumber":54,"author":{"gitId":"DonovanJJ"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":55,"author":{"gitId":"DonovanJJ"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":56,"author":{"gitId":"DonovanJJ"},"content":" public String toString() {","lastModifiedDate":"2023-08-20"},{"lineNumber":57,"author":{"gitId":"DonovanJJ"},"content":" return String.format(\"[T]%s %s\", super.getMarking(), super.name);","lastModifiedDate":"2023-08-20"},{"lineNumber":58,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":59,"author":{"gitId":"DonovanJJ"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"DonovanJJ":59}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"DonovanJJ"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"DonovanJJ"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"DonovanJJ"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"DonovanJJ"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"DonovanJJ"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"DonovanJJ"},"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-03"},{"lineNumber":9,"author":{"gitId":"DonovanJJ"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"DonovanJJ"},"content":" \u003cLabel fx:id\u003d\"dialog\" text\u003d\"Label\" wrapText\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"DonovanJJ"},"content":" \u003cImageView fx:id\u003d\"displayPicture\" fitHeight\u003d\"99.0\" fitWidth\u003d\"99.0\" pickOnBounds\u003d\"true\" preserveRatio\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"DonovanJJ"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"DonovanJJ"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"DonovanJJ"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"DonovanJJ"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"DonovanJJ"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"DonovanJJ":16}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"DonovanJJ"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"DonovanJJ"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"DonovanJJ"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"DonovanJJ"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"DonovanJJ"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"DonovanJJ"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"DonovanJJ"},"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.MainWindow\"\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"DonovanJJ"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"DonovanJJ"},"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\" /\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"DonovanJJ"},"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\" /\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"DonovanJJ"},"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-03"},{"lineNumber":14,"author":{"gitId":"DonovanJJ"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"DonovanJJ"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"552.0\" prefWidth\u003d\"388.0\" /\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"DonovanJJ"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"DonovanJJ"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"DonovanJJ"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"DonovanJJ"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"DonovanJJ":19}},{"path":"src/test/java/duke/DeadlinesTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"DonovanJJ"},"content":"package duke;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"DonovanJJ"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"DonovanJJ"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"DonovanJJ"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"DonovanJJ"},"content":"public class DeadlinesTest {","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"DonovanJJ"},"content":" @Test","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"DonovanJJ"},"content":" public void stringRepresentation_validDayDeadline_repTest() {","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"DonovanJJ"},"content":" Deadline task \u003d new Deadline(\"Testname1\", \"Tuesday\");","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"DonovanJJ"},"content":" assertEquals(\"[D][ ] Testname1 (by: Tuesday)\", task.toString());","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"DonovanJJ"},"content":" @Test","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"DonovanJJ"},"content":" public void stringRepresentation_validDateDeadline_repTest() {","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"DonovanJJ"},"content":" Deadline task \u003d new Deadline(\"Testname1\", \"2/12/2019 1800\");","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"DonovanJJ"},"content":" assertEquals(\"[D][ ] Testname1 (by: 2 Dec 2019)\", task.toString());","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"DonovanJJ"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"DonovanJJ":22}},{"path":"src/test/java/duke/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"DonovanJJ"},"content":"package duke;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"DonovanJJ"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"DonovanJJ"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"DonovanJJ"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"DonovanJJ"},"content":"import duke.task.Event;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"DonovanJJ"},"content":"import duke.task.Todo;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"DonovanJJ"},"content":"public class ParserTest {","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"DonovanJJ"},"content":" @Test","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"DonovanJJ"},"content":" public void createTask_invalidTodoArgument_exceptionThrown() {","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"DonovanJJ"},"content":" String input \u003d \"todo\";","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"DonovanJJ"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"DonovanJJ"},"content":" Parser.createTask(input);","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"DonovanJJ"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"DonovanJJ"},"content":" assertEquals(\"OOPS!!! The description of a todo cannot be empty.\", e.getMessage());","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"DonovanJJ"},"content":" @Test","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"DonovanJJ"},"content":" public void createTask_validTodo_successfulToDoCreation() {","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"DonovanJJ"},"content":" String input \u003d \"todo read book\";","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"DonovanJJ"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"DonovanJJ"},"content":" assertEquals(new Todo(\"read book\"), Parser.createTask(input));","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"DonovanJJ"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"DonovanJJ"},"content":" assertEquals(\"OOPS!!! The description of a todo cannot be empty.\", e.getMessage());","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"DonovanJJ"},"content":" @Test","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"DonovanJJ"},"content":" public void createTask_validDeadline_successfulDeadlineCreation() {","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"DonovanJJ"},"content":" String input \u003d \"deadline return book /by Sunday\";","lastModifiedDate":"2023-08-26"},{"lineNumber":35,"author":{"gitId":"DonovanJJ"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":36,"author":{"gitId":"DonovanJJ"},"content":" assertEquals(new Deadline(\"return book\", \"Sunday\"), Parser.createTask(input));","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"DonovanJJ"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":38,"author":{"gitId":"DonovanJJ"},"content":" assertEquals(\"\", e.getMessage());","lastModifiedDate":"2023-08-26"},{"lineNumber":39,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":40,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":42,"author":{"gitId":"DonovanJJ"},"content":" @Test","lastModifiedDate":"2023-08-26"},{"lineNumber":43,"author":{"gitId":"DonovanJJ"},"content":" public void createTask_missingByClauseDeadline_invalidExceptionThrown() {","lastModifiedDate":"2023-09-09"},{"lineNumber":44,"author":{"gitId":"DonovanJJ"},"content":" String input \u003d \"deadline return book Sunday\";","lastModifiedDate":"2023-08-26"},{"lineNumber":45,"author":{"gitId":"DonovanJJ"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":46,"author":{"gitId":"DonovanJJ"},"content":" assertEquals(new Deadline(\"return book Sunday\", \"Sunday\"), Parser.createTask(input));","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"DonovanJJ"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":48,"author":{"gitId":"DonovanJJ"},"content":" assertEquals(\"Invalid deadline task!\", e.getMessage());","lastModifiedDate":"2023-08-26"},{"lineNumber":49,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":50,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":51,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":52,"author":{"gitId":"DonovanJJ"},"content":" @Test","lastModifiedDate":"2023-08-26"},{"lineNumber":53,"author":{"gitId":"DonovanJJ"},"content":" public void createTask_validDate_successfulDeadlineDatCreation() {","lastModifiedDate":"2023-09-09"},{"lineNumber":54,"author":{"gitId":"DonovanJJ"},"content":" String input \u003d \"deadline return book /by 2/12/2019 1800\";","lastModifiedDate":"2023-08-26"},{"lineNumber":55,"author":{"gitId":"DonovanJJ"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":56,"author":{"gitId":"DonovanJJ"},"content":" assertEquals(new Deadline(\"return book\", \"2 Dec 2019\"), Parser.createTask(input));","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"DonovanJJ"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":58,"author":{"gitId":"DonovanJJ"},"content":" assertEquals(\"Invalid deadline task!\", e.getMessage());","lastModifiedDate":"2023-08-26"},{"lineNumber":59,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":60,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":61,"author":{"gitId":"DonovanJJ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":62,"author":{"gitId":"DonovanJJ"},"content":" @Test","lastModifiedDate":"2023-08-26"},{"lineNumber":63,"author":{"gitId":"DonovanJJ"},"content":" public void createTask_validEvent_successfulEventCreation() {","lastModifiedDate":"2023-09-09"},{"lineNumber":64,"author":{"gitId":"DonovanJJ"},"content":" String input \u003d \"event project meeting /from Mon 2pm /to 4pm\";","lastModifiedDate":"2023-08-26"},{"lineNumber":65,"author":{"gitId":"DonovanJJ"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":66,"author":{"gitId":"DonovanJJ"},"content":" assertEquals(new Event(\"project meeting\", \"Mon 2pm\", \"4pm\"), Parser.createTask(input));","lastModifiedDate":"2023-08-27"},{"lineNumber":67,"author":{"gitId":"DonovanJJ"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":68,"author":{"gitId":"DonovanJJ"},"content":" assertEquals(\"OOPS!!! The description of a todo cannot be empty.\", e.getMessage());","lastModifiedDate":"2023-08-26"},{"lineNumber":69,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":70,"author":{"gitId":"DonovanJJ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":71,"author":{"gitId":"DonovanJJ"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"DonovanJJ":71}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"DonovanJJ"},"content":"todo borrow book","lastModifiedDate":"2023-08-22"},{"lineNumber":2,"author":{"gitId":"DonovanJJ"},"content":"deadline return book /by Sunday","lastModifiedDate":"2023-08-22"},{"lineNumber":3,"author":{"gitId":"DonovanJJ"},"content":"event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2023-08-22"},{"lineNumber":4,"author":{"gitId":"DonovanJJ"},"content":"list","lastModifiedDate":"2023-08-22"},{"lineNumber":5,"author":{"gitId":"DonovanJJ"},"content":"mark 3","lastModifiedDate":"2023-08-22"},{"lineNumber":6,"author":{"gitId":"DonovanJJ"},"content":"mark 1","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"DonovanJJ"},"content":"list","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"DonovanJJ"},"content":"task","lastModifiedDate":"2023-08-22"},{"lineNumber":9,"author":{"gitId":"DonovanJJ"},"content":"todo","lastModifiedDate":"2023-08-22"},{"lineNumber":10,"author":{"gitId":"DonovanJJ"},"content":"delete 3","lastModifiedDate":"2023-08-22"},{"lineNumber":11,"author":{"gitId":"DonovanJJ"},"content":"delete 1","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"DonovanJJ"},"content":"list","lastModifiedDate":"2023-08-22"},{"lineNumber":13,"author":{"gitId":"DonovanJJ"},"content":"bye","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"DonovanJJ":13}},{"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":"DonovanJJ"},"content":"java -classpath ..\\bin duke.Duke \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-08-26"},{"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":{"DonovanJJ":1,"-":20}}] diff --git a/DonovanJJ_ip_master/commits.json b/DonovanJJ_ip_master/commits.json index 0255b1e8..a4fe64cf 100644 --- a/DonovanJJ_ip_master/commits.json +++ b/DonovanJJ_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"DonovanJJ":[{"date":"2023-08-20","commitResults":[{"hash":"5e38a4d8e0641b11872b24146d7cf50b53125a13","isMergeCommit":false,"messageTitle":"Added: Rename, Greet, Exit","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":1}}},{"hash":"bd304dbb255980847976cf653f77744436851f3d","isMergeCommit":false,"messageTitle":"Added: Echo","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":2}}},{"hash":"02a8c75a510ea9002b30319631a4721a075f615f","isMergeCommit":false,"messageTitle":"Added: Add, List","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":1}}},{"hash":"8a03511f859ffc9212b667fa4af7178c55424841","isMergeCommit":false,"messageTitle":"Added: Mark as Done","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":61,"deletions":13}}},{"hash":"051c9413060800e539aaf840520b3d54b584a510","isMergeCommit":false,"messageTitle":"Added: ToDos, Events, Deadlines","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":124,"deletions":39},"sh":{"insertions":0,"deletions":0}}},{"hash":"ed6872fbd6ccb4f3a9c873bb70688da107677ed9","isMergeCommit":false,"messageTitle":"Added: Handle Errors","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":3}}}]},{"date":"2023-08-22","commitResults":[{"hash":"a7b5917a371d21204f792bbf09f7c9fdf35fe59a","isMergeCommit":false,"messageTitle":"Added: Delete","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"txt":{"insertions":12,"deletions":0},"java":{"insertions":105,"deletions":35}}}]},{"date":"2023-08-24","commitResults":[{"hash":"bbe280b9766cf338186532c48293b869674796b5","isMergeCommit":false,"messageTitle":"Added: TextUITesting","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0}}}]},{"date":"2023-08-26","commitResults":[{"hash":"57388d6282610c27deaed4bfd48d53d2f0a802b9","isMergeCommit":false,"messageTitle":"Add Level-7 Save Updated the code to read and write from an output file This saves progress made by the user for the next session","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":173,"deletions":2}}},{"hash":"d8425455f2caa0c58e705230c1358591199a91db","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-level-7\u0027 Added Level-7","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"007df569174570c043b61cc1d6ee89eb8fc68fea","isMergeCommit":false,"messageTitle":"Add support for date, time for deadlines Updated the deadline class to support it","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":83,"deletions":62}}},{"hash":"3c341e414ae90c6bf1a396413a68997bc1d5ff0c","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-level-8\u0027 Add date, time format identification and display","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}},{"hash":"00a921c8784d636fd823f66219757f1b0e084293","isMergeCommit":false,"messageTitle":"Redesign OOP Ui, Storage, Parser, TaskList class have been added","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0},"java":{"insertions":372,"deletions":187}}},{"hash":"90880ee2bc6f347b549864b6dff60055ca25aba6","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-MoreOOP\u0027 Merge: A-MoreOOP","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"9ab10d415dcbce7831f9f5016b5f32f446b9f140","isMergeCommit":false,"messageTitle":"Add packges duke and task task - contains the different task classes, duke contains the main logic","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":103,"deletions":156},"bat":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}},{"hash":"2f0e5583a9ab3f6221f113868a5fe6c27bdbd4e9","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-Packages\u0027 Merge A-Packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{}},{"hash":"9f9eeca5f9e57dacc5d74e66872f5a228bb4bb3b","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027 Merge add-support-gradle","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"bf29c6c5371f7dfe774235ee026eb2aa58f44c0e","isMergeCommit":false,"messageTitle":"Add Junit for Deadlines and Parser method","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":140,"deletions":0}}},{"hash":"2795a87cbdc7514308e97dd86db0b47fe9df6995","isMergeCommit":true,"messageTitle":"Merge tag \u0027A-Junit\u0027 Merge Junit cases","messageBody":"","tags":["A-Jar","A-JUnit"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-27","commitResults":[{"hash":"66180ac7019f1e7d7f790952ad8ffdf584809a19","isMergeCommit":false,"messageTitle":"Add JavaDocs to all files for better documentation","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":199,"deletions":58}}},{"hash":"d3465621fe245b2aed7ad3191af1243c17f17f13","isMergeCommit":false,"messageTitle":"Updated code structure to adhere to coding standard","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":8}}},{"hash":"637ececb3fbeeb3f6b2389c8d09772a02e986b7d","isMergeCommit":false,"messageTitle":"Add minor changes to code to adhere to standards","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":44,"deletions":44}}},{"hash":"bcca04cf7abe0870dd0e1660ef78ce8f4dd836d0","isMergeCommit":false,"messageTitle":"Add Find Functionality Users can search for substrings of the task name","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":75,"deletions":29}}},{"hash":"b0b7e8fdef0e92ede676b84c6e5889c2c10bcf24","isMergeCommit":true,"messageTitle":"Merge tag \u0027A-JavaDoc\u0027 Merge Javadoc for better documentation of code","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{}},{"hash":"07f8616dad3c0dc791ae080782f395441793a6f0","isMergeCommit":true,"messageTitle":"Fix merge conflicts","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"401794e2d03e501664002730f899d12f62311cec","isMergeCommit":true,"messageTitle":"Resolved merge conflict with Find","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-28","commitResults":[{"hash":"125f24083e0847449ca5e0987437aa80d084ae09","isMergeCommit":false,"messageTitle":"Update file path to use relative paths","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":2}}},{"hash":"8ba08d060b31e50c07fdbbba61504c3f8316d6ed","isMergeCommit":false,"messageTitle":"Update build gradle to remove bug in main file location","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}}]},{"date":"2023-08-30","commitResults":[{"hash":"944a640cacf5d5f3b943b7b33410e73a95400a4b","isMergeCommit":false,"messageTitle":"Corrected the equals method for Deadline class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":3}}}]},{"date":"2023-09-02","commitResults":[{"hash":"3a78dbc373f82844b79b13709a5d9acd0bdbf65a","isMergeCommit":false,"messageTitle":"Edit Code to comply with the code styling guidelines","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":1},"java":{"insertions":137,"deletions":59}}}]},{"date":"2023-09-03","commitResults":[{"hash":"faa2549a79830bf49813a50f3eb101cde1759622","isMergeCommit":false,"messageTitle":"Add GUI with JavaFX","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":14,"deletions":0},"fxml":{"insertions":35,"deletions":0},"java":{"insertions":201,"deletions":18}}}]},{"date":"2023-09-06","commitResults":[{"hash":"cd8a40b40fb107ef7792dc2f0ac591b049f3d695","isMergeCommit":false,"messageTitle":"Update gradle entry path","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"java":{"insertions":13,"deletions":2}}}]},{"date":"2023-09-07","commitResults":[{"hash":"aaa43e427d8aa84b45c036d23d6a99aa3371425c","isMergeCommit":false,"messageTitle":"Update Duke to only launch from the launcer. Removed the CLI version of the application","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":58,"deletions":95}}},{"hash":"9864b00e3d616dfcb6d5ee30a2c3d47905f00e56","isMergeCommit":true,"messageTitle":"Merge branch \u0027Level-10\u0027 Merge with GUI branch","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"DonovanJJ":{"java":1146,"md":2,"fxml":35,"sh":0,"bat":1,"gradle":20,"txt":16}},"authorContributionVariance":{"DonovanJJ":82466.664},"authorDisplayNameMap":{"DonovanJJ":"CS2103T-T15-3 CHAN.. JUN"}} +{"authorDailyContributionsMap":{"DonovanJJ":[{"date":"2023-08-20","commitResults":[{"hash":"5e38a4d8e0641b11872b24146d7cf50b53125a13","isMergeCommit":false,"messageTitle":"Added: Rename, Greet, Exit","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":1}}},{"hash":"bd304dbb255980847976cf653f77744436851f3d","isMergeCommit":false,"messageTitle":"Added: Echo","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":2}}},{"hash":"02a8c75a510ea9002b30319631a4721a075f615f","isMergeCommit":false,"messageTitle":"Added: Add, List","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":1}}},{"hash":"8a03511f859ffc9212b667fa4af7178c55424841","isMergeCommit":false,"messageTitle":"Added: Mark as Done","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":61,"deletions":13}}},{"hash":"051c9413060800e539aaf840520b3d54b584a510","isMergeCommit":false,"messageTitle":"Added: ToDos, Events, Deadlines","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":124,"deletions":39},"sh":{"insertions":0,"deletions":0}}},{"hash":"ed6872fbd6ccb4f3a9c873bb70688da107677ed9","isMergeCommit":false,"messageTitle":"Added: Handle Errors","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":3}}}]},{"date":"2023-08-22","commitResults":[{"hash":"a7b5917a371d21204f792bbf09f7c9fdf35fe59a","isMergeCommit":false,"messageTitle":"Added: Delete","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"txt":{"insertions":12,"deletions":0},"java":{"insertions":105,"deletions":35}}}]},{"date":"2023-08-24","commitResults":[{"hash":"bbe280b9766cf338186532c48293b869674796b5","isMergeCommit":false,"messageTitle":"Added: TextUITesting","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0}}}]},{"date":"2023-08-26","commitResults":[{"hash":"57388d6282610c27deaed4bfd48d53d2f0a802b9","isMergeCommit":false,"messageTitle":"Add Level-7 Save Updated the code to read and write from an output file This saves progress made by the user for the next session","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":173,"deletions":2}}},{"hash":"d8425455f2caa0c58e705230c1358591199a91db","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-level-7\u0027 Added Level-7","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"007df569174570c043b61cc1d6ee89eb8fc68fea","isMergeCommit":false,"messageTitle":"Add support for date, time for deadlines Updated the deadline class to support it","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":83,"deletions":62}}},{"hash":"3c341e414ae90c6bf1a396413a68997bc1d5ff0c","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-level-8\u0027 Add date, time format identification and display","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}},{"hash":"00a921c8784d636fd823f66219757f1b0e084293","isMergeCommit":false,"messageTitle":"Redesign OOP Ui, Storage, Parser, TaskList class have been added","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0},"java":{"insertions":372,"deletions":187}}},{"hash":"90880ee2bc6f347b549864b6dff60055ca25aba6","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-MoreOOP\u0027 Merge: A-MoreOOP","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"9ab10d415dcbce7831f9f5016b5f32f446b9f140","isMergeCommit":false,"messageTitle":"Add packges duke and task task - contains the different task classes, duke contains the main logic","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":103,"deletions":156},"bat":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}},{"hash":"2f0e5583a9ab3f6221f113868a5fe6c27bdbd4e9","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-Packages\u0027 Merge A-Packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{}},{"hash":"9f9eeca5f9e57dacc5d74e66872f5a228bb4bb3b","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027 Merge add-support-gradle","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"bf29c6c5371f7dfe774235ee026eb2aa58f44c0e","isMergeCommit":false,"messageTitle":"Add Junit for Deadlines and Parser method","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":140,"deletions":0}}},{"hash":"2795a87cbdc7514308e97dd86db0b47fe9df6995","isMergeCommit":true,"messageTitle":"Merge tag \u0027A-Junit\u0027 Merge Junit cases","messageBody":"","tags":["A-Jar","A-JUnit"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-27","commitResults":[{"hash":"66180ac7019f1e7d7f790952ad8ffdf584809a19","isMergeCommit":false,"messageTitle":"Add JavaDocs to all files for better documentation","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":199,"deletions":58}}},{"hash":"d3465621fe245b2aed7ad3191af1243c17f17f13","isMergeCommit":false,"messageTitle":"Updated code structure to adhere to coding standard","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":8}}},{"hash":"637ececb3fbeeb3f6b2389c8d09772a02e986b7d","isMergeCommit":false,"messageTitle":"Add minor changes to code to adhere to standards","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":44,"deletions":44}}},{"hash":"bcca04cf7abe0870dd0e1660ef78ce8f4dd836d0","isMergeCommit":false,"messageTitle":"Add Find Functionality Users can search for substrings of the task name","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":75,"deletions":29}}},{"hash":"b0b7e8fdef0e92ede676b84c6e5889c2c10bcf24","isMergeCommit":true,"messageTitle":"Merge tag \u0027A-JavaDoc\u0027 Merge Javadoc for better documentation of code","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{}},{"hash":"07f8616dad3c0dc791ae080782f395441793a6f0","isMergeCommit":true,"messageTitle":"Fix merge conflicts","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"401794e2d03e501664002730f899d12f62311cec","isMergeCommit":true,"messageTitle":"Resolved merge conflict with Find","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-28","commitResults":[{"hash":"125f24083e0847449ca5e0987437aa80d084ae09","isMergeCommit":false,"messageTitle":"Update file path to use relative paths","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":2}}},{"hash":"8ba08d060b31e50c07fdbbba61504c3f8316d6ed","isMergeCommit":false,"messageTitle":"Update build gradle to remove bug in main file location","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}}]},{"date":"2023-08-30","commitResults":[{"hash":"944a640cacf5d5f3b943b7b33410e73a95400a4b","isMergeCommit":false,"messageTitle":"Corrected the equals method for Deadline class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":3}}}]},{"date":"2023-09-02","commitResults":[{"hash":"3a78dbc373f82844b79b13709a5d9acd0bdbf65a","isMergeCommit":false,"messageTitle":"Edit Code to comply with the code styling guidelines","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":1},"java":{"insertions":137,"deletions":59}}}]},{"date":"2023-09-03","commitResults":[{"hash":"faa2549a79830bf49813a50f3eb101cde1759622","isMergeCommit":false,"messageTitle":"Add GUI with JavaFX","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":14,"deletions":0},"fxml":{"insertions":35,"deletions":0},"java":{"insertions":201,"deletions":18}}}]},{"date":"2023-09-06","commitResults":[{"hash":"cd8a40b40fb107ef7792dc2f0ac591b049f3d695","isMergeCommit":false,"messageTitle":"Update gradle entry path","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"java":{"insertions":13,"deletions":2}}}]},{"date":"2023-09-07","commitResults":[{"hash":"aaa43e427d8aa84b45c036d23d6a99aa3371425c","isMergeCommit":false,"messageTitle":"Update Duke to only launch from the launcer. Removed the CLI version of the application","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":58,"deletions":95}}},{"hash":"9864b00e3d616dfcb6d5ee30a2c3d47905f00e56","isMergeCommit":true,"messageTitle":"Merge branch \u0027Level-10\u0027 Merge with GUI branch","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-09","commitResults":[{"hash":"b265939bb81d5beded712d2097b8e7dba3cc6701","isMergeCommit":false,"messageTitle":"Updated coding standard based on feedback received","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":14}}}]}]},"authorFileTypeContributionMap":{"DonovanJJ":{"java":1142,"md":2,"fxml":35,"sh":0,"bat":1,"gradle":20,"txt":16}},"authorContributionVariance":{"DonovanJJ":76528.945},"authorDisplayNameMap":{"DonovanJJ":"CS2103T-T15-3 CHAN.. JUN"}} diff --git a/Jweng88_ip_master/authorship.json b/Jweng88_ip_master/authorship.json index 40f8e002..780c78e8 100644 --- a/Jweng88_ip_master/authorship.json +++ b/Jweng88_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":"Jweng88"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"Jweng88"},"content":"}","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"Jweng88"},"content":"checkstyle {","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"Jweng88"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":18,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":19,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"Jweng88"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"Jweng88"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"Jweng88"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"Jweng88"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"Jweng88"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"Jweng88"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"Jweng88"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"Jweng88"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"Jweng88"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"Jweng88"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"Jweng88"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"Jweng88"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"Jweng88"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":47,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":48,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":49,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":50,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":51,"author":{"gitId":"Jweng88"},"content":" mainClassName \u003d \u0027duke.Duke\u0027","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":53,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":54,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":55,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":56,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":57,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":58,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":59,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":60,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":61,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":62,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":63,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"Jweng88":24,"-":41}},{"path":"src/main/java/duke.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"Jweng88"},"content":"T | 1 | read book","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"Jweng88"},"content":"D | 0 | return book | 2023-08-15T19:00:40","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"Jweng88"},"content":"E | 0 | project meeting | 2023-08-28T16:00:49.455 | 2023-08-28T18:00:49.455","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"Jweng88"},"content":"T | 1 | join sports club","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"Jweng88":4}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jweng88"},"content":"package duke;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"Jweng88"},"content":"import duke.command.Command;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"Jweng88"},"content":"import duke.command.Parser;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"Jweng88"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"Jweng88"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"Jweng88"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"Jweng88"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"Jweng88"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Jweng88"},"content":" * The main class of the Duke application.","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Jweng88"},"content":" * Initializes the user interface, storage, and task list,","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"Jweng88"},"content":" * and runs the main loop of the application.","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Jweng88"},"content":"public class Duke {","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"Jweng88"},"content":" /** The storage for saving and loading the task list */","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Jweng88"},"content":" private final Storage storage;","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Jweng88"},"content":" /** The task list */","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Jweng88"},"content":" private TaskList tasks;","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Jweng88"},"content":" /** The user interface for interacting with the user */","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"Jweng88"},"content":" private final Ui ui;","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"Jweng88"},"content":" /** Flag indicating whether the application should exit */","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"Jweng88"},"content":" private boolean isExit;","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Jweng88"},"content":" * Constructs a Duke object with the given file path.","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Jweng88"},"content":" * Initializes the user interface, storage, and task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Jweng88"},"content":" public Duke() {","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"Jweng88"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"Jweng88"},"content":" storage \u003d new Storage(\"./src/main/java/duke.txt\");","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"Jweng88"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"Jweng88"},"content":" tasks \u003d new TaskList(storage.load());","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"Jweng88"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"Jweng88"},"content":" ui.showLoadingError();","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"Jweng88"},"content":" tasks \u003d new TaskList();","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"Jweng88"},"content":" * Displays the welcome message for Duke.","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"Jweng88"},"content":" * @return The welcome message as a string.","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"Jweng88"},"content":" public String initialise() {","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"Jweng88"},"content":" ui.showWelcome();","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"Jweng88"},"content":" return ui.getCurrentStatus();","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"Jweng88"},"content":" * Runs the main loop of the Duke application.","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"Jweng88"},"content":" * Reads user input, parses it, and executes the corresponding command.","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"Jweng88"},"content":" * @param input The user\u0027s input text.","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"Jweng88"},"content":" public void run(String input) {","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"Jweng88"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"Jweng88"},"content":" ui.showLine();","lastModifiedDate":"2023-09-05"},{"lineNumber":63,"author":{"gitId":"Jweng88"},"content":" Command c \u003d Parser.parse(input);","lastModifiedDate":"2023-09-05"},{"lineNumber":64,"author":{"gitId":"Jweng88"},"content":" c.execute(tasks, ui, storage);","lastModifiedDate":"2023-08-27"},{"lineNumber":65,"author":{"gitId":"Jweng88"},"content":" isExit \u003d c.isExit();","lastModifiedDate":"2023-08-27"},{"lineNumber":66,"author":{"gitId":"Jweng88"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":67,"author":{"gitId":"Jweng88"},"content":" ui.showError(e.getMessage());","lastModifiedDate":"2023-08-27"},{"lineNumber":68,"author":{"gitId":"Jweng88"},"content":" } finally {","lastModifiedDate":"2023-08-27"},{"lineNumber":69,"author":{"gitId":"Jweng88"},"content":" ui.showLine();","lastModifiedDate":"2023-08-27"},{"lineNumber":70,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":71,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":72,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":73,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"Jweng88"},"content":" * Generates a response to user input.","lastModifiedDate":"2023-09-05"},{"lineNumber":75,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"Jweng88"},"content":" * @param input The user\u0027s input text.","lastModifiedDate":"2023-09-05"},{"lineNumber":77,"author":{"gitId":"Jweng88"},"content":" * @return A response generated by Duke based on the user\u0027s input.","lastModifiedDate":"2023-09-05"},{"lineNumber":78,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"Jweng88"},"content":" public String getResponse(String input) {","lastModifiedDate":"2023-09-05"},{"lineNumber":80,"author":{"gitId":"Jweng88"},"content":" run(input);","lastModifiedDate":"2023-09-05"},{"lineNumber":81,"author":{"gitId":"Jweng88"},"content":" return ui.getCurrentStatus();","lastModifiedDate":"2023-09-05"},{"lineNumber":82,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":83,"author":{"gitId":"Jweng88"},"content":"}","lastModifiedDate":"2023-08-27"},{"lineNumber":84,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"Jweng88":84}},{"path":"src/main/java/duke/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jweng88"},"content":"package duke;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"Jweng88"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"Jweng88"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"Jweng88"},"content":" * The Launcher class serves as the entry point for the Duke application.","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"Jweng88"},"content":" * It uses JavaFX\u0027s Application.launch method to launch the application by","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"Jweng88"},"content":" * starting the Main class.","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"Jweng88"},"content":" * This class is primarily used to work around classpath issues that can","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"Jweng88"},"content":" * occur when launching JavaFX applications.","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"Jweng88"},"content":"public class Launcher {","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"Jweng88"},"content":" * Launches the Duke application by invoking JavaFX\u0027s Application.launch","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"Jweng88"},"content":" * method with the Main class and any command-line arguments.","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"Jweng88"},"content":" * The main method of the Launcher class.","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"Jweng88"},"content":" * @param args Command-line arguments passed to the application.","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"Jweng88"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"Jweng88"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"Jweng88"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"Jweng88":24}},{"path":"src/main/java/duke/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jweng88"},"content":"package duke;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"Jweng88"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"Jweng88"},"content":"import duke.ui.MainWindow;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"Jweng88"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"Jweng88"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"Jweng88"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"Jweng88"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"Jweng88"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"Jweng88"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"Jweng88"},"content":" * The Main class serves as the entry point for the Duke GUI application.","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"Jweng88"},"content":" * It initializes the Duke logic, loads the FXML-based user interface, and","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"Jweng88"},"content":" * starts the JavaFX application.","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"Jweng88"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"Jweng88"},"content":" /** The Duke instance that handles the application\u0027s logic */","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"Jweng88"},"content":" private final Duke duke \u003d new Duke();","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"Jweng88"},"content":" * Loads the main window using FXML, sets up the user interface,","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"Jweng88"},"content":" * and displays the application\u0027s primary stage.","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"Jweng88"},"content":" * The start method of the JavaFX application.","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"Jweng88"},"content":" * @param stage The primary stage for the JavaFX application.","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"Jweng88"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"Jweng88"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"Jweng88"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"Jweng88"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"Jweng88"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"Jweng88"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"Jweng88"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"Jweng88"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setDuke(duke);","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"Jweng88"},"content":" stage.show();","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"Jweng88"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"Jweng88"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"Jweng88"},"content":"}","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"Jweng88":44}},{"path":"src/main/java/duke/command/AddDeadlineCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jweng88"},"content":"package duke.command;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"Jweng88"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"Jweng88"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"Jweng88"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"Jweng88"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"Jweng88"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"Jweng88"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Jweng88"},"content":" * Represents a command to add a deadline task.","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Jweng88"},"content":" * Inherits from the Command class.","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Jweng88"},"content":"public class AddDeadlineCommand extends Command {","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Jweng88"},"content":" /** The description of the deadline to add */","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Jweng88"},"content":" private final String description;","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Jweng88"},"content":" /** The deadline of the deadline to add */","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Jweng88"},"content":" private final String by;","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Jweng88"},"content":" * Constructs an AddDeadlineCommand object with the given description and deadline.","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Jweng88"},"content":" * @param description The description of the deadline task.","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"Jweng88"},"content":" * @param by The deadline of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Jweng88"},"content":" public AddDeadlineCommand(String description, String by) {","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"Jweng88"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"Jweng88"},"content":" this.by \u003d by;","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Jweng88"},"content":" * Executes the AddDeadlineCommand by adding the deadline task to the task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"Jweng88"},"content":" * @param tasks The task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"Jweng88"},"content":" * @param ui The user interface.","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"Jweng88"},"content":" * @param storage The storage component.","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"Jweng88"},"content":" * @throws DukeException If an error occurs while executing the command.","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"Jweng88"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"Jweng88"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"Jweng88"},"content":" if (description.isEmpty() || by.isEmpty()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"Jweng88"},"content":" throw new DukeException(\"☹ OOPS!!! The format of a deadline should be: \"","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"Jweng88"},"content":" + \"deadline DESCRIPTION /by DATE\");","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"Jweng88"},"content":" tasks.addTask(new Deadline(description, by));","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"Jweng88"},"content":" ui.showTaskAddedMessage(tasks);","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"Jweng88"},"content":" * Returns a boolean indicating whether the command is an exit command.","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"Jweng88"},"content":" * @return A boolean indicating whether the command is an exit command.","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"Jweng88"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"Jweng88"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"Jweng88"},"content":" return false;","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":59,"author":{"gitId":"Jweng88"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"Jweng88":59}},{"path":"src/main/java/duke/command/AddEventCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jweng88"},"content":"package duke.command;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"Jweng88"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"Jweng88"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"Jweng88"},"content":"import duke.task.Event;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"Jweng88"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"Jweng88"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"Jweng88"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Jweng88"},"content":" * Represents a command to add an event task.","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Jweng88"},"content":" * Inherits from the Command class.","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Jweng88"},"content":"public class AddEventCommand extends Command {","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Jweng88"},"content":" /** The description of the event to add */","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Jweng88"},"content":" private final String description;","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Jweng88"},"content":" /** The start time of the event to add */","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Jweng88"},"content":" private final String from;","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Jweng88"},"content":" /** The end time of the event to add */","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Jweng88"},"content":" private final String to;","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"Jweng88"},"content":" * Constructs an AddEventCommand object with the given description, start time, and end time.","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Jweng88"},"content":" * @param description The description of the event task.","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Jweng88"},"content":" * @param from The start time of the event.","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Jweng88"},"content":" * @param to The end time of the event.","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Jweng88"},"content":" public AddEventCommand(String description, String from, String to) {","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"Jweng88"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"Jweng88"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"Jweng88"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"Jweng88"},"content":" * Executes the AddEventCommand by adding the event task to the task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"Jweng88"},"content":" * @param tasks The task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"Jweng88"},"content":" * @param ui The user interface.","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"Jweng88"},"content":" * @param storage The storage component.","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"Jweng88"},"content":" * @throws DukeException If an error occurs while executing the command.","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"Jweng88"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"Jweng88"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"Jweng88"},"content":" if (description.isEmpty() || from.isEmpty() || to.isEmpty()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"Jweng88"},"content":" throw new DukeException(\"☹ OOPS!!! The format of an event should be: \"","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"Jweng88"},"content":" + \"event DESCRIPTION /from DATE /to DATE\");","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"Jweng88"},"content":" tasks.addTask(new Event(description, from, to));","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"Jweng88"},"content":" ui.showTaskAddedMessage(tasks);","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"Jweng88"},"content":" * Returns a boolean indicating whether the command is an exit command.","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"Jweng88"},"content":" * @return A boolean indicating whether the command is an exit command.","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"Jweng88"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"Jweng88"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"Jweng88"},"content":" return false;","lastModifiedDate":"2023-08-27"},{"lineNumber":63,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":64,"author":{"gitId":"Jweng88"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"Jweng88":64}},{"path":"src/main/java/duke/command/AddTodoCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jweng88"},"content":"package duke.command;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"Jweng88"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"Jweng88"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"Jweng88"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"Jweng88"},"content":"import duke.task.ToDo;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"Jweng88"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"Jweng88"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Jweng88"},"content":" * Represents a command to add a todo task.","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Jweng88"},"content":" * Inherits from the Command class.","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Jweng88"},"content":"public class AddTodoCommand extends Command {","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Jweng88"},"content":" /** The description of the todo to add */","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Jweng88"},"content":" private final String description;","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Jweng88"},"content":" * Constructs an AddTodoCommand object with the given description.","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Jweng88"},"content":" * @param description The description of the todo task.","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Jweng88"},"content":" public AddTodoCommand(String description) {","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"Jweng88"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Jweng88"},"content":" * Executes the AddTodoCommand by adding the todo task to the task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Jweng88"},"content":" * @param tasks The task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Jweng88"},"content":" * @param ui The user interface.","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Jweng88"},"content":" * @param storage The storage component.","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Jweng88"},"content":" * @throws DukeException If an error occurs while executing the command.","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"Jweng88"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"Jweng88"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"Jweng88"},"content":" if (description.isEmpty()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"Jweng88"},"content":" throw new DukeException(\"☹ OOPS!!! The description of a todo cannot be empty.\");","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"Jweng88"},"content":" tasks.addTask(new ToDo(description));","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"Jweng88"},"content":" ui.showTaskAddedMessage(tasks);","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"Jweng88"},"content":" * Returns a boolean indicating whether the command is an exit command.","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"Jweng88"},"content":" * @return A boolean indicating whether the command is an exit command.","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"Jweng88"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"Jweng88"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"Jweng88"},"content":" return false;","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"Jweng88"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"Jweng88":53}},{"path":"src/main/java/duke/command/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jweng88"},"content":"package duke.command;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"Jweng88"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"Jweng88"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"Jweng88"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"Jweng88"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"Jweng88"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Jweng88"},"content":" * Represents an abstract command that can be executed by the Duke chatbot.","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Jweng88"},"content":" * Provides an execute method and an isExit method that must be implemented by subclasses.","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Jweng88"},"content":"public abstract class Command {","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Jweng88"},"content":" * Executes the command with the given task list, user interface, and storage component.","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Jweng88"},"content":" * @param tasks The task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Jweng88"},"content":" * @param ui The user interface.","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Jweng88"},"content":" * @param storage The storage component.","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Jweng88"},"content":" * @throws DukeException If an error occurs while executing the command.","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Jweng88"},"content":" public abstract void execute(TaskList tasks, Ui ui, Storage storage) throws DukeException;","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"Jweng88"},"content":" * Returns a boolean indicating whether the command is an exit command.","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Jweng88"},"content":" * @return A boolean indicating whether the command is an exit command.","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Jweng88"},"content":" public abstract boolean isExit();","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"Jweng88"},"content":"}","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"Jweng88":31}},{"path":"src/main/java/duke/command/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jweng88"},"content":"package duke.command;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"Jweng88"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"Jweng88"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"Jweng88"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"Jweng88"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"Jweng88"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"Jweng88"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Jweng88"},"content":" * Represents a command to delete a task from the task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Jweng88"},"content":" * Inherits from the Command class.","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Jweng88"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Jweng88"},"content":" /** The index of the task to delete */","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Jweng88"},"content":" private final int taskIndex;","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Jweng88"},"content":" * Constructs a DeleteCommand object with the given task index.","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Jweng88"},"content":" * @param taskIndex The index of the task to be deleted.","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Jweng88"},"content":" public DeleteCommand(int taskIndex) {","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"Jweng88"},"content":" this.taskIndex \u003d taskIndex - 1;","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Jweng88"},"content":" * Executes the DeleteCommand by deleting the task from the task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Jweng88"},"content":" * @param tasks The task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Jweng88"},"content":" * @param ui The user interface.","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Jweng88"},"content":" * @param storage The storage component.","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Jweng88"},"content":" * @throws DukeException If an error occurs while executing the command.","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"Jweng88"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"Jweng88"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"Jweng88"},"content":" if (taskIndex \u003e\u003d 0 \u0026\u0026 taskIndex \u003c tasks.size()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"Jweng88"},"content":" Task removedTask \u003d tasks.deleteTask(taskIndex);","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"Jweng88"},"content":" ui.showTaskRemoved(tasks, removedTask);","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"Jweng88"},"content":" } else {","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"Jweng88"},"content":" throw new DukeException(\"Invalid task number.\");","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"Jweng88"},"content":" * Returns a boolean indicating whether the command is an exit command.","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"Jweng88"},"content":" * @return A boolean indicating whether the command is an exit command.","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"Jweng88"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"Jweng88"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"Jweng88"},"content":" return false;","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"Jweng88"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"Jweng88":54}},{"path":"src/main/java/duke/command/ExitCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jweng88"},"content":"package duke.command;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"Jweng88"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"Jweng88"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"Jweng88"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"Jweng88"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"Jweng88"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Jweng88"},"content":" * Represents a command to exit the Duke chatbot.","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Jweng88"},"content":" * Inherits from the Command class.","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Jweng88"},"content":"public class ExitCommand extends Command {","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Jweng88"},"content":" * Executes the ExitCommand by displaying a goodbye message and saving the tasks to storage.","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Jweng88"},"content":" * @param tasks The task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Jweng88"},"content":" * @param ui The user interface.","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Jweng88"},"content":" * @param storage The storage component.","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Jweng88"},"content":" * @throws DukeException If an error occurs while executing the command.","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Jweng88"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"Jweng88"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"Jweng88"},"content":" ui.showGoodbyeMessage();","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"Jweng88"},"content":" storage.save(tasks.getTasks());","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Jweng88"},"content":" * Returns a boolean indicating whether the command is an exit command.","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Jweng88"},"content":" * @return A boolean indicating whether the command is an exit command.","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Jweng88"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"Jweng88"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"Jweng88"},"content":" return true;","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"Jweng88"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"Jweng88":37}},{"path":"src/main/java/duke/command/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jweng88"},"content":"package duke.command;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"Jweng88"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Jweng88"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Jweng88"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Jweng88"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"Jweng88"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Jweng88"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Jweng88"},"content":" * Represents a command to find tasks containing a specific keyword.","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Jweng88"},"content":"public class FindCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"Jweng88"},"content":" /** The keyword to search for in task descriptions */","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Jweng88"},"content":" private final String keyword;","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Jweng88"},"content":" * Constructs a FindCommand object with the specified keyword.","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Jweng88"},"content":" * @param keyword The keyword to search for in task descriptions.","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Jweng88"},"content":" public FindCommand(String keyword) {","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Jweng88"},"content":" this.keyword \u003d keyword;","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Jweng88"},"content":" * Executes the FindCommand. Searches for tasks containing the keyword in the task list","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Jweng88"},"content":" * and displays the matching tasks or a message if no matching tasks are found.","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Jweng88"},"content":" * @param tasks The task list containing tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Jweng88"},"content":" * @param ui The user interface for displaying messages.","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Jweng88"},"content":" * @param storage The storage object for saving tasks to a file.","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"Jweng88"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"Jweng88"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"Jweng88"},"content":" TaskList matchingTasks \u003d new TaskList();","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"Jweng88"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"Jweng88"},"content":" Task task \u003d tasks.get(i);","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"Jweng88"},"content":" if (task.getDescription().contains(keyword)) {","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"Jweng88"},"content":" matchingTasks.addTask(task);","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"Jweng88"},"content":" if (matchingTasks.size() \u003d\u003d 0) {","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"Jweng88"},"content":" ui.showNoMatchingTasks();","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"Jweng88"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"Jweng88"},"content":" ui.showMatchingTasks(matchingTasks);","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"Jweng88"},"content":" * Returns whether the command is an exit command.","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"Jweng88"},"content":" * @return False, as the FindCommand is not an exit command.","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"Jweng88"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"Jweng88"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"Jweng88"},"content":" return false;","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"Jweng88"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"Jweng88":60}},{"path":"src/main/java/duke/command/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jweng88"},"content":"package duke.command;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"Jweng88"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Jweng88"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"Jweng88"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"Jweng88"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"Jweng88"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Jweng88"},"content":" * Represents a command to list all tasks in the task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Jweng88"},"content":" * Inherits from the Command class.","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Jweng88"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Jweng88"},"content":" * Executes the ListCommand by displaying the task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Jweng88"},"content":" * @param tasks The task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Jweng88"},"content":" * @param ui The user interface.","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Jweng88"},"content":" * @param storage The storage component.","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Jweng88"},"content":" * @throws DukeException If an error occurs while executing the command.","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Jweng88"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"Jweng88"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"Jweng88"},"content":" ui.showTaskList(tasks);","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Jweng88"},"content":" * Returns a boolean indicating whether the command is an exit command.","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Jweng88"},"content":" * @return A boolean indicating whether the command is an exit command.","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Jweng88"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"Jweng88"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"Jweng88"},"content":" return false;","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"Jweng88"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"Jweng88":36}},{"path":"src/main/java/duke/command/MarkAsDoneCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jweng88"},"content":"package duke.command;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"Jweng88"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"Jweng88"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"Jweng88"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"Jweng88"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"Jweng88"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Jweng88"},"content":" * Represents a command to mark a task as done in the task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Jweng88"},"content":" * Inherits from the Command class.","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Jweng88"},"content":"public class MarkAsDoneCommand extends Command {","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Jweng88"},"content":" /** The index of the task to mark as done */","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Jweng88"},"content":" private final int taskIndex;","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Jweng88"},"content":" * Constructs a MarkAsDoneCommand object with the given task index.","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Jweng88"},"content":" * @param taskIndex The index of the task to be marked as done.","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Jweng88"},"content":" public MarkAsDoneCommand(int taskIndex) {","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"Jweng88"},"content":" this.taskIndex \u003d taskIndex - 1;","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Jweng88"},"content":" * Executes the MarkAsDoneCommand by marking the task as done in the task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Jweng88"},"content":" * @param tasks The task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Jweng88"},"content":" * @param ui The user interface.","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Jweng88"},"content":" * @param storage The storage component.","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Jweng88"},"content":" * @throws DukeException If an error occurs while executing the command.","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"Jweng88"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"Jweng88"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"Jweng88"},"content":" if (taskIndex \u003e\u003d 0 \u0026\u0026 taskIndex \u003c tasks.size()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"Jweng88"},"content":" tasks.markTaskAsDone(taskIndex);","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"Jweng88"},"content":" ui.showTaskMarkedAsDone(tasks, taskIndex);","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"Jweng88"},"content":" } else {","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"Jweng88"},"content":" throw new DukeException(\"Invalid task number.\");","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"Jweng88"},"content":" * Returns a boolean indicating whether the command is an exit command.","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"Jweng88"},"content":" * @return A boolean indicating whether the command is an exit command.","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"Jweng88"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"Jweng88"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"Jweng88"},"content":" return false;","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"Jweng88"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"Jweng88":53}},{"path":"src/main/java/duke/command/MarkAsUndoneCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jweng88"},"content":"package duke.command;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"Jweng88"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"Jweng88"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"Jweng88"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"Jweng88"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"Jweng88"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Jweng88"},"content":" * Represents a command to mark a task as undone in the task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Jweng88"},"content":" * Inherits from the Command class.","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Jweng88"},"content":"public class MarkAsUndoneCommand extends Command {","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Jweng88"},"content":" /** The index of the task to mark as undone */","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Jweng88"},"content":" private final int taskIndex;","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Jweng88"},"content":" * Constructs a MarkAsUndoneCommand object with the given task index.","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Jweng88"},"content":" * @param taskIndex The index of the task to be marked as undone.","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Jweng88"},"content":" public MarkAsUndoneCommand(int taskIndex) {","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"Jweng88"},"content":" this.taskIndex \u003d taskIndex - 1;","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Jweng88"},"content":" * Executes the MarkAsUndoneCommand by marking the task as undone in the task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Jweng88"},"content":" * @param tasks The task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Jweng88"},"content":" * @param ui The user interface.","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Jweng88"},"content":" * @param storage The storage component.","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Jweng88"},"content":" * @throws DukeException If an error occurs while executing the command.","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"Jweng88"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"Jweng88"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"Jweng88"},"content":" if (taskIndex \u003e\u003d 0 \u0026\u0026 taskIndex \u003c tasks.size()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"Jweng88"},"content":" tasks.markTaskAsUndone(taskIndex);","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"Jweng88"},"content":" ui.showTaskMarkedAsUndone(tasks, taskIndex);","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"Jweng88"},"content":" } else {","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"Jweng88"},"content":" throw new DukeException(\"Invalid task number.\");","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"Jweng88"},"content":" * Returns a boolean indicating whether the command is an exit command.","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"Jweng88"},"content":" * @return A boolean indicating whether the command is an exit command.","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"Jweng88"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"Jweng88"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"Jweng88"},"content":" return false;","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"Jweng88"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"Jweng88":53}},{"path":"src/main/java/duke/command/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jweng88"},"content":"package duke.command;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"Jweng88"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"Jweng88"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Jweng88"},"content":" * Parses user input and returns the corresponding command object.","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Jweng88"},"content":"public class Parser {","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Jweng88"},"content":" * An enumeration of all possible command types.","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Jweng88"},"content":" public enum CommandType {","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"Jweng88"},"content":" TODO, DEADLINE, EVENT, LIST, MARK, UNMARK, DELETE, FIND, BYE","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Jweng88"},"content":" * Parses the given user input and returns the corresponding command object.","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Jweng88"},"content":" * @param fullCommand The user input to be parsed.","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Jweng88"},"content":" * @return The corresponding command object.","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Jweng88"},"content":" * @throws DukeException If an error occurs while parsing the input.","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Jweng88"},"content":" public static Command parse(String fullCommand) throws DukeException {","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"Jweng88"},"content":" String[] commandParts \u003d fullCommand.split(\" \", 2);","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"Jweng88"},"content":" String commandTypeStr \u003d commandParts[0].toLowerCase();","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"Jweng88"},"content":" CommandType commandType;","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"Jweng88"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"Jweng88"},"content":" commandType \u003d CommandType.valueOf(commandTypeStr.toUpperCase());","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"Jweng88"},"content":" } catch (IllegalArgumentException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"Jweng88"},"content":" throw new DukeException(\"I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"Jweng88"},"content":" switch (commandType) {","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"Jweng88"},"content":" case TODO:","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"Jweng88"},"content":" return new AddTodoCommand(commandParts[1]);","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"Jweng88"},"content":" case DEADLINE:","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"Jweng88"},"content":" int byIndex \u003d commandParts[1].indexOf(\"/by\");","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"Jweng88"},"content":" if (byIndex \u003d\u003d -1) {","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"Jweng88"},"content":" throw new DukeException(\"The format of a deadline should be: deadline DESCRIPTION /by DATE\");","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"Jweng88"},"content":" String description \u003d commandParts[1].substring(0, byIndex).trim();","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"Jweng88"},"content":" String by \u003d commandParts[1].substring(byIndex + 3).trim();","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"Jweng88"},"content":" return new AddDeadlineCommand(description, by);","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"Jweng88"},"content":" case EVENT:","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"Jweng88"},"content":" int fromIndex \u003d commandParts[1].indexOf(\"/from\");","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"Jweng88"},"content":" if (fromIndex \u003d\u003d -1) {","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"Jweng88"},"content":" throw new DukeException(\"The format of an event should be: event DESCRIPTION /from DATE /to DATE\");","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"Jweng88"},"content":" description \u003d commandParts[1].substring(0, fromIndex).trim();","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"Jweng88"},"content":" String fromTo \u003d commandParts[1].substring(fromIndex + 6).trim();","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"Jweng88"},"content":" if (fromTo.isEmpty()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"Jweng88"},"content":" throw new DukeException(\"The format of an event should be: event DESCRIPTION /from DATE /to DATE\");","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"Jweng88"},"content":" String[] fromToParts \u003d fromTo.split(\"/to\");","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"Jweng88"},"content":" String from \u003d fromToParts[0].trim();","lastModifiedDate":"2023-08-27"},{"lineNumber":59,"author":{"gitId":"Jweng88"},"content":" String to \u003d fromToParts[1].trim();","lastModifiedDate":"2023-08-27"},{"lineNumber":60,"author":{"gitId":"Jweng88"},"content":" return new AddEventCommand(description, from, to);","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"Jweng88"},"content":" case LIST:","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"Jweng88"},"content":" return new ListCommand();","lastModifiedDate":"2023-08-27"},{"lineNumber":63,"author":{"gitId":"Jweng88"},"content":" case MARK:","lastModifiedDate":"2023-08-27"},{"lineNumber":64,"author":{"gitId":"Jweng88"},"content":" return new MarkAsDoneCommand(Integer.parseInt(commandParts[1]));","lastModifiedDate":"2023-08-27"},{"lineNumber":65,"author":{"gitId":"Jweng88"},"content":" case UNMARK:","lastModifiedDate":"2023-08-27"},{"lineNumber":66,"author":{"gitId":"Jweng88"},"content":" return new MarkAsUndoneCommand(Integer.parseInt(commandParts[1]));","lastModifiedDate":"2023-08-27"},{"lineNumber":67,"author":{"gitId":"Jweng88"},"content":" case DELETE:","lastModifiedDate":"2023-08-27"},{"lineNumber":68,"author":{"gitId":"Jweng88"},"content":" return new DeleteCommand(Integer.parseInt(commandParts[1]));","lastModifiedDate":"2023-08-27"},{"lineNumber":69,"author":{"gitId":"Jweng88"},"content":" case FIND:","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"Jweng88"},"content":" return new FindCommand(commandParts[1]);","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"Jweng88"},"content":" case BYE:","lastModifiedDate":"2023-08-27"},{"lineNumber":72,"author":{"gitId":"Jweng88"},"content":" return new ExitCommand();","lastModifiedDate":"2023-08-27"},{"lineNumber":73,"author":{"gitId":"Jweng88"},"content":" default:","lastModifiedDate":"2023-08-27"},{"lineNumber":74,"author":{"gitId":"Jweng88"},"content":" throw new DukeException(\"I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-08-27"},{"lineNumber":75,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":76,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":77,"author":{"gitId":"Jweng88"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"Jweng88":77}},{"path":"src/main/java/duke/exception/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jweng88"},"content":"package duke.exception;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"Jweng88"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Jweng88"},"content":" * Represents an exception specific to the Duke chatbot.","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Jweng88"},"content":" * Inherits from the Exception class.","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"Jweng88"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Jweng88"},"content":" * Constructs a DukeException object with the given error message.","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Jweng88"},"content":" * @param message The error message associated with the exception.","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Jweng88"},"content":" public DukeException(String message) {","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"Jweng88"},"content":" super(message);","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"Jweng88"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"Jweng88":17}},{"path":"src/main/java/duke/storage/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jweng88"},"content":"package duke.storage;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"Jweng88"},"content":"import java.io.File;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"Jweng88"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"Jweng88"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"Jweng88"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"Jweng88"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"Jweng88"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"Jweng88"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"Jweng88"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Jweng88"},"content":" * Represents the storage component of the Duke chatbot.","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Jweng88"},"content":" * Handles loading and saving of tasks to a file.","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Jweng88"},"content":"public class Storage {","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Jweng88"},"content":" /** The file path of the storage */","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Jweng88"},"content":" private final String filePath;","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Jweng88"},"content":" * Constructs a Storage object with the given file path.","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Jweng88"},"content":" * @param filePath The file path of the file to be used for storage.","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"Jweng88"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"Jweng88"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Jweng88"},"content":" * Loads tasks from the file.","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Jweng88"},"content":" * @return An ArrayList of tasks loaded from the file.","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"Jweng88"},"content":" * @throws DukeException If an error occurs while loading the tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"Jweng88"},"content":" public ArrayList\u003cTask\u003e load() throws DukeException {","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"Jweng88"},"content":" ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"Jweng88"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"Jweng88"},"content":" File file \u003d new File(filePath);","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"Jweng88"},"content":" Scanner scanner \u003d new Scanner(file);","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"Jweng88"},"content":" while (scanner.hasNextLine()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"Jweng88"},"content":" String line \u003d scanner.nextLine();","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"Jweng88"},"content":" if (!line.isEmpty()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"Jweng88"},"content":" Task task \u003d Task.createTaskFromFormattedString(line);","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"Jweng88"},"content":" if (task !\u003d null) {","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"Jweng88"},"content":" tasks.add(task);","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"Jweng88"},"content":" } else {","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"Jweng88"},"content":" break;","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"Jweng88"},"content":" scanner.close();","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"Jweng88"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"Jweng88"},"content":" throw new DukeException(\"Error loading tasks from file.\");","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"Jweng88"},"content":" return tasks;","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":59,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"Jweng88"},"content":" * Saves tasks to the file.","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"Jweng88"},"content":" * @param tasks The ArrayList of tasks to be saved.","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"Jweng88"},"content":" * @throws DukeException If an error occurs while saving the tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"Jweng88"},"content":" public void save(ArrayList\u003cTask\u003e tasks) throws DukeException {","lastModifiedDate":"2023-08-27"},{"lineNumber":66,"author":{"gitId":"Jweng88"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":67,"author":{"gitId":"Jweng88"},"content":" File file \u003d new File(filePath);","lastModifiedDate":"2023-08-27"},{"lineNumber":68,"author":{"gitId":"Jweng88"},"content":" FileWriter writer \u003d new FileWriter(file);","lastModifiedDate":"2023-08-27"},{"lineNumber":69,"author":{"gitId":"Jweng88"},"content":" for (Task task : tasks) {","lastModifiedDate":"2023-08-27"},{"lineNumber":70,"author":{"gitId":"Jweng88"},"content":" writer.write(task.toFormattedString() + \"\\n\");","lastModifiedDate":"2023-08-27"},{"lineNumber":71,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":72,"author":{"gitId":"Jweng88"},"content":" writer.close();","lastModifiedDate":"2023-08-27"},{"lineNumber":73,"author":{"gitId":"Jweng88"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":74,"author":{"gitId":"Jweng88"},"content":" throw new DukeException(\"Error saving tasks to file.\");","lastModifiedDate":"2023-08-27"},{"lineNumber":75,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":76,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":77,"author":{"gitId":"Jweng88"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"Jweng88":77}},{"path":"src/main/java/duke/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jweng88"},"content":"package duke.task;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"Jweng88"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"Jweng88"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"Jweng88"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"Jweng88"},"content":" * Represents a task with a deadline.","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Jweng88"},"content":" * Inherits from the Task class.","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Jweng88"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Jweng88"},"content":" /** The deadline of the task */","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Jweng88"},"content":" protected LocalDateTime by;","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Jweng88"},"content":" * Constructs a Deadline object with the given description and deadline.","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Jweng88"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Jweng88"},"content":" * @param by The deadline of the task in the format \"yyyy-MM-dd HH:mm\".","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Jweng88"},"content":" public Deadline(String description, String by) {","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"Jweng88"},"content":" super(description);","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"Jweng88"},"content":" this.by \u003d LocalDateTime.parse(by);","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Jweng88"},"content":" * Returns a string representation of the Deadline object.","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Jweng88"},"content":" * @return A string representation of the Deadline object.","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Jweng88"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"Jweng88"},"content":" public String toString() {","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"Jweng88"},"content":" return \"[D]\" + super.toString() + \" (by: \"","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"Jweng88"},"content":" + by.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy HH:mm\")) + \")\";","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"Jweng88"},"content":" * Returns a formatted string representation of the Deadline object.","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"Jweng88"},"content":" * @return A formatted string representation of the Deadline object.","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"Jweng88"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"Jweng88"},"content":" public String toFormattedString() {","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"Jweng88"},"content":" return \"D | \" + (isDone ? \"1\" : \"0\") + \" | \"","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"Jweng88"},"content":" + description + \" | \" + by;","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"Jweng88"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"Jweng88":47}},{"path":"src/main/java/duke/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jweng88"},"content":"package duke.task;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"Jweng88"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"Jweng88"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"Jweng88"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"Jweng88"},"content":" * Represents a task that starts and ends at specific times.","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Jweng88"},"content":" * Inherits from the Task class.","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Jweng88"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Jweng88"},"content":" /** The start time of the event */","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Jweng88"},"content":" protected LocalDateTime from;","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Jweng88"},"content":" /** The end time of the event */","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Jweng88"},"content":" protected LocalDateTime to;","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Jweng88"},"content":" * Constructs an Event object with the given description, start time, and end time.","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Jweng88"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Jweng88"},"content":" * @param from The start time of the task in the format \"yyyy-MM-dd HH:mm\".","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Jweng88"},"content":" * @param to The end time of the task in the format \"yyyy-MM-dd HH:mm\".","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"Jweng88"},"content":" public Event(String description, String from, String to) {","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"Jweng88"},"content":" super(description);","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"Jweng88"},"content":" this.from \u003d LocalDateTime.parse(from);","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"Jweng88"},"content":" this.to \u003d LocalDateTime.parse(to);","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Jweng88"},"content":" * Returns a string representation of the Event object.","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"Jweng88"},"content":" * @return A string representation of the Event object.","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"Jweng88"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"Jweng88"},"content":" public String toString() {","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"Jweng88"},"content":" return \"[E]\" + super.toString()","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"Jweng88"},"content":" + \" (from: \" + from.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy HH:mm\"))","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"Jweng88"},"content":" + \" to: \" + to.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy HH:mm\")) + \")\";","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"Jweng88"},"content":" * Returns a formatted string representation of the Event object.","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"Jweng88"},"content":" * @return A formatted string representation of the Event object.","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"Jweng88"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"Jweng88"},"content":" public String toFormattedString() {","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"Jweng88"},"content":" return \"E | \" + (isDone ? \"1\" : \"0\") + \" | \"","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"Jweng88"},"content":" + description + \" | \" + from + \" | \" + to;","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"Jweng88"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"Jweng88":53}},{"path":"src/main/java/duke/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jweng88"},"content":"package duke.task;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"Jweng88"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Jweng88"},"content":" * Represents a task with a description and completion status.","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Jweng88"},"content":"public class Task {","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Jweng88"},"content":" /** Represents a task in the task list */","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Jweng88"},"content":" protected String description;","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Jweng88"},"content":" /** Indicates whether the task is done or not */","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Jweng88"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Jweng88"},"content":" * Constructs a Task object with the given description.","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Jweng88"},"content":" * The initial completion status is set to false.","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Jweng88"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Jweng88"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"Jweng88"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"Jweng88"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"Jweng88"},"content":" * Marks the task as done by setting the completion status to true.","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Jweng88"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"Jweng88"},"content":" isDone \u003d true;","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Jweng88"},"content":" * Marks the task as not done by setting the completion status to false.","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"Jweng88"},"content":" public void markAsNotDone() {","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"Jweng88"},"content":" isDone \u003d false;","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"Jweng88"},"content":" * Returns the status icon of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"Jweng88"},"content":" * @return The status icon of the task (\"[X]\" if done, \"[ ]\" if not done).","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"Jweng88"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"Jweng88"},"content":" return (isDone ? \"[X]\" : \"[ ]\");","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"Jweng88"},"content":" * Returns the description of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"Jweng88"},"content":" * @return The description of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"Jweng88"},"content":" public String getDescription() {","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"Jweng88"},"content":" return description;","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"Jweng88"},"content":" * Returns a string representation of the Task object.","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"Jweng88"},"content":" * @return A string representation of the Task object.","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"Jweng88"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":63,"author":{"gitId":"Jweng88"},"content":" public String toString() {","lastModifiedDate":"2023-08-27"},{"lineNumber":64,"author":{"gitId":"Jweng88"},"content":" return this.getStatusIcon() + \" \" + this.getDescription();","lastModifiedDate":"2023-08-27"},{"lineNumber":65,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":66,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":67,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"Jweng88"},"content":" * Returns a formatted string representation of the Task object.","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"Jweng88"},"content":" * @return A formatted string representation of the Task object.","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"Jweng88"},"content":" public String toFormattedString() {","lastModifiedDate":"2023-08-27"},{"lineNumber":73,"author":{"gitId":"Jweng88"},"content":" return \"\";","lastModifiedDate":"2023-08-27"},{"lineNumber":74,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":75,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":76,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"Jweng88"},"content":" * Creates a Task object from a formatted string representation.","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"Jweng88"},"content":" * @param formattedString The formatted string representation of the Task object.","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"Jweng88"},"content":" * @return The Task object created from the formatted string.","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"Jweng88"},"content":" public static Task createTaskFromFormattedString(String formattedString) {","lastModifiedDate":"2023-08-27"},{"lineNumber":83,"author":{"gitId":"Jweng88"},"content":" String[] parts \u003d formattedString.split(\" \\\\| \");","lastModifiedDate":"2023-08-27"},{"lineNumber":84,"author":{"gitId":"Jweng88"},"content":" String taskType \u003d parts[0];","lastModifiedDate":"2023-08-27"},{"lineNumber":85,"author":{"gitId":"Jweng88"},"content":" boolean isDone \u003d parts[1].equals(\"1\");","lastModifiedDate":"2023-08-27"},{"lineNumber":86,"author":{"gitId":"Jweng88"},"content":" String description \u003d parts[2];","lastModifiedDate":"2023-08-27"},{"lineNumber":87,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":88,"author":{"gitId":"Jweng88"},"content":" switch (taskType) {","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"Jweng88"},"content":" case \"T\":","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"Jweng88"},"content":" Task todo \u003d new ToDo(description);","lastModifiedDate":"2023-08-27"},{"lineNumber":91,"author":{"gitId":"Jweng88"},"content":" todo.isDone \u003d isDone;","lastModifiedDate":"2023-08-27"},{"lineNumber":92,"author":{"gitId":"Jweng88"},"content":" return todo;","lastModifiedDate":"2023-08-27"},{"lineNumber":93,"author":{"gitId":"Jweng88"},"content":" case \"D\":","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"Jweng88"},"content":" String by \u003d parts[3];","lastModifiedDate":"2023-08-27"},{"lineNumber":95,"author":{"gitId":"Jweng88"},"content":" Task deadline \u003d new Deadline(description, by);","lastModifiedDate":"2023-08-27"},{"lineNumber":96,"author":{"gitId":"Jweng88"},"content":" deadline.isDone \u003d isDone;","lastModifiedDate":"2023-08-27"},{"lineNumber":97,"author":{"gitId":"Jweng88"},"content":" return deadline;","lastModifiedDate":"2023-08-27"},{"lineNumber":98,"author":{"gitId":"Jweng88"},"content":" case \"E\":","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"Jweng88"},"content":" String from \u003d parts[3];","lastModifiedDate":"2023-08-27"},{"lineNumber":100,"author":{"gitId":"Jweng88"},"content":" String to \u003d parts[4];","lastModifiedDate":"2023-08-27"},{"lineNumber":101,"author":{"gitId":"Jweng88"},"content":" Task event \u003d new Event(description, from, to);","lastModifiedDate":"2023-08-27"},{"lineNumber":102,"author":{"gitId":"Jweng88"},"content":" event.isDone \u003d isDone;","lastModifiedDate":"2023-08-27"},{"lineNumber":103,"author":{"gitId":"Jweng88"},"content":" return event;","lastModifiedDate":"2023-08-27"},{"lineNumber":104,"author":{"gitId":"Jweng88"},"content":" default:","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"Jweng88"},"content":" // Handle unrecognized task type","lastModifiedDate":"2023-08-27"},{"lineNumber":106,"author":{"gitId":"Jweng88"},"content":" return null;","lastModifiedDate":"2023-08-27"},{"lineNumber":107,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":108,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":109,"author":{"gitId":"Jweng88"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"Jweng88":109}},{"path":"src/main/java/duke/task/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jweng88"},"content":"package duke.task;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"Jweng88"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"Jweng88"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"Jweng88"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Jweng88"},"content":" * Represents a list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Jweng88"},"content":"public class TaskList {","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Jweng88"},"content":" /** The tasks in the task list */","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Jweng88"},"content":" private final ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Jweng88"},"content":" * Constructs a TaskList object with the given list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Jweng88"},"content":" * @param tasks The list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Jweng88"},"content":" public TaskList(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"Jweng88"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"Jweng88"},"content":" * Constructs an empty TaskList object.","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Jweng88"},"content":" public TaskList() {","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"Jweng88"},"content":" this.tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Jweng88"},"content":" * Returns the number of tasks in the list.","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"Jweng88"},"content":" * @return The number of tasks in the list.","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"Jweng88"},"content":" public int size() {","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"Jweng88"},"content":" return tasks.size();","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"Jweng88"},"content":" * Adds a task to the list.","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"Jweng88"},"content":" * @param task The task to be added.","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"Jweng88"},"content":" public void addTask(Task task) {","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"Jweng88"},"content":" tasks.add(task);","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"Jweng88"},"content":" * Deletes a task from the list at the specified index.","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"Jweng88"},"content":" * @param index The index of the task to be deleted.","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"Jweng88"},"content":" * @return The deleted task.","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"Jweng88"},"content":" * @throws DukeException If the index is invalid.","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"Jweng88"},"content":" public Task deleteTask(int index) throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"Jweng88"},"content":" if (index \u003c 0 || index \u003e\u003d tasks.size()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"Jweng88"},"content":" throw new DukeException(\"Invalid task number. Please provide a valid task number.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"Jweng88"},"content":" return tasks.remove(index);","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":63,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"Jweng88"},"content":" * Marks a task in the list as done at the specified index.","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"Jweng88"},"content":" * @param index The index of the task to be marked as done.","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"Jweng88"},"content":" public void markTaskAsDone(int index) {","lastModifiedDate":"2023-08-27"},{"lineNumber":69,"author":{"gitId":"Jweng88"},"content":" tasks.get(index).markAsDone();","lastModifiedDate":"2023-08-27"},{"lineNumber":70,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":71,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":72,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"Jweng88"},"content":" * Marks a task in the list as not done at the specified index.","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"Jweng88"},"content":" * @param index The index of the task to be marked as not done.","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"Jweng88"},"content":" public void markTaskAsUndone(int index) {","lastModifiedDate":"2023-08-27"},{"lineNumber":78,"author":{"gitId":"Jweng88"},"content":" tasks.get(index).markAsNotDone();","lastModifiedDate":"2023-08-27"},{"lineNumber":79,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":80,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":81,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"Jweng88"},"content":" * Returns the task at the specified index.","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"Jweng88"},"content":" * @param index The index of the task to be returned.","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"Jweng88"},"content":" * @return The task at the specified index.","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"Jweng88"},"content":" * @throws DukeException If the index is invalid.","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"Jweng88"},"content":" public Task get(int index) throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":89,"author":{"gitId":"Jweng88"},"content":" if (index \u003c 0 || index \u003e\u003d tasks.size()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":90,"author":{"gitId":"Jweng88"},"content":" throw new DukeException(\"Invalid task number. Please provide a valid task number.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":91,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":92,"author":{"gitId":"Jweng88"},"content":" return tasks.get(index);","lastModifiedDate":"2023-08-27"},{"lineNumber":93,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":94,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":95,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"Jweng88"},"content":" * Returns the list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"Jweng88"},"content":" * @return The list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"Jweng88"},"content":" public ArrayList\u003cTask\u003e getTasks() {","lastModifiedDate":"2023-08-27"},{"lineNumber":101,"author":{"gitId":"Jweng88"},"content":" return tasks;","lastModifiedDate":"2023-08-27"},{"lineNumber":102,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":103,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":104,"author":{"gitId":"Jweng88"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"Jweng88":104}},{"path":"src/main/java/duke/task/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jweng88"},"content":"package duke.task;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"Jweng88"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Jweng88"},"content":" * Represents a todo task.","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Jweng88"},"content":" * Inherits from the Task class.","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"Jweng88"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Jweng88"},"content":" * Constructs a ToDo object with the given description.","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Jweng88"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Jweng88"},"content":" public ToDo(String description) {","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"Jweng88"},"content":" super(description);","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Jweng88"},"content":" * Returns a string representation of the ToDo object.","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Jweng88"},"content":" * @return A string representation of the ToDo object.","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Jweng88"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"Jweng88"},"content":" public String toString() {","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"Jweng88"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Jweng88"},"content":" * Returns a formatted string representation of the ToDo object.","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Jweng88"},"content":" * @return A formatted string representation of the ToDo object.","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Jweng88"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"Jweng88"},"content":" public String toFormattedString() {","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"Jweng88"},"content":" return \"T | \" + (isDone ? \"1\" : \"0\") + \" | \" + description;","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"Jweng88"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"Jweng88":37}},{"path":"src/main/java/duke/ui/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jweng88"},"content":"package duke.ui;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"Jweng88"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"Jweng88"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"Jweng88"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"Jweng88"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"Jweng88"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"Jweng88"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"Jweng88"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"Jweng88"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"Jweng88"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"Jweng88"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"Jweng88"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"Jweng88"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"Jweng88"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"Jweng88"},"content":" * A custom control class representing a dialog box with an ImageView for the speaker\u0027s face","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"Jweng88"},"content":" * and a label containing text from the speaker.","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"Jweng88"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"Jweng88"},"content":" /** The label for displaying text from the speaker. */","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"Jweng88"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"Jweng88"},"content":" private Label dialog;","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"Jweng88"},"content":" /** The ImageView for displaying the speaker\u0027s face. */","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"Jweng88"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"Jweng88"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"Jweng88"},"content":" * Constructs a `DialogBox` with the specified text and image.","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"Jweng88"},"content":" * This private constructor is used internally to create `DialogBox` instances.","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"Jweng88"},"content":" * @param text The text to display in the dialog box.","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"Jweng88"},"content":" * @param img The image to display as the speaker\u0027s face.","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"Jweng88"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"Jweng88"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"Jweng88"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"Jweng88"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"Jweng88"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"Jweng88"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"Jweng88"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"Jweng88"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"Jweng88"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"Jweng88"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"Jweng88"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"Jweng88"},"content":" private void flip() {","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"Jweng88"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"Jweng88"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"Jweng88"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"Jweng88"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":62,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":63,"author":{"gitId":"Jweng88"},"content":" * Creates a user dialog box with the specified text and image.","lastModifiedDate":"2023-09-05"},{"lineNumber":64,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":65,"author":{"gitId":"Jweng88"},"content":" * @param text The text to display in the user dialog.","lastModifiedDate":"2023-09-05"},{"lineNumber":66,"author":{"gitId":"Jweng88"},"content":" * @param img The image to display as the user\u0027s face.","lastModifiedDate":"2023-09-05"},{"lineNumber":67,"author":{"gitId":"Jweng88"},"content":" * @return A `DialogBox` instance representing the user\u0027s dialog.","lastModifiedDate":"2023-09-05"},{"lineNumber":68,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":69,"author":{"gitId":"Jweng88"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-05"},{"lineNumber":70,"author":{"gitId":"Jweng88"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-05"},{"lineNumber":71,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":72,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":73,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":74,"author":{"gitId":"Jweng88"},"content":" * Creates a Duke dialog box with the specified text and image.","lastModifiedDate":"2023-09-05"},{"lineNumber":75,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":76,"author":{"gitId":"Jweng88"},"content":" * @param text The text to display in Duke\u0027s dialog.","lastModifiedDate":"2023-09-05"},{"lineNumber":77,"author":{"gitId":"Jweng88"},"content":" * @param img The image to display as Duke\u0027s face.","lastModifiedDate":"2023-09-05"},{"lineNumber":78,"author":{"gitId":"Jweng88"},"content":" * @return A `DialogBox` instance representing Duke\u0027s dialog.","lastModifiedDate":"2023-09-05"},{"lineNumber":79,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":80,"author":{"gitId":"Jweng88"},"content":" public static DialogBox getDukeDialog(String text, Image img) {","lastModifiedDate":"2023-09-05"},{"lineNumber":81,"author":{"gitId":"Jweng88"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-05"},{"lineNumber":82,"author":{"gitId":"Jweng88"},"content":" db.flip();","lastModifiedDate":"2023-09-05"},{"lineNumber":83,"author":{"gitId":"Jweng88"},"content":" return db;","lastModifiedDate":"2023-09-05"},{"lineNumber":84,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":85,"author":{"gitId":"Jweng88"},"content":"}","lastModifiedDate":"2023-09-05"},{"lineNumber":86,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"Jweng88":86}},{"path":"src/main/java/duke/ui/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jweng88"},"content":"package duke.ui;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"Jweng88"},"content":"import duke.Duke;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"Jweng88"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"Jweng88"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"Jweng88"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"Jweng88"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"Jweng88"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"Jweng88"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"Jweng88"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"Jweng88"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"Jweng88"},"content":" * The `MainWindow` class serves as the controller for the main window of the Duke GUI.","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"Jweng88"},"content":" * It provides the layout and functionality for the user interface components, such as the","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"Jweng88"},"content":" * input field, message display area, and send button.","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"Jweng88"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"Jweng88"},"content":" /** The scroll pane component for displaying the chat messages and enabling scrolling. */","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"Jweng88"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"Jweng88"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"Jweng88"},"content":" /** The container for displaying dialog boxes containing user and Duke messages. */","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"Jweng88"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"Jweng88"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"Jweng88"},"content":" /** The input field where the user enters text messages. */","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"Jweng88"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"Jweng88"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"Jweng88"},"content":" /** The button for sending user messages or interacting with the application. */","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"Jweng88"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"Jweng88"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"Jweng88"},"content":" /** The Duke instance that handles the application\u0027s logic. */","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"Jweng88"},"content":" private Duke duke;","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"Jweng88"},"content":" /** The user\u0027s avatar image. */","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"Jweng88"},"content":" private final Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaUser.png\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"Jweng88"},"content":" /** Duke\u0027s avatar image. */","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"Jweng88"},"content":" private final Image dukeImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaDuke.png\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"Jweng88"},"content":" * Initializes the `MainWindow` controller after the FXML has been loaded.","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"Jweng88"},"content":" * It binds the scroll pane\u0027s vertical value to the dialog container\u0027s height,","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"Jweng88"},"content":" * ensuring automatic scrolling as messages are added.","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"Jweng88"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"Jweng88"},"content":" public void initialize() {","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"Jweng88"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"Jweng88"},"content":" * Sets the Duke instance for the controller to enable communication with the Duke logic.","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"Jweng88"},"content":" * @param d The Duke instance that handles the application\u0027s logic.","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"Jweng88"},"content":" public void setDuke(Duke d) {","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"Jweng88"},"content":" duke \u003d d;","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"Jweng88"},"content":" dialogContainer.getChildren().add(","lastModifiedDate":"2023-09-05"},{"lineNumber":62,"author":{"gitId":"Jweng88"},"content":" DialogBox.getDukeDialog(duke.initialise(), dukeImage)","lastModifiedDate":"2023-09-05"},{"lineNumber":63,"author":{"gitId":"Jweng88"},"content":" );","lastModifiedDate":"2023-09-05"},{"lineNumber":64,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":65,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":66,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":67,"author":{"gitId":"Jweng88"},"content":" * Creates two dialog boxes, one echoing user input and the other containing Duke\u0027s reply","lastModifiedDate":"2023-09-05"},{"lineNumber":68,"author":{"gitId":"Jweng88"},"content":" * and then appends them to the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-05"},{"lineNumber":69,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":70,"author":{"gitId":"Jweng88"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":71,"author":{"gitId":"Jweng88"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-05"},{"lineNumber":72,"author":{"gitId":"Jweng88"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-05"},{"lineNumber":73,"author":{"gitId":"Jweng88"},"content":" String response \u003d duke.getResponse(input);","lastModifiedDate":"2023-09-05"},{"lineNumber":74,"author":{"gitId":"Jweng88"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-05"},{"lineNumber":75,"author":{"gitId":"Jweng88"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-05"},{"lineNumber":76,"author":{"gitId":"Jweng88"},"content":" DialogBox.getDukeDialog(response, dukeImage)","lastModifiedDate":"2023-09-05"},{"lineNumber":77,"author":{"gitId":"Jweng88"},"content":" );","lastModifiedDate":"2023-09-05"},{"lineNumber":78,"author":{"gitId":"Jweng88"},"content":" userInput.clear();","lastModifiedDate":"2023-09-05"},{"lineNumber":79,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":80,"author":{"gitId":"Jweng88"},"content":"}","lastModifiedDate":"2023-09-05"},{"lineNumber":81,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":82,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"Jweng88":82}},{"path":"src/main/java/duke/ui/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jweng88"},"content":"package duke.ui;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"Jweng88"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Jweng88"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"Jweng88"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"Jweng88"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Jweng88"},"content":" * Represents the user interface of the Duke chatbot.","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Jweng88"},"content":"public class Ui {","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Jweng88"},"content":" /** The current status or messages displayed to the user */","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"Jweng88"},"content":" private String currentStatus \u003d \"\";","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Jweng88"},"content":" * Changes the current status by appending a message.","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"Jweng88"},"content":" * @param status The message to append to the current status.","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Jweng88"},"content":" private void changeStatus(String status) {","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"Jweng88"},"content":" currentStatus +\u003d status + \"\\n\";","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"Jweng88"},"content":" * Displays a welcome message to the user.","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Jweng88"},"content":" public void showWelcome() {","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"Jweng88"},"content":" changeStatus(\"Hello! I\u0027m Bob\");","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"Jweng88"},"content":" changeStatus(\"What can I do for you?\");","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"Jweng88"},"content":" showLine();","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"Jweng88"},"content":" * Displays a horizontal line separator.","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"Jweng88"},"content":" public void showLine() {","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"Jweng88"},"content":" changeStatus(\"\");","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"Jweng88"},"content":" * Displays an error message to the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"Jweng88"},"content":" * @param errorMessage The error message to be displayed.","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"Jweng88"},"content":" public void showError(String errorMessage) {","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"Jweng88"},"content":" changeStatus(\"☹ \" + errorMessage);","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"Jweng88"},"content":" * Displays a goodbye message to the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"Jweng88"},"content":" public void showGoodbyeMessage() {","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"Jweng88"},"content":" changeStatus(\"Bye. Hope to see you again soon!\");","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"Jweng88"},"content":" * Displays a message indicating matching tasks found based on the keyword search.","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"Jweng88"},"content":" * @param matchingTasks The list of matching tasks to display.","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"Jweng88"},"content":" public void showMatchingTasks(TaskList matchingTasks) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"Jweng88"},"content":" changeStatus(\"Here are the matching tasks in your list:\");","lastModifiedDate":"2023-09-05"},{"lineNumber":64,"author":{"gitId":"Jweng88"},"content":" for (int i \u003d 0; i \u003c matchingTasks.size(); i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"Jweng88"},"content":" changeStatus((i + 1) + \".\" + matchingTasks.get(i));","lastModifiedDate":"2023-09-05"},{"lineNumber":66,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"Jweng88"},"content":" * Displays a message indicating no matching tasks were found based on the keyword search.","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"Jweng88"},"content":" public void showNoMatchingTasks() {","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"Jweng88"},"content":" changeStatus(\"No matching tasks found.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":74,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"Jweng88"},"content":" * Displays the list of tasks to the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"Jweng88"},"content":" * @param tasks The list of tasks to be displayed.","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"Jweng88"},"content":" * @throws DukeException If an error occurs while displaying the tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"Jweng88"},"content":" public void showTaskList(TaskList tasks) throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":83,"author":{"gitId":"Jweng88"},"content":" changeStatus(\"Here are the tasks in your list:\");","lastModifiedDate":"2023-09-05"},{"lineNumber":84,"author":{"gitId":"Jweng88"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-08-27"},{"lineNumber":85,"author":{"gitId":"Jweng88"},"content":" changeStatus((i + 1) + \". \" + tasks.get(i));","lastModifiedDate":"2023-09-05"},{"lineNumber":86,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":87,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":88,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":89,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"Jweng88"},"content":" * Displays a message indicating that a task has been added to the list.","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"Jweng88"},"content":" * @param tasks The list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"Jweng88"},"content":" * @throws DukeException If an error occurs while displaying the message.","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"Jweng88"},"content":" public void showTaskAddedMessage(TaskList tasks) throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":96,"author":{"gitId":"Jweng88"},"content":" changeStatus(\"Got it. I\u0027ve added this task:\");","lastModifiedDate":"2023-09-05"},{"lineNumber":97,"author":{"gitId":"Jweng88"},"content":" changeStatus(tasks.get(tasks.size() - 1).toString());","lastModifiedDate":"2023-09-05"},{"lineNumber":98,"author":{"gitId":"Jweng88"},"content":" changeStatus(\"Now you have \" + tasks.size() + \" tasks in the list.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":99,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":100,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":101,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"Jweng88"},"content":" * Displays a message indicating that a task has been marked as done.","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"Jweng88"},"content":" * @param tasks The list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"Jweng88"},"content":" * @param taskIndex The index of the task that has been marked as done.","lastModifiedDate":"2023-08-30"},{"lineNumber":106,"author":{"gitId":"Jweng88"},"content":" * @throws DukeException If an error occurs while displaying the message.","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":108,"author":{"gitId":"Jweng88"},"content":" public void showTaskMarkedAsDone(TaskList tasks, int taskIndex) throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":109,"author":{"gitId":"Jweng88"},"content":" changeStatus(\"Nice! I\u0027ve marked this task as done:\");","lastModifiedDate":"2023-09-05"},{"lineNumber":110,"author":{"gitId":"Jweng88"},"content":" changeStatus(tasks.get(taskIndex).toString());","lastModifiedDate":"2023-09-05"},{"lineNumber":111,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":112,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":113,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":114,"author":{"gitId":"Jweng88"},"content":" * Displays a message indicating that a task has been marked as not done.","lastModifiedDate":"2023-08-30"},{"lineNumber":115,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":116,"author":{"gitId":"Jweng88"},"content":" * @param tasks The list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":117,"author":{"gitId":"Jweng88"},"content":" * @param taskIndex The index of the task that has been marked as not done.","lastModifiedDate":"2023-08-30"},{"lineNumber":118,"author":{"gitId":"Jweng88"},"content":" * @throws DukeException If an error occurs while displaying the message.","lastModifiedDate":"2023-08-30"},{"lineNumber":119,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":120,"author":{"gitId":"Jweng88"},"content":" public void showTaskMarkedAsUndone(TaskList tasks, int taskIndex) throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":121,"author":{"gitId":"Jweng88"},"content":" changeStatus(\"OK, I\u0027ve marked this task as not done yet:\");","lastModifiedDate":"2023-09-05"},{"lineNumber":122,"author":{"gitId":"Jweng88"},"content":" changeStatus(tasks.get(taskIndex).toString());","lastModifiedDate":"2023-09-05"},{"lineNumber":123,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":124,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":125,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":126,"author":{"gitId":"Jweng88"},"content":" * Displays a message indicating that a task has been removed from the list.","lastModifiedDate":"2023-08-30"},{"lineNumber":127,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":128,"author":{"gitId":"Jweng88"},"content":" * @param tasks The list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":129,"author":{"gitId":"Jweng88"},"content":" * @param removedTask The task that has been removed from the list.","lastModifiedDate":"2023-08-30"},{"lineNumber":130,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":131,"author":{"gitId":"Jweng88"},"content":" public void showTaskRemoved(TaskList tasks, Task removedTask) {","lastModifiedDate":"2023-08-27"},{"lineNumber":132,"author":{"gitId":"Jweng88"},"content":" changeStatus(\"Noted. I\u0027ve removed this task:\");","lastModifiedDate":"2023-09-05"},{"lineNumber":133,"author":{"gitId":"Jweng88"},"content":" changeStatus(removedTask.toString());","lastModifiedDate":"2023-09-05"},{"lineNumber":134,"author":{"gitId":"Jweng88"},"content":" changeStatus(\"Now you have \" + tasks.size() + \" tasks in the list.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":135,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":136,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":137,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":138,"author":{"gitId":"Jweng88"},"content":" * Displays an error message indicating that tasks could not be loaded from a file.","lastModifiedDate":"2023-08-30"},{"lineNumber":139,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":140,"author":{"gitId":"Jweng88"},"content":" public void showLoadingError() {","lastModifiedDate":"2023-08-27"},{"lineNumber":141,"author":{"gitId":"Jweng88"},"content":" changeStatus(\"Error loading tasks from file.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":142,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":143,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":144,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":145,"author":{"gitId":"Jweng88"},"content":" * Gets the current status or messages displayed to the user and clears the status.","lastModifiedDate":"2023-09-05"},{"lineNumber":146,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":147,"author":{"gitId":"Jweng88"},"content":" * @return The current status or messages displayed to the user.","lastModifiedDate":"2023-09-05"},{"lineNumber":148,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":149,"author":{"gitId":"Jweng88"},"content":" public String getCurrentStatus() {","lastModifiedDate":"2023-09-05"},{"lineNumber":150,"author":{"gitId":"Jweng88"},"content":" String tmp \u003d currentStatus;","lastModifiedDate":"2023-09-05"},{"lineNumber":151,"author":{"gitId":"Jweng88"},"content":" this.currentStatus \u003d \"\";","lastModifiedDate":"2023-09-05"},{"lineNumber":152,"author":{"gitId":"Jweng88"},"content":" return tmp;","lastModifiedDate":"2023-09-05"},{"lineNumber":153,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":154,"author":{"gitId":"Jweng88"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"Jweng88":154}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"Jweng88"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"Jweng88"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"Jweng88"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"Jweng88"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"Jweng88"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"Jweng88"},"content":"\u003c!-- FXML document for the DialogBox user interface --\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"Jweng88"},"content":"\u003cfx:root alignment\u003d\"TOP_RIGHT\" maxHeight\u003d\"1.7976931348623157E308\" maxWidth\u003d\"1.7976931348623157E308\"","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"Jweng88"},"content":" prefWidth\u003d\"400.0\" type\u003d\"javafx.scene.layout.HBox\" xmlns\u003d\"http://javafx.com/javafx/17\"","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"Jweng88"},"content":" xmlns:fx\u003d\"http://javafx.com/fxml/1\"\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"Jweng88"},"content":" \u003c!-- Children elements within the DialogBox --\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"Jweng88"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"Jweng88"},"content":" \u003c!-- Label for displaying text content --\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"Jweng88"},"content":" \u003cLabel fx:id\u003d\"dialog\" text\u003d\"Label\" wrapText\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"Jweng88"},"content":" \u003c!-- ImageView for displaying an image --\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"Jweng88"},"content":" \u003cImageView fx:id\u003d\"displayPicture\" fitHeight\u003d\"99.0\" fitWidth\u003d\"99.0\"","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"Jweng88"},"content":" pickOnBounds\u003d\"true\" preserveRatio\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"Jweng88"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"Jweng88"},"content":" \u003c!-- Padding settings for the DialogBox --\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"Jweng88"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"Jweng88"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"Jweng88"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"Jweng88"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"Jweng88":29}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"Jweng88"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"Jweng88"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"Jweng88"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"Jweng88"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"Jweng88"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"Jweng88"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"Jweng88"},"content":"\u003c!-- FXML document for the MainWindow user interface --\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"Jweng88"},"content":"\u003cAnchorPane maxHeight\u003d\"-Infinity\" maxWidth\u003d\"-Infinity\" minHeight\u003d\"-Infinity\"","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"Jweng88"},"content":" minWidth\u003d\"-Infinity\" prefHeight\u003d\"600.0\" prefWidth\u003d\"400.0\" xmlns\u003d\"http://javafx.com/javafx/17\"","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"Jweng88"},"content":" xmlns:fx\u003d\"http://javafx.com/fxml/1\" fx:controller\u003d\"duke.ui.MainWindow\"\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"Jweng88"},"content":" \u003c!-- User input text field --\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"Jweng88"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"Jweng88"},"content":" \u003cTextField fx:id\u003d\"userInput\" layoutY\u003d\"558.0\" onAction\u003d\"#handleUserInput\"","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"Jweng88"},"content":" prefHeight\u003d\"41.0\" prefWidth\u003d\"324.0\" AnchorPane.bottomAnchor\u003d\"1.0\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"Jweng88"},"content":" \u003c!-- Send button --\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"Jweng88"},"content":" \u003cButton fx:id\u003d\"sendButton\" layoutX\u003d\"324.0\" layoutY\u003d\"558.0\" mnemonicParsing\u003d\"false\"","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"Jweng88"},"content":" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"41.0\" prefWidth\u003d\"76.0\" text\u003d\"Send\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"Jweng88"},"content":" \u003c!-- Scroll pane for dialog container --\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"Jweng88"},"content":" \u003cScrollPane fx:id\u003d\"scrollPane\" hbarPolicy\u003d\"NEVER\" hvalue\u003d\"1.0\"","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"Jweng88"},"content":" prefHeight\u003d\"557.0\" prefWidth\u003d\"400.0\" vvalue\u003d\"1.0\"\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"Jweng88"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"Jweng88"},"content":" \u003c!-- Dialog container for displaying messages --\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"Jweng88"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"552.0\" prefWidth\u003d\"388.0\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"Jweng88"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"Jweng88"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"Jweng88"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"Jweng88"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"Jweng88":34}},{"path":"src/test/java/duke/task/TaskListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jweng88"},"content":"package duke.task;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Jweng88"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Jweng88"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"Jweng88"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"Jweng88"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Jweng88"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Jweng88"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"Jweng88"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Jweng88"},"content":" * A JUnit test class for the TaskList class.","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Jweng88"},"content":"public class TaskListTest {","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"Jweng88"},"content":" private TaskList taskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Jweng88"},"content":" * Sets up the test fixture.","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Jweng88"},"content":" * Creates a new TaskList object with an empty ArrayList.","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Jweng88"},"content":" @BeforeEach","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"Jweng88"},"content":" public void setup() {","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"Jweng88"},"content":" taskList \u003d new TaskList(new ArrayList\u003c\u003e());","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Jweng88"},"content":" * Tests the addTask method of the TaskList class.","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Jweng88"},"content":" * Adds a new task to the task list and checks if the size of the task list is 1.","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Jweng88"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"Jweng88"},"content":" public void testAddTask() {","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"Jweng88"},"content":" Task task \u003d new ToDo(\"Test Task\");","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"Jweng88"},"content":" taskList.addTask(task);","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"Jweng88"},"content":" assertEquals(1, taskList.getTasks().size());","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"Jweng88"},"content":" * Tests the deleteTask method of the TaskList class.","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"Jweng88"},"content":" * Adds a new task to the task list, deletes it, and checks if the size of the task list is 0.","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"Jweng88"},"content":" * @throws DukeException If an error occurs while deleting the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"Jweng88"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"Jweng88"},"content":" public void testDeleteTask() throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"Jweng88"},"content":" Task task \u003d new ToDo(\"Test Task\");","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"Jweng88"},"content":" taskList.addTask(task);","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"Jweng88"},"content":" taskList.deleteTask(0);","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"Jweng88"},"content":" assertEquals(0, taskList.getTasks().size());","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"Jweng88"},"content":" * Tests the deleteTask method of the TaskList class with an invalid task index.","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"Jweng88"},"content":" * Expects a DukeException to be thrown.","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"Jweng88"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"Jweng88"},"content":" public void testDeleteInvalidTask() {","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"Jweng88"},"content":" assertThrows(DukeException.class, () -\u003e taskList.deleteTask(0));","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"Jweng88"},"content":" * Tests the get method of the TaskList class.","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"Jweng88"},"content":" * Adds a new task to the task list, retrieves it, and checks if its string representation is correct.","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"Jweng88"},"content":" * @throws DukeException If an error occurs while retrieving the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"Jweng88"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"Jweng88"},"content":" public void testGetTask() throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"Jweng88"},"content":" Task task \u003d new ToDo(\"Test Task\");","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"Jweng88"},"content":" taskList.addTask(task);","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"Jweng88"},"content":" Task retrievedTask \u003d taskList.get(0);","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"Jweng88"},"content":" assertEquals(\"[T][ ] Test Task\", retrievedTask.toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":75,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"Jweng88"},"content":" * Tests the get method of the TaskList class with an invalid task index.","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"Jweng88"},"content":" * Expects a DukeException to be thrown.","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"Jweng88"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":81,"author":{"gitId":"Jweng88"},"content":" public void testGetInvalidTask() {","lastModifiedDate":"2023-08-29"},{"lineNumber":82,"author":{"gitId":"Jweng88"},"content":" assertThrows(DukeException.class, () -\u003e taskList.get(0));","lastModifiedDate":"2023-08-29"},{"lineNumber":83,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":84,"author":{"gitId":"Jweng88"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"Jweng88":84}},{"path":"src/test/java/duke/task/ToDoTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jweng88"},"content":"package duke.task;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Jweng88"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"Jweng88"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"Jweng88"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Jweng88"},"content":" * A JUnit test class for the ToDo class.","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Jweng88"},"content":"public class ToDoTest {","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Jweng88"},"content":" * Tests the toString method of the ToDo class.","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Jweng88"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"Jweng88"},"content":" public void testToString() {","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"Jweng88"},"content":" ToDo todo \u003d new ToDo(\"Buy groceries\");","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"Jweng88"},"content":" assertEquals(\"[T][ ] Buy groceries\", todo.toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Jweng88"},"content":" * Tests the markAsDone method of the ToDo class.","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Jweng88"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"Jweng88"},"content":" public void testMarkAsDone() {","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"Jweng88"},"content":" ToDo todo \u003d new ToDo(\"Buy groceries\");","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"Jweng88"},"content":" todo.markAsDone();","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"Jweng88"},"content":" assertEquals(\"[T][X] Buy groceries\", todo.toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Jweng88"},"content":" * Tests the markAsNotDone method of the ToDo class.","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"Jweng88"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"Jweng88"},"content":" public void testMarkAsNotDone() {","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"Jweng88"},"content":" ToDo todo \u003d new ToDo(\"Buy groceries\");","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"Jweng88"},"content":" todo.markAsDone();","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"Jweng88"},"content":" todo.markAsNotDone();","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"Jweng88"},"content":" assertEquals(\"[T][ ] Buy groceries\", todo.toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"Jweng88"},"content":" * Tests the createTaskFromFormattedString method of the ToDo class.","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"Jweng88"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"Jweng88"},"content":" public void testCreateTaskFromFormattedString() {","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"Jweng88"},"content":" String formattedString \u003d \"T | 1 | Buy groceries\";","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"Jweng88"},"content":" Task task \u003d Task.createTaskFromFormattedString(formattedString);","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"Jweng88"},"content":" assertEquals(\"[T][X] Buy groceries\", task.toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"Jweng88"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"Jweng88":51}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"Jweng88"},"content":"todo read book","lastModifiedDate":"2023-08-22"},{"lineNumber":2,"author":{"gitId":"Jweng88"},"content":"deadline return book /by June 6th","lastModifiedDate":"2023-08-22"},{"lineNumber":3,"author":{"gitId":"Jweng88"},"content":"event project meeting /from Aug 6th 2pm /to 4pm","lastModifiedDate":"2023-08-22"},{"lineNumber":4,"author":{"gitId":"Jweng88"},"content":"mark 1","lastModifiedDate":"2023-08-22"},{"lineNumber":5,"author":{"gitId":"Jweng88"},"content":"mark 2","lastModifiedDate":"2023-08-22"},{"lineNumber":6,"author":{"gitId":"Jweng88"},"content":"unmark 2","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"Jweng88"},"content":"list","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"Jweng88"},"content":"bye","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"Jweng88":8}}] +[{"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":"Jweng88"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"Jweng88"},"content":"}","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"Jweng88"},"content":"checkstyle {","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"Jweng88"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":18,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":19,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"Jweng88"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"Jweng88"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"Jweng88"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"Jweng88"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"Jweng88"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"Jweng88"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"Jweng88"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"Jweng88"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"Jweng88"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"Jweng88"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"Jweng88"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"Jweng88"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"Jweng88"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":47,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":48,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":49,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":50,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":51,"author":{"gitId":"Jweng88"},"content":" mainClassName \u003d \u0027duke.Duke\u0027","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":53,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":54,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":55,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":56,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":57,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":58,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":59,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":60,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":61,"author":{"gitId":"Jweng88"},"content":" enableAssertions \u003d true","lastModifiedDate":"2023-09-09"},{"lineNumber":62,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":63,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":64,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"Jweng88":25,"-":41}},{"path":"src/main/java/duke.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"Jweng88"},"content":"T | 1 | read book","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"Jweng88"},"content":"D | 0 | return book | 2023-08-15T19:00:40","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"Jweng88"},"content":"E | 0 | project meeting | 2023-08-28T16:00:49.455 | 2023-08-28T18:00:49.455","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"Jweng88"},"content":"T | 1 | join sports club","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"Jweng88":4}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jweng88"},"content":"package duke;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"Jweng88"},"content":"import duke.command.Command;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"Jweng88"},"content":"import duke.command.Parser;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"Jweng88"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"Jweng88"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"Jweng88"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"Jweng88"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"Jweng88"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Jweng88"},"content":" * The main class of the Duke application.","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Jweng88"},"content":" * Initializes the user interface, storage, and task list,","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"Jweng88"},"content":" * and runs the main loop of the application.","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Jweng88"},"content":"public class Duke {","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"Jweng88"},"content":" /** The storage for saving and loading the task list */","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Jweng88"},"content":" private final Storage storage;","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Jweng88"},"content":" /** The task list */","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Jweng88"},"content":" private TaskList tasks;","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Jweng88"},"content":" /** The user interface for interacting with the user */","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"Jweng88"},"content":" private final Ui ui;","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"Jweng88"},"content":" /** Flag indicating whether the application should exit */","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"Jweng88"},"content":" private boolean isExit;","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Jweng88"},"content":" * Constructs a Duke object with the given file path.","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Jweng88"},"content":" * Initializes the user interface, storage, and task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Jweng88"},"content":" public Duke() {","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"Jweng88"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"Jweng88"},"content":" storage \u003d new Storage(\"./src/main/java/duke.txt\");","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"Jweng88"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"Jweng88"},"content":" tasks \u003d new TaskList(storage.load());","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"Jweng88"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"Jweng88"},"content":" ui.showLoadingError();","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"Jweng88"},"content":" tasks \u003d new TaskList();","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"Jweng88"},"content":" * Displays the welcome message for Duke.","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"Jweng88"},"content":" * @return The welcome message as a string.","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"Jweng88"},"content":" public String initialise() {","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"Jweng88"},"content":" ui.showWelcome();","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"Jweng88"},"content":" return ui.getCurrentStatus();","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"Jweng88"},"content":" * Runs the main loop of the Duke application.","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"Jweng88"},"content":" * Reads user input, parses it, and executes the corresponding command.","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"Jweng88"},"content":" * @param input The user\u0027s input text.","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"Jweng88"},"content":" public void run(String input) {","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"Jweng88"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"Jweng88"},"content":" ui.showLine();","lastModifiedDate":"2023-09-05"},{"lineNumber":63,"author":{"gitId":"Jweng88"},"content":" Command c \u003d Parser.parse(input);","lastModifiedDate":"2023-09-05"},{"lineNumber":64,"author":{"gitId":"Jweng88"},"content":" c.execute(tasks, ui, storage);","lastModifiedDate":"2023-08-27"},{"lineNumber":65,"author":{"gitId":"Jweng88"},"content":" isExit \u003d c.isExit();","lastModifiedDate":"2023-08-27"},{"lineNumber":66,"author":{"gitId":"Jweng88"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":67,"author":{"gitId":"Jweng88"},"content":" ui.showError(e.getMessage());","lastModifiedDate":"2023-08-27"},{"lineNumber":68,"author":{"gitId":"Jweng88"},"content":" } finally {","lastModifiedDate":"2023-08-27"},{"lineNumber":69,"author":{"gitId":"Jweng88"},"content":" ui.showLine();","lastModifiedDate":"2023-08-27"},{"lineNumber":70,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":71,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":72,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":73,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"Jweng88"},"content":" * Generates a response to user input.","lastModifiedDate":"2023-09-05"},{"lineNumber":75,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"Jweng88"},"content":" * @param input The user\u0027s input text.","lastModifiedDate":"2023-09-05"},{"lineNumber":77,"author":{"gitId":"Jweng88"},"content":" * @return A response generated by Duke based on the user\u0027s input.","lastModifiedDate":"2023-09-05"},{"lineNumber":78,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"Jweng88"},"content":" public String getResponse(String input) {","lastModifiedDate":"2023-09-05"},{"lineNumber":80,"author":{"gitId":"Jweng88"},"content":" run(input);","lastModifiedDate":"2023-09-05"},{"lineNumber":81,"author":{"gitId":"Jweng88"},"content":" return ui.getCurrentStatus();","lastModifiedDate":"2023-09-05"},{"lineNumber":82,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":83,"author":{"gitId":"Jweng88"},"content":"}","lastModifiedDate":"2023-08-27"},{"lineNumber":84,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"Jweng88":84}},{"path":"src/main/java/duke/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jweng88"},"content":"package duke;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"Jweng88"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"Jweng88"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"Jweng88"},"content":" * The Launcher class is responsible for starting the Duke chatbot application.","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"Jweng88"},"content":" * It initiates the application\u0027s main entry point, the \u0027Main\u0027 class.","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"Jweng88"},"content":"public class Launcher {","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"Jweng88"},"content":" * Launches the Duke application by invoking JavaFX\u0027s Application.launch","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"Jweng88"},"content":" * method with the Main class and any command-line arguments.","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"Jweng88"},"content":" * The main method of the Launcher class.","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"Jweng88"},"content":" * @param args Command-line arguments passed to the application.","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"Jweng88"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"Jweng88"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"Jweng88"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"Jweng88":21}},{"path":"src/main/java/duke/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jweng88"},"content":"package duke;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"Jweng88"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"Jweng88"},"content":"import duke.ui.MainWindow;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"Jweng88"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"Jweng88"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"Jweng88"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"Jweng88"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"Jweng88"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"Jweng88"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"Jweng88"},"content":" * The Main class serves as the entry point for the Duke GUI application.","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"Jweng88"},"content":" * It initializes the Duke logic, loads the FXML-based user interface, and","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"Jweng88"},"content":" * starts the JavaFX application.","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"Jweng88"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"Jweng88"},"content":" /** The Duke instance that handles the application\u0027s logic */","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"Jweng88"},"content":" private final Duke duke \u003d new Duke();","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"Jweng88"},"content":" * Loads the main window using FXML, sets up the user interface,","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"Jweng88"},"content":" * and displays the application\u0027s primary stage.","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"Jweng88"},"content":" * The start method of the JavaFX application.","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"Jweng88"},"content":" * @param stage The primary stage for the JavaFX application.","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"Jweng88"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"Jweng88"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"Jweng88"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"Jweng88"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"Jweng88"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"Jweng88"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"Jweng88"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"Jweng88"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setDuke(duke);","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"Jweng88"},"content":" stage.show();","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"Jweng88"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"Jweng88"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"Jweng88"},"content":"}","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"Jweng88":44}},{"path":"src/main/java/duke/command/AddDeadlineCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jweng88"},"content":"package duke.command;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"Jweng88"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"Jweng88"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"Jweng88"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"Jweng88"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"Jweng88"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"Jweng88"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Jweng88"},"content":" * Represents a command to add a deadline task.","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Jweng88"},"content":" * Inherits from the Command class.","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Jweng88"},"content":"public class AddDeadlineCommand extends Command {","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Jweng88"},"content":" /** The description of the deadline to add */","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Jweng88"},"content":" private final String description;","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Jweng88"},"content":" /** The deadline of the deadline to add */","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Jweng88"},"content":" private final String by;","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Jweng88"},"content":" * Constructs an AddDeadlineCommand object with the given description and deadline.","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Jweng88"},"content":" * @param description The description of the deadline task.","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"Jweng88"},"content":" * @param by The deadline of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Jweng88"},"content":" public AddDeadlineCommand(String description, String by) {","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"Jweng88"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"Jweng88"},"content":" this.by \u003d by;","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Jweng88"},"content":" * Executes the AddDeadlineCommand by adding the deadline task to the task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"Jweng88"},"content":" * @param tasks The task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"Jweng88"},"content":" * @param ui The user interface.","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"Jweng88"},"content":" * @param storage The storage component.","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"Jweng88"},"content":" * @throws DukeException If an error occurs while executing the command.","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"Jweng88"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"Jweng88"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"Jweng88"},"content":" if (description.isEmpty() || by.isEmpty()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"Jweng88"},"content":" throw new DukeException(\"☹ OOPS!!! The format of a deadline should be: \"","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"Jweng88"},"content":" + \"deadline DESCRIPTION /by DATE\");","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"Jweng88"},"content":" tasks.addTask(new Deadline(description, by));","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"Jweng88"},"content":" ui.showTaskAddedMessage(tasks);","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"Jweng88"},"content":" * Returns a boolean indicating whether the command is an exit command.","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"Jweng88"},"content":" * @return A boolean indicating whether the command is an exit command.","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"Jweng88"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"Jweng88"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"Jweng88"},"content":" return false;","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":59,"author":{"gitId":"Jweng88"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"Jweng88":59}},{"path":"src/main/java/duke/command/AddEventCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jweng88"},"content":"package duke.command;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"Jweng88"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"Jweng88"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"Jweng88"},"content":"import duke.task.Event;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"Jweng88"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"Jweng88"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"Jweng88"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Jweng88"},"content":" * Represents a command to add an event task.","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Jweng88"},"content":" * Inherits from the Command class.","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Jweng88"},"content":"public class AddEventCommand extends Command {","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Jweng88"},"content":" /** The description of the event to add */","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Jweng88"},"content":" private final String description;","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Jweng88"},"content":" /** The start time of the event to add */","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Jweng88"},"content":" private final String from;","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Jweng88"},"content":" /** The end time of the event to add */","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Jweng88"},"content":" private final String to;","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"Jweng88"},"content":" * Constructs an AddEventCommand object with the given description, start time, and end time.","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Jweng88"},"content":" * @param description The description of the event task.","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Jweng88"},"content":" * @param from The start time of the event.","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Jweng88"},"content":" * @param to The end time of the event.","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Jweng88"},"content":" public AddEventCommand(String description, String from, String to) {","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"Jweng88"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"Jweng88"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"Jweng88"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"Jweng88"},"content":" * Executes the AddEventCommand by adding the event task to the task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"Jweng88"},"content":" * @param tasks The task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"Jweng88"},"content":" * @param ui The user interface.","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"Jweng88"},"content":" * @param storage The storage component.","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"Jweng88"},"content":" * @throws DukeException If an error occurs while executing the command.","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"Jweng88"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"Jweng88"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"Jweng88"},"content":" if (description.isEmpty() || from.isEmpty() || to.isEmpty()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"Jweng88"},"content":" throw new DukeException(\"☹ OOPS!!! The format of an event should be: \"","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"Jweng88"},"content":" + \"event DESCRIPTION /from DATE /to DATE\");","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"Jweng88"},"content":" tasks.addTask(new Event(description, from, to));","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"Jweng88"},"content":" ui.showTaskAddedMessage(tasks);","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"Jweng88"},"content":" * Returns a boolean indicating whether the command is an exit command.","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"Jweng88"},"content":" * @return A boolean indicating whether the command is an exit command.","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"Jweng88"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"Jweng88"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"Jweng88"},"content":" return false;","lastModifiedDate":"2023-08-27"},{"lineNumber":63,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":64,"author":{"gitId":"Jweng88"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"Jweng88":64}},{"path":"src/main/java/duke/command/AddTodoCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jweng88"},"content":"package duke.command;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"Jweng88"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"Jweng88"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"Jweng88"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"Jweng88"},"content":"import duke.task.ToDo;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"Jweng88"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"Jweng88"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Jweng88"},"content":" * Represents a command to add a todo task.","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Jweng88"},"content":" * Inherits from the Command class.","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Jweng88"},"content":"public class AddTodoCommand extends Command {","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Jweng88"},"content":" /** The description of the todo to add */","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Jweng88"},"content":" private final String description;","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Jweng88"},"content":" * Constructs an AddTodoCommand object with the given description.","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Jweng88"},"content":" * @param description The description of the todo task.","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Jweng88"},"content":" public AddTodoCommand(String description) {","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"Jweng88"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Jweng88"},"content":" * Executes the AddTodoCommand by adding the todo task to the task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Jweng88"},"content":" * @param tasks The task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Jweng88"},"content":" * @param ui The user interface.","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Jweng88"},"content":" * @param storage The storage component.","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Jweng88"},"content":" * @throws DukeException If an error occurs while executing the command.","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"Jweng88"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"Jweng88"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"Jweng88"},"content":" if (description.isEmpty()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"Jweng88"},"content":" throw new DukeException(\"☹ OOPS!!! The description of a todo cannot be empty.\");","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"Jweng88"},"content":" tasks.addTask(new ToDo(description));","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"Jweng88"},"content":" ui.showTaskAddedMessage(tasks);","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"Jweng88"},"content":" * Returns a boolean indicating whether the command is an exit command.","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"Jweng88"},"content":" * @return A boolean indicating whether the command is an exit command.","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"Jweng88"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"Jweng88"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"Jweng88"},"content":" return false;","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"Jweng88"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"Jweng88":53}},{"path":"src/main/java/duke/command/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jweng88"},"content":"package duke.command;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"Jweng88"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"Jweng88"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"Jweng88"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"Jweng88"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"Jweng88"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Jweng88"},"content":" * Represents an abstract command that can be executed by the Duke chatbot.","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Jweng88"},"content":" * Provides an execute method and an isExit method that must be implemented by subclasses.","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Jweng88"},"content":"public abstract class Command {","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Jweng88"},"content":" * Executes the command with the given task list, user interface, and storage component.","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Jweng88"},"content":" * @param tasks The task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Jweng88"},"content":" * @param ui The user interface.","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Jweng88"},"content":" * @param storage The storage component.","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Jweng88"},"content":" * @throws DukeException If an error occurs while executing the command.","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Jweng88"},"content":" public abstract void execute(TaskList tasks, Ui ui, Storage storage) throws DukeException;","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"Jweng88"},"content":" * Returns a boolean indicating whether the command is an exit command.","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Jweng88"},"content":" * @return A boolean indicating whether the command is an exit command.","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Jweng88"},"content":" public abstract boolean isExit();","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"Jweng88"},"content":"}","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"Jweng88":31}},{"path":"src/main/java/duke/command/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jweng88"},"content":"package duke.command;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"Jweng88"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"Jweng88"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"Jweng88"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"Jweng88"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"Jweng88"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"Jweng88"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Jweng88"},"content":" * Represents a command to delete a task from the task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Jweng88"},"content":" * Inherits from the Command class.","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Jweng88"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Jweng88"},"content":" /** The index of the task to delete */","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Jweng88"},"content":" private final int taskIndex;","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Jweng88"},"content":" * Constructs a DeleteCommand object with the given task index.","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Jweng88"},"content":" * @param taskIndex The index of the task to be deleted.","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Jweng88"},"content":" public DeleteCommand(int taskIndex) {","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"Jweng88"},"content":" this.taskIndex \u003d taskIndex - 1;","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Jweng88"},"content":" * Executes the DeleteCommand by deleting the task from the task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Jweng88"},"content":" * @param tasks The task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Jweng88"},"content":" * @param ui The user interface.","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Jweng88"},"content":" * @param storage The storage component.","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Jweng88"},"content":" * @throws DukeException If an error occurs while executing the command.","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"Jweng88"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"Jweng88"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"Jweng88"},"content":" if (taskIndex \u003e\u003d 0 \u0026\u0026 taskIndex \u003c tasks.size()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"Jweng88"},"content":" Task removedTask \u003d tasks.deleteTask(taskIndex);","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"Jweng88"},"content":" ui.showTaskRemoved(tasks, removedTask);","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"Jweng88"},"content":" } else {","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"Jweng88"},"content":" throw new DukeException(\"Invalid task number.\");","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"Jweng88"},"content":" * Returns a boolean indicating whether the command is an exit command.","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"Jweng88"},"content":" * @return A boolean indicating whether the command is an exit command.","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"Jweng88"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"Jweng88"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"Jweng88"},"content":" return false;","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"Jweng88"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"Jweng88":54}},{"path":"src/main/java/duke/command/ExitCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jweng88"},"content":"package duke.command;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"Jweng88"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"Jweng88"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"Jweng88"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"Jweng88"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"Jweng88"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Jweng88"},"content":" * Represents a command to exit the Duke chatbot.","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Jweng88"},"content":" * Inherits from the Command class.","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Jweng88"},"content":"public class ExitCommand extends Command {","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Jweng88"},"content":" * Executes the ExitCommand by displaying a goodbye message and saving the tasks to storage.","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Jweng88"},"content":" * @param tasks The task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Jweng88"},"content":" * @param ui The user interface.","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Jweng88"},"content":" * @param storage The storage component.","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Jweng88"},"content":" * @throws DukeException If an error occurs while executing the command.","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Jweng88"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"Jweng88"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"Jweng88"},"content":" ui.showGoodbyeMessage();","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"Jweng88"},"content":" storage.save(tasks.getTasks());","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Jweng88"},"content":" * Returns a boolean indicating whether the command is an exit command.","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Jweng88"},"content":" * @return A boolean indicating whether the command is an exit command.","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Jweng88"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"Jweng88"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"Jweng88"},"content":" return true;","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"Jweng88"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"Jweng88":37}},{"path":"src/main/java/duke/command/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jweng88"},"content":"package duke.command;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"Jweng88"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Jweng88"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Jweng88"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Jweng88"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"Jweng88"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Jweng88"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Jweng88"},"content":" * Represents a command to find tasks containing a specific keyword.","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Jweng88"},"content":"public class FindCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"Jweng88"},"content":" /** The keyword to search for in task descriptions */","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Jweng88"},"content":" private final String keyword;","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Jweng88"},"content":" * Constructs a FindCommand object with the specified keyword.","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Jweng88"},"content":" * @param keyword The keyword to search for in task descriptions.","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Jweng88"},"content":" public FindCommand(String keyword) {","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Jweng88"},"content":" this.keyword \u003d keyword;","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Jweng88"},"content":" * Executes the FindCommand. Searches for tasks containing the keyword in the task list","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Jweng88"},"content":" * and displays the matching tasks or a message if no matching tasks are found.","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Jweng88"},"content":" * @param tasks The task list containing tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Jweng88"},"content":" * @param ui The user interface for displaying messages.","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Jweng88"},"content":" * @param storage The storage object for saving tasks to a file.","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"Jweng88"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"Jweng88"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"Jweng88"},"content":" TaskList matchingTasks \u003d new TaskList();","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"Jweng88"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"Jweng88"},"content":" Task task \u003d tasks.get(i);","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"Jweng88"},"content":" if (task.getDescription().contains(keyword)) {","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"Jweng88"},"content":" matchingTasks.addTask(task);","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"Jweng88"},"content":" if (matchingTasks.size() \u003d\u003d 0) {","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"Jweng88"},"content":" ui.showNoMatchingTasks();","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"Jweng88"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"Jweng88"},"content":" ui.showMatchingTasks(matchingTasks);","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"Jweng88"},"content":" * Returns whether the command is an exit command.","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"Jweng88"},"content":" * @return False, as the FindCommand is not an exit command.","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"Jweng88"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"Jweng88"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"Jweng88"},"content":" return false;","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"Jweng88"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"Jweng88":60}},{"path":"src/main/java/duke/command/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jweng88"},"content":"package duke.command;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"Jweng88"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Jweng88"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"Jweng88"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"Jweng88"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"Jweng88"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Jweng88"},"content":" * Represents a command to list all tasks in the task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Jweng88"},"content":" * Inherits from the Command class.","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Jweng88"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Jweng88"},"content":" * Executes the ListCommand by displaying the task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Jweng88"},"content":" * @param tasks The task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Jweng88"},"content":" * @param ui The user interface.","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Jweng88"},"content":" * @param storage The storage component.","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Jweng88"},"content":" * @throws DukeException If an error occurs while executing the command.","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Jweng88"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"Jweng88"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"Jweng88"},"content":" ui.showTaskList(tasks);","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Jweng88"},"content":" * Returns a boolean indicating whether the command is an exit command.","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Jweng88"},"content":" * @return A boolean indicating whether the command is an exit command.","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Jweng88"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"Jweng88"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"Jweng88"},"content":" return false;","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"Jweng88"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"Jweng88":36}},{"path":"src/main/java/duke/command/MarkAsDoneCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jweng88"},"content":"package duke.command;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"Jweng88"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"Jweng88"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"Jweng88"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"Jweng88"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"Jweng88"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Jweng88"},"content":" * Represents a command to mark a task as done in the task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Jweng88"},"content":" * Inherits from the Command class.","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Jweng88"},"content":"public class MarkAsDoneCommand extends Command {","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Jweng88"},"content":" /** The index of the task to mark as done */","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Jweng88"},"content":" private final int taskIndex;","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Jweng88"},"content":" * Constructs a MarkAsDoneCommand object with the given task index.","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Jweng88"},"content":" * @param taskIndex The index of the task to be marked as done.","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Jweng88"},"content":" public MarkAsDoneCommand(int taskIndex) {","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"Jweng88"},"content":" this.taskIndex \u003d taskIndex - 1;","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Jweng88"},"content":" * Executes the MarkAsDoneCommand by marking the task as done in the task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Jweng88"},"content":" * @param tasks The task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Jweng88"},"content":" * @param ui The user interface.","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Jweng88"},"content":" * @param storage The storage component.","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Jweng88"},"content":" * @throws DukeException If an error occurs while executing the command.","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"Jweng88"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"Jweng88"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"Jweng88"},"content":" if (taskIndex \u003e\u003d 0 \u0026\u0026 taskIndex \u003c tasks.size()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"Jweng88"},"content":" tasks.markTaskAsDone(taskIndex);","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"Jweng88"},"content":" ui.showTaskMarkedAsDone(tasks, taskIndex);","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"Jweng88"},"content":" } else {","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"Jweng88"},"content":" throw new DukeException(\"Invalid task number.\");","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"Jweng88"},"content":" * Returns a boolean indicating whether the command is an exit command.","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"Jweng88"},"content":" * @return A boolean indicating whether the command is an exit command.","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"Jweng88"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"Jweng88"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"Jweng88"},"content":" return false;","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"Jweng88"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"Jweng88":53}},{"path":"src/main/java/duke/command/MarkAsUndoneCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jweng88"},"content":"package duke.command;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"Jweng88"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"Jweng88"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"Jweng88"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"Jweng88"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"Jweng88"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Jweng88"},"content":" * Represents a command to mark a task as undone in the task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Jweng88"},"content":" * Inherits from the Command class.","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Jweng88"},"content":"public class MarkAsUndoneCommand extends Command {","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Jweng88"},"content":" /** The index of the task to mark as undone */","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Jweng88"},"content":" private final int taskIndex;","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Jweng88"},"content":" * Constructs a MarkAsUndoneCommand object with the given task index.","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Jweng88"},"content":" * @param taskIndex The index of the task to be marked as undone.","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Jweng88"},"content":" public MarkAsUndoneCommand(int taskIndex) {","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"Jweng88"},"content":" this.taskIndex \u003d taskIndex - 1;","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Jweng88"},"content":" * Executes the MarkAsUndoneCommand by marking the task as undone in the task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Jweng88"},"content":" * @param tasks The task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Jweng88"},"content":" * @param ui The user interface.","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Jweng88"},"content":" * @param storage The storage component.","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Jweng88"},"content":" * @throws DukeException If an error occurs while executing the command.","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"Jweng88"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"Jweng88"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"Jweng88"},"content":" if (taskIndex \u003e\u003d 0 \u0026\u0026 taskIndex \u003c tasks.size()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"Jweng88"},"content":" tasks.markTaskAsUndone(taskIndex);","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"Jweng88"},"content":" ui.showTaskMarkedAsUndone(tasks, taskIndex);","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"Jweng88"},"content":" } else {","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"Jweng88"},"content":" throw new DukeException(\"Invalid task number.\");","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"Jweng88"},"content":" * Returns a boolean indicating whether the command is an exit command.","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"Jweng88"},"content":" * @return A boolean indicating whether the command is an exit command.","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"Jweng88"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"Jweng88"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"Jweng88"},"content":" return false;","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"Jweng88"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"Jweng88":53}},{"path":"src/main/java/duke/command/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jweng88"},"content":"package duke.command;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"Jweng88"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"Jweng88"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Jweng88"},"content":" * Parses user input and returns the corresponding command object.","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Jweng88"},"content":"public class Parser {","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Jweng88"},"content":" * An enumeration of all possible command types.","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Jweng88"},"content":" public enum CommandType {","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"Jweng88"},"content":" TODO, DEADLINE, EVENT, LIST, MARK, UNMARK, DELETE, FIND, BYE","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Jweng88"},"content":" * Parses the given user input and returns the corresponding command object.","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Jweng88"},"content":" * @param fullCommand The user input to be parsed.","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Jweng88"},"content":" * @return The corresponding command object.","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Jweng88"},"content":" * @throws DukeException If an error occurs while parsing the input.","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Jweng88"},"content":" public static Command parse(String fullCommand) throws DukeException {","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"Jweng88"},"content":" // Add assertions to check assumptions about the input","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"Jweng88"},"content":" assert fullCommand !\u003d null : \"Command should not be null\";","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"Jweng88"},"content":" String[] commandParts \u003d fullCommand.split(\" \", 2);","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"Jweng88"},"content":" String commandTypeStr \u003d commandParts[0].toLowerCase();","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"Jweng88"},"content":" CommandType commandType;","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"Jweng88"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"Jweng88"},"content":" commandType \u003d CommandType.valueOf(commandTypeStr.toUpperCase());","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"Jweng88"},"content":" } catch (IllegalArgumentException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"Jweng88"},"content":" throw new DukeException(\"I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"Jweng88"},"content":" switch (commandType) {","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"Jweng88"},"content":" case TODO:","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"Jweng88"},"content":" return new AddTodoCommand(commandParts[1]);","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"Jweng88"},"content":" case DEADLINE:","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"Jweng88"},"content":" int byIndex \u003d commandParts[1].indexOf(\"/by\");","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"Jweng88"},"content":" if (byIndex \u003d\u003d -1) {","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"Jweng88"},"content":" throw new DukeException(\"The format of a deadline should be: deadline DESCRIPTION /by DATE\");","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"Jweng88"},"content":" String description \u003d commandParts[1].substring(0, byIndex).trim();","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"Jweng88"},"content":" String by \u003d commandParts[1].substring(byIndex + 3).trim();","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"Jweng88"},"content":" return new AddDeadlineCommand(description, by);","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"Jweng88"},"content":" case EVENT:","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"Jweng88"},"content":" int fromIndex \u003d commandParts[1].indexOf(\"/from\");","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"Jweng88"},"content":" if (fromIndex \u003d\u003d -1) {","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"Jweng88"},"content":" throw new DukeException(\"The format of an event should be: event DESCRIPTION /from DATE /to DATE\");","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"Jweng88"},"content":" description \u003d commandParts[1].substring(0, fromIndex).trim();","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"Jweng88"},"content":" String fromTo \u003d commandParts[1].substring(fromIndex + 6).trim();","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"Jweng88"},"content":" if (fromTo.isEmpty()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":59,"author":{"gitId":"Jweng88"},"content":" throw new DukeException(\"The format of an event should be: event DESCRIPTION /from DATE /to DATE\");","lastModifiedDate":"2023-08-27"},{"lineNumber":60,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"Jweng88"},"content":" String[] fromToParts \u003d fromTo.split(\"/to\");","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"Jweng88"},"content":" String from \u003d fromToParts[0].trim();","lastModifiedDate":"2023-08-27"},{"lineNumber":63,"author":{"gitId":"Jweng88"},"content":" String to \u003d fromToParts[1].trim();","lastModifiedDate":"2023-08-27"},{"lineNumber":64,"author":{"gitId":"Jweng88"},"content":" return new AddEventCommand(description, from, to);","lastModifiedDate":"2023-08-27"},{"lineNumber":65,"author":{"gitId":"Jweng88"},"content":" case LIST:","lastModifiedDate":"2023-08-27"},{"lineNumber":66,"author":{"gitId":"Jweng88"},"content":" return new ListCommand();","lastModifiedDate":"2023-08-27"},{"lineNumber":67,"author":{"gitId":"Jweng88"},"content":" case MARK:","lastModifiedDate":"2023-08-27"},{"lineNumber":68,"author":{"gitId":"Jweng88"},"content":" int index \u003d Integer.parseInt(commandParts[1]);","lastModifiedDate":"2023-09-09"},{"lineNumber":69,"author":{"gitId":"Jweng88"},"content":" assert index \u003e\u003d 0 : \"Index should be non-negative\";","lastModifiedDate":"2023-09-09"},{"lineNumber":70,"author":{"gitId":"Jweng88"},"content":" return new MarkAsDoneCommand(index);","lastModifiedDate":"2023-09-09"},{"lineNumber":71,"author":{"gitId":"Jweng88"},"content":" case UNMARK:","lastModifiedDate":"2023-08-27"},{"lineNumber":72,"author":{"gitId":"Jweng88"},"content":" int number \u003d Integer.parseInt(commandParts[1]);","lastModifiedDate":"2023-09-09"},{"lineNumber":73,"author":{"gitId":"Jweng88"},"content":" assert number \u003e\u003d 0 : \"Index should be non-negative\";","lastModifiedDate":"2023-09-09"},{"lineNumber":74,"author":{"gitId":"Jweng88"},"content":" return new MarkAsUndoneCommand(number);","lastModifiedDate":"2023-09-09"},{"lineNumber":75,"author":{"gitId":"Jweng88"},"content":" case DELETE:","lastModifiedDate":"2023-08-27"},{"lineNumber":76,"author":{"gitId":"Jweng88"},"content":" int taskIndex \u003d Integer.parseInt(commandParts[1]);","lastModifiedDate":"2023-09-09"},{"lineNumber":77,"author":{"gitId":"Jweng88"},"content":" assert taskIndex \u003e\u003d 0 : \"Index should be non-negative\";","lastModifiedDate":"2023-09-09"},{"lineNumber":78,"author":{"gitId":"Jweng88"},"content":" return new DeleteCommand(taskIndex);","lastModifiedDate":"2023-09-09"},{"lineNumber":79,"author":{"gitId":"Jweng88"},"content":" case FIND:","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"Jweng88"},"content":" return new FindCommand(commandParts[1]);","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"Jweng88"},"content":" case BYE:","lastModifiedDate":"2023-08-27"},{"lineNumber":82,"author":{"gitId":"Jweng88"},"content":" return new ExitCommand();","lastModifiedDate":"2023-08-27"},{"lineNumber":83,"author":{"gitId":"Jweng88"},"content":" default:","lastModifiedDate":"2023-08-27"},{"lineNumber":84,"author":{"gitId":"Jweng88"},"content":" throw new DukeException(\"I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-08-27"},{"lineNumber":85,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":86,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":87,"author":{"gitId":"Jweng88"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"Jweng88":87}},{"path":"src/main/java/duke/exception/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jweng88"},"content":"package duke.exception;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"Jweng88"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Jweng88"},"content":" * Represents an exception specific to the Duke chatbot.","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Jweng88"},"content":" * Inherits from the Exception class.","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"Jweng88"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Jweng88"},"content":" * Constructs a DukeException object with the given error message.","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Jweng88"},"content":" * @param message The error message associated with the exception.","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Jweng88"},"content":" public DukeException(String message) {","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"Jweng88"},"content":" super(message);","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"Jweng88"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"Jweng88":17}},{"path":"src/main/java/duke/storage/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jweng88"},"content":"package duke.storage;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"Jweng88"},"content":"import java.io.File;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"Jweng88"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"Jweng88"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"Jweng88"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"Jweng88"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"Jweng88"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"Jweng88"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"Jweng88"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Jweng88"},"content":" * Represents the storage component of the Duke chatbot.","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Jweng88"},"content":" * Handles loading and saving of tasks to a file.","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Jweng88"},"content":"public class Storage {","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Jweng88"},"content":" /** The file path of the storage */","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Jweng88"},"content":" private final String filePath;","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Jweng88"},"content":" * Constructs a Storage object with the given file path.","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Jweng88"},"content":" * @param filePath The file path of the file to be used for storage.","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"Jweng88"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"Jweng88"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"Jweng88"},"content":" createFileIfNotExists();","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"Jweng88"},"content":" * Checks if the duke.txt file exists, and if not, creates an empty one.","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"Jweng88"},"content":" private void createFileIfNotExists() {","lastModifiedDate":"2023-09-09"},{"lineNumber":35,"author":{"gitId":"Jweng88"},"content":" try {","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"Jweng88"},"content":" File file \u003d new File(filePath);","lastModifiedDate":"2023-09-09"},{"lineNumber":37,"author":{"gitId":"Jweng88"},"content":" if (!file.exists()) {","lastModifiedDate":"2023-09-09"},{"lineNumber":38,"author":{"gitId":"Jweng88"},"content":" file.createNewFile();","lastModifiedDate":"2023-09-09"},{"lineNumber":39,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"Jweng88"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-09"},{"lineNumber":41,"author":{"gitId":"Jweng88"},"content":" // Handle the exception, e.g., log an error message","lastModifiedDate":"2023-09-09"},{"lineNumber":42,"author":{"gitId":"Jweng88"},"content":" System.err.println(\"Error creating the file: \" + e.getMessage());","lastModifiedDate":"2023-09-09"},{"lineNumber":43,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":44,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"Jweng88"},"content":" * Loads tasks from the file.","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"Jweng88"},"content":" * @return An ArrayList of tasks loaded from the file.","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"Jweng88"},"content":" * @throws DukeException If an error occurs while loading the tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"Jweng88"},"content":" public ArrayList\u003cTask\u003e load() throws DukeException {","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"Jweng88"},"content":" ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"Jweng88"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"Jweng88"},"content":" File file \u003d new File(filePath);","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"Jweng88"},"content":" Scanner scanner \u003d new Scanner(file);","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"Jweng88"},"content":" while (scanner.hasNextLine()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"Jweng88"},"content":" String line \u003d scanner.nextLine();","lastModifiedDate":"2023-08-27"},{"lineNumber":59,"author":{"gitId":"Jweng88"},"content":" if (line.isEmpty()) {","lastModifiedDate":"2023-09-09"},{"lineNumber":60,"author":{"gitId":"Jweng88"},"content":" break;","lastModifiedDate":"2023-09-09"},{"lineNumber":61,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":62,"author":{"gitId":"Jweng88"},"content":" Task task \u003d Task.createTaskFromFormattedString(line);","lastModifiedDate":"2023-08-27"},{"lineNumber":63,"author":{"gitId":"Jweng88"},"content":" if (task !\u003d null) {","lastModifiedDate":"2023-08-27"},{"lineNumber":64,"author":{"gitId":"Jweng88"},"content":" tasks.add(task);","lastModifiedDate":"2023-08-27"},{"lineNumber":65,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":66,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":67,"author":{"gitId":"Jweng88"},"content":" scanner.close();","lastModifiedDate":"2023-08-27"},{"lineNumber":68,"author":{"gitId":"Jweng88"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":69,"author":{"gitId":"Jweng88"},"content":" throw new DukeException(\"Error loading tasks from file.\");","lastModifiedDate":"2023-08-27"},{"lineNumber":70,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":71,"author":{"gitId":"Jweng88"},"content":" return tasks;","lastModifiedDate":"2023-08-27"},{"lineNumber":72,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":73,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":74,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"Jweng88"},"content":" * Saves tasks to the file.","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"Jweng88"},"content":" * @param tasks The ArrayList of tasks to be saved.","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"Jweng88"},"content":" * @throws DukeException If an error occurs while saving the tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"Jweng88"},"content":" public void save(ArrayList\u003cTask\u003e tasks) throws DukeException {","lastModifiedDate":"2023-08-27"},{"lineNumber":81,"author":{"gitId":"Jweng88"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":82,"author":{"gitId":"Jweng88"},"content":" File file \u003d new File(filePath);","lastModifiedDate":"2023-08-27"},{"lineNumber":83,"author":{"gitId":"Jweng88"},"content":" FileWriter writer \u003d new FileWriter(file);","lastModifiedDate":"2023-08-27"},{"lineNumber":84,"author":{"gitId":"Jweng88"},"content":" for (Task task : tasks) {","lastModifiedDate":"2023-08-27"},{"lineNumber":85,"author":{"gitId":"Jweng88"},"content":" writer.write(task.toFormattedString() + \"\\n\");","lastModifiedDate":"2023-08-27"},{"lineNumber":86,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":87,"author":{"gitId":"Jweng88"},"content":" writer.close();","lastModifiedDate":"2023-08-27"},{"lineNumber":88,"author":{"gitId":"Jweng88"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":89,"author":{"gitId":"Jweng88"},"content":" throw new DukeException(\"Error saving tasks to file.\");","lastModifiedDate":"2023-08-27"},{"lineNumber":90,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":91,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":92,"author":{"gitId":"Jweng88"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"Jweng88":92}},{"path":"src/main/java/duke/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jweng88"},"content":"package duke.task;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"Jweng88"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"Jweng88"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"Jweng88"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"Jweng88"},"content":" * Represents a task with a deadline.","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Jweng88"},"content":" * Inherits from the Task class.","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Jweng88"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Jweng88"},"content":" /** The deadline of the task */","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Jweng88"},"content":" protected LocalDateTime by;","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Jweng88"},"content":" * Constructs a Deadline object with the given description and deadline.","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Jweng88"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Jweng88"},"content":" * @param by The deadline of the task in the format \"yyyy-MM-dd HH:mm\".","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Jweng88"},"content":" public Deadline(String description, String by) {","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"Jweng88"},"content":" super(description);","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"Jweng88"},"content":" this.by \u003d LocalDateTime.parse(by);","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Jweng88"},"content":" * Returns a string representation of the Deadline object.","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Jweng88"},"content":" * @return A string representation of the Deadline object.","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Jweng88"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"Jweng88"},"content":" public String toString() {","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"Jweng88"},"content":" return \"[D]\" + super.toString() + \" (by: \"","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"Jweng88"},"content":" + by.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy HH:mm\")) + \")\";","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"Jweng88"},"content":" * Returns a formatted string representation of the Deadline object.","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"Jweng88"},"content":" * @return A formatted string representation of the Deadline object.","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"Jweng88"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"Jweng88"},"content":" public String toFormattedString() {","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"Jweng88"},"content":" return \"D | \" + (isDone ? \"1\" : \"0\") + \" | \"","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"Jweng88"},"content":" + description + \" | \" + by;","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"Jweng88"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"Jweng88":47}},{"path":"src/main/java/duke/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jweng88"},"content":"package duke.task;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"Jweng88"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"Jweng88"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"Jweng88"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"Jweng88"},"content":" * Represents a task that starts and ends at specific times.","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Jweng88"},"content":" * Inherits from the Task class.","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Jweng88"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Jweng88"},"content":" /** The start time of the event */","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Jweng88"},"content":" protected LocalDateTime from;","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Jweng88"},"content":" /** The end time of the event */","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Jweng88"},"content":" protected LocalDateTime to;","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Jweng88"},"content":" * Constructs an Event object with the given description, start time, and end time.","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Jweng88"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Jweng88"},"content":" * @param from The start time of the task in the format \"yyyy-MM-dd HH:mm\".","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Jweng88"},"content":" * @param to The end time of the task in the format \"yyyy-MM-dd HH:mm\".","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"Jweng88"},"content":" public Event(String description, String from, String to) {","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"Jweng88"},"content":" super(description);","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"Jweng88"},"content":" this.from \u003d LocalDateTime.parse(from);","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"Jweng88"},"content":" this.to \u003d LocalDateTime.parse(to);","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Jweng88"},"content":" * Returns a string representation of the Event object.","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"Jweng88"},"content":" * @return A string representation of the Event object.","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"Jweng88"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"Jweng88"},"content":" public String toString() {","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"Jweng88"},"content":" return \"[E]\" + super.toString()","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"Jweng88"},"content":" + \" (from: \" + from.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy HH:mm\"))","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"Jweng88"},"content":" + \" to: \" + to.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy HH:mm\")) + \")\";","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"Jweng88"},"content":" * Returns a formatted string representation of the Event object.","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"Jweng88"},"content":" * @return A formatted string representation of the Event object.","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"Jweng88"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"Jweng88"},"content":" public String toFormattedString() {","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"Jweng88"},"content":" return \"E | \" + (isDone ? \"1\" : \"0\") + \" | \"","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"Jweng88"},"content":" + description + \" | \" + from + \" | \" + to;","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"Jweng88"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"Jweng88":53}},{"path":"src/main/java/duke/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jweng88"},"content":"package duke.task;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"Jweng88"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Jweng88"},"content":" * Represents a task with a description and completion status.","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Jweng88"},"content":"public class Task {","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Jweng88"},"content":" /** Represents a task in the task list */","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Jweng88"},"content":" protected String description;","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Jweng88"},"content":" /** Indicates whether the task is done or not */","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Jweng88"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Jweng88"},"content":" * Constructs a Task object with the given description.","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Jweng88"},"content":" * The initial completion status is set to false.","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Jweng88"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Jweng88"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"Jweng88"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"Jweng88"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"Jweng88"},"content":" * Marks the task as done by setting the completion status to true.","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Jweng88"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"Jweng88"},"content":" isDone \u003d true;","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Jweng88"},"content":" * Marks the task as not done by setting the completion status to false.","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"Jweng88"},"content":" public void markAsNotDone() {","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"Jweng88"},"content":" isDone \u003d false;","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"Jweng88"},"content":" * Returns the status icon of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"Jweng88"},"content":" * @return The status icon of the task (\"[X]\" if done, \"[ ]\" if not done).","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"Jweng88"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"Jweng88"},"content":" return (isDone ? \"[X]\" : \"[ ]\");","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"Jweng88"},"content":" * Returns the description of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"Jweng88"},"content":" * @return The description of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"Jweng88"},"content":" public String getDescription() {","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"Jweng88"},"content":" return description;","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"Jweng88"},"content":" * Returns a string representation of the Task object.","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"Jweng88"},"content":" * @return A string representation of the Task object.","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"Jweng88"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":63,"author":{"gitId":"Jweng88"},"content":" public String toString() {","lastModifiedDate":"2023-08-27"},{"lineNumber":64,"author":{"gitId":"Jweng88"},"content":" return this.getStatusIcon() + \" \" + this.getDescription();","lastModifiedDate":"2023-08-27"},{"lineNumber":65,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":66,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":67,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"Jweng88"},"content":" * Returns a formatted string representation of the Task object.","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"Jweng88"},"content":" * @return A formatted string representation of the Task object.","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"Jweng88"},"content":" public String toFormattedString() {","lastModifiedDate":"2023-08-27"},{"lineNumber":73,"author":{"gitId":"Jweng88"},"content":" return \"\";","lastModifiedDate":"2023-08-27"},{"lineNumber":74,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":75,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":76,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"Jweng88"},"content":" * Creates a Task object from a formatted string representation.","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"Jweng88"},"content":" * @param formattedString The formatted string representation of the Task object.","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"Jweng88"},"content":" * @return The Task object created from the formatted string.","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"Jweng88"},"content":" public static Task createTaskFromFormattedString(String formattedString) {","lastModifiedDate":"2023-08-27"},{"lineNumber":83,"author":{"gitId":"Jweng88"},"content":" String[] parts \u003d formattedString.split(\" \\\\| \");","lastModifiedDate":"2023-08-27"},{"lineNumber":84,"author":{"gitId":"Jweng88"},"content":" String taskType \u003d parts[0];","lastModifiedDate":"2023-08-27"},{"lineNumber":85,"author":{"gitId":"Jweng88"},"content":" boolean isDone \u003d parts[1].equals(\"1\");","lastModifiedDate":"2023-08-27"},{"lineNumber":86,"author":{"gitId":"Jweng88"},"content":" String description \u003d parts[2];","lastModifiedDate":"2023-08-27"},{"lineNumber":87,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":88,"author":{"gitId":"Jweng88"},"content":" switch (taskType) {","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"Jweng88"},"content":" case \"T\":","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"Jweng88"},"content":" Task todo \u003d new ToDo(description);","lastModifiedDate":"2023-08-27"},{"lineNumber":91,"author":{"gitId":"Jweng88"},"content":" todo.isDone \u003d isDone;","lastModifiedDate":"2023-08-27"},{"lineNumber":92,"author":{"gitId":"Jweng88"},"content":" return todo;","lastModifiedDate":"2023-08-27"},{"lineNumber":93,"author":{"gitId":"Jweng88"},"content":" case \"D\":","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"Jweng88"},"content":" String by \u003d parts[3];","lastModifiedDate":"2023-08-27"},{"lineNumber":95,"author":{"gitId":"Jweng88"},"content":" Task deadline \u003d new Deadline(description, by);","lastModifiedDate":"2023-08-27"},{"lineNumber":96,"author":{"gitId":"Jweng88"},"content":" deadline.isDone \u003d isDone;","lastModifiedDate":"2023-08-27"},{"lineNumber":97,"author":{"gitId":"Jweng88"},"content":" return deadline;","lastModifiedDate":"2023-08-27"},{"lineNumber":98,"author":{"gitId":"Jweng88"},"content":" case \"E\":","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"Jweng88"},"content":" String from \u003d parts[3];","lastModifiedDate":"2023-08-27"},{"lineNumber":100,"author":{"gitId":"Jweng88"},"content":" String to \u003d parts[4];","lastModifiedDate":"2023-08-27"},{"lineNumber":101,"author":{"gitId":"Jweng88"},"content":" Task event \u003d new Event(description, from, to);","lastModifiedDate":"2023-08-27"},{"lineNumber":102,"author":{"gitId":"Jweng88"},"content":" event.isDone \u003d isDone;","lastModifiedDate":"2023-08-27"},{"lineNumber":103,"author":{"gitId":"Jweng88"},"content":" return event;","lastModifiedDate":"2023-08-27"},{"lineNumber":104,"author":{"gitId":"Jweng88"},"content":" default:","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"Jweng88"},"content":" // Handle unrecognized task type","lastModifiedDate":"2023-08-27"},{"lineNumber":106,"author":{"gitId":"Jweng88"},"content":" return null;","lastModifiedDate":"2023-08-27"},{"lineNumber":107,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":108,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":109,"author":{"gitId":"Jweng88"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"Jweng88":109}},{"path":"src/main/java/duke/task/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jweng88"},"content":"package duke.task;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"Jweng88"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"Jweng88"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"Jweng88"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Jweng88"},"content":" * Represents a list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Jweng88"},"content":"public class TaskList {","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Jweng88"},"content":" /** The tasks in the task list */","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Jweng88"},"content":" private final ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Jweng88"},"content":" * Constructs a TaskList object with the given list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Jweng88"},"content":" * @param tasks The list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Jweng88"},"content":" public TaskList(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"Jweng88"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"Jweng88"},"content":" * Constructs an empty TaskList object.","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Jweng88"},"content":" public TaskList() {","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"Jweng88"},"content":" this.tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Jweng88"},"content":" * Returns the number of tasks in the list.","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"Jweng88"},"content":" * @return The number of tasks in the list.","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"Jweng88"},"content":" public int size() {","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"Jweng88"},"content":" return tasks.size();","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"Jweng88"},"content":" * Adds a task to the list.","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"Jweng88"},"content":" * @param task The task to be added.","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"Jweng88"},"content":" public void addTask(Task task) {","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"Jweng88"},"content":" tasks.add(task);","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"Jweng88"},"content":" * Deletes a task from the list at the specified index.","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"Jweng88"},"content":" * @param index The index of the task to be deleted.","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"Jweng88"},"content":" * @return The deleted task.","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"Jweng88"},"content":" * @throws DukeException If the index is invalid.","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"Jweng88"},"content":" public Task deleteTask(int index) throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"Jweng88"},"content":" assert index \u003e\u003d 0 : \"Index should be non-negative\";","lastModifiedDate":"2023-09-09"},{"lineNumber":58,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":59,"author":{"gitId":"Jweng88"},"content":" if (index \u003c 0 || index \u003e\u003d tasks.size()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"Jweng88"},"content":" throw new DukeException(\"Invalid task number. Please provide a valid task number.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"Jweng88"},"content":" return tasks.remove(index);","lastModifiedDate":"2023-08-27"},{"lineNumber":63,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":64,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":65,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"Jweng88"},"content":" * Marks a task in the list as done at the specified index.","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"Jweng88"},"content":" * @param index The index of the task to be marked as done.","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"Jweng88"},"content":" public void markTaskAsDone(int index) {","lastModifiedDate":"2023-08-27"},{"lineNumber":71,"author":{"gitId":"Jweng88"},"content":" assert index \u003e\u003d 0 : \"Index should be non-negative\";","lastModifiedDate":"2023-09-09"},{"lineNumber":72,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":73,"author":{"gitId":"Jweng88"},"content":" tasks.get(index).markAsDone();","lastModifiedDate":"2023-08-27"},{"lineNumber":74,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":75,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":76,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"Jweng88"},"content":" * Marks a task in the list as not done at the specified index.","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"Jweng88"},"content":" * @param index The index of the task to be marked as not done.","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"Jweng88"},"content":" public void markTaskAsUndone(int index) {","lastModifiedDate":"2023-08-27"},{"lineNumber":82,"author":{"gitId":"Jweng88"},"content":" assert index \u003e\u003d 0 : \"Index should be non-negative\";","lastModifiedDate":"2023-09-09"},{"lineNumber":83,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":84,"author":{"gitId":"Jweng88"},"content":" tasks.get(index).markAsNotDone();","lastModifiedDate":"2023-08-27"},{"lineNumber":85,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":86,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":87,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"Jweng88"},"content":" * Returns the task at the specified index.","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"Jweng88"},"content":" * @param index The index of the task to be returned.","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"Jweng88"},"content":" * @return The task at the specified index.","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"Jweng88"},"content":" * @throws DukeException If the index is invalid.","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"Jweng88"},"content":" public Task get(int index) throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":95,"author":{"gitId":"Jweng88"},"content":" assert index \u003e\u003d 0 : \"Index should be non-negative\";","lastModifiedDate":"2023-09-09"},{"lineNumber":96,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":97,"author":{"gitId":"Jweng88"},"content":" if (index \u003c 0 || index \u003e\u003d tasks.size()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":98,"author":{"gitId":"Jweng88"},"content":" throw new DukeException(\"Invalid task number. Please provide a valid task number.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":99,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":100,"author":{"gitId":"Jweng88"},"content":" return tasks.get(index);","lastModifiedDate":"2023-08-27"},{"lineNumber":101,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":102,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":103,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"Jweng88"},"content":" * Returns the list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":106,"author":{"gitId":"Jweng88"},"content":" * @return The list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":108,"author":{"gitId":"Jweng88"},"content":" public ArrayList\u003cTask\u003e getTasks() {","lastModifiedDate":"2023-08-27"},{"lineNumber":109,"author":{"gitId":"Jweng88"},"content":" return tasks;","lastModifiedDate":"2023-08-27"},{"lineNumber":110,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":111,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":112,"author":{"gitId":"Jweng88"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"Jweng88":112}},{"path":"src/main/java/duke/task/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jweng88"},"content":"package duke.task;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"Jweng88"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Jweng88"},"content":" * Represents a todo task.","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Jweng88"},"content":" * Inherits from the Task class.","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"Jweng88"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Jweng88"},"content":" * Constructs a ToDo object with the given description.","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Jweng88"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Jweng88"},"content":" public ToDo(String description) {","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"Jweng88"},"content":" super(description);","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Jweng88"},"content":" * Returns a string representation of the ToDo object.","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Jweng88"},"content":" * @return A string representation of the ToDo object.","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Jweng88"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"Jweng88"},"content":" public String toString() {","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"Jweng88"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Jweng88"},"content":" * Returns a formatted string representation of the ToDo object.","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Jweng88"},"content":" * @return A formatted string representation of the ToDo object.","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Jweng88"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"Jweng88"},"content":" public String toFormattedString() {","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"Jweng88"},"content":" return \"T | \" + (isDone ? \"1\" : \"0\") + \" | \" + description;","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"Jweng88"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"Jweng88":37}},{"path":"src/main/java/duke/ui/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jweng88"},"content":"package duke.ui;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"Jweng88"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"Jweng88"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"Jweng88"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"Jweng88"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"Jweng88"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"Jweng88"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"Jweng88"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"Jweng88"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"Jweng88"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"Jweng88"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"Jweng88"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"Jweng88"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"Jweng88"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"Jweng88"},"content":" * A custom control class representing a dialog box with an ImageView for the speaker\u0027s face","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"Jweng88"},"content":" * and a label containing text from the speaker.","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"Jweng88"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"Jweng88"},"content":" /** The label for displaying text from the speaker. */","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"Jweng88"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"Jweng88"},"content":" private Label dialog;","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"Jweng88"},"content":" /** The ImageView for displaying the speaker\u0027s face. */","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"Jweng88"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"Jweng88"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"Jweng88"},"content":" * Constructs a `DialogBox` with the specified text and image.","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"Jweng88"},"content":" * This private constructor is used internally to create `DialogBox` instances.","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"Jweng88"},"content":" * @param text The text to display in the dialog box.","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"Jweng88"},"content":" * @param img The image to display as the speaker\u0027s face.","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"Jweng88"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"Jweng88"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"Jweng88"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"Jweng88"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"Jweng88"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"Jweng88"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"Jweng88"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"Jweng88"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"Jweng88"},"content":" // Add assertions to check assumptions about the provided parameters","lastModifiedDate":"2023-09-09"},{"lineNumber":49,"author":{"gitId":"Jweng88"},"content":" assert text !\u003d null : \"Text should not be null\";","lastModifiedDate":"2023-09-09"},{"lineNumber":50,"author":{"gitId":"Jweng88"},"content":" assert img !\u003d null : \"Image should not be null\";","lastModifiedDate":"2023-09-09"},{"lineNumber":51,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":52,"author":{"gitId":"Jweng88"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"Jweng88"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"Jweng88"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"Jweng88"},"content":" private void flip() {","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"Jweng88"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"Jweng88"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-05"},{"lineNumber":62,"author":{"gitId":"Jweng88"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-05"},{"lineNumber":63,"author":{"gitId":"Jweng88"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-05"},{"lineNumber":64,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":65,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":66,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":67,"author":{"gitId":"Jweng88"},"content":" * Creates a user dialog box with the specified text and image.","lastModifiedDate":"2023-09-05"},{"lineNumber":68,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":69,"author":{"gitId":"Jweng88"},"content":" * @param text The text to display in the user dialog.","lastModifiedDate":"2023-09-05"},{"lineNumber":70,"author":{"gitId":"Jweng88"},"content":" * @param img The image to display as the user\u0027s face.","lastModifiedDate":"2023-09-05"},{"lineNumber":71,"author":{"gitId":"Jweng88"},"content":" * @return A `DialogBox` instance representing the user\u0027s dialog.","lastModifiedDate":"2023-09-05"},{"lineNumber":72,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":73,"author":{"gitId":"Jweng88"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-05"},{"lineNumber":74,"author":{"gitId":"Jweng88"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-05"},{"lineNumber":75,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":76,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":77,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":78,"author":{"gitId":"Jweng88"},"content":" * Creates a Duke dialog box with the specified text and image.","lastModifiedDate":"2023-09-05"},{"lineNumber":79,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":80,"author":{"gitId":"Jweng88"},"content":" * @param text The text to display in Duke\u0027s dialog.","lastModifiedDate":"2023-09-05"},{"lineNumber":81,"author":{"gitId":"Jweng88"},"content":" * @param img The image to display as Duke\u0027s face.","lastModifiedDate":"2023-09-05"},{"lineNumber":82,"author":{"gitId":"Jweng88"},"content":" * @return A `DialogBox` instance representing Duke\u0027s dialog.","lastModifiedDate":"2023-09-05"},{"lineNumber":83,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":84,"author":{"gitId":"Jweng88"},"content":" public static DialogBox getDukeDialog(String text, Image img) {","lastModifiedDate":"2023-09-05"},{"lineNumber":85,"author":{"gitId":"Jweng88"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-05"},{"lineNumber":86,"author":{"gitId":"Jweng88"},"content":" db.flip();","lastModifiedDate":"2023-09-05"},{"lineNumber":87,"author":{"gitId":"Jweng88"},"content":" return db;","lastModifiedDate":"2023-09-05"},{"lineNumber":88,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":89,"author":{"gitId":"Jweng88"},"content":"}","lastModifiedDate":"2023-09-05"},{"lineNumber":90,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"Jweng88":90}},{"path":"src/main/java/duke/ui/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jweng88"},"content":"package duke.ui;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"Jweng88"},"content":"import duke.Duke;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"Jweng88"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"Jweng88"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"Jweng88"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"Jweng88"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"Jweng88"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"Jweng88"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"Jweng88"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"Jweng88"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"Jweng88"},"content":" * The `MainWindow` class serves as the controller for the main window of the Duke GUI.","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"Jweng88"},"content":" * It provides the layout and functionality for the user interface components, such as the","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"Jweng88"},"content":" * input field, message display area, and send button.","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"Jweng88"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"Jweng88"},"content":" /** The scroll pane component for displaying the chat messages and enabling scrolling. */","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"Jweng88"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"Jweng88"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"Jweng88"},"content":" /** The container for displaying dialog boxes containing user and Duke messages. */","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"Jweng88"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"Jweng88"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"Jweng88"},"content":" /** The input field where the user enters text messages. */","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"Jweng88"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"Jweng88"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"Jweng88"},"content":" /** The button for sending user messages or interacting with the application. */","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"Jweng88"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"Jweng88"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"Jweng88"},"content":" /** The Duke instance that handles the application\u0027s logic. */","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"Jweng88"},"content":" private Duke duke;","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"Jweng88"},"content":" /** The user\u0027s avatar image. */","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"Jweng88"},"content":" private Image userImage;","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"Jweng88"},"content":" /** Duke\u0027s avatar image. */","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"Jweng88"},"content":" private Image dukeImage;","lastModifiedDate":"2023-09-09"},{"lineNumber":43,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"Jweng88"},"content":" * Initializes the `MainWindow` controller after the FXML has been loaded.","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"Jweng88"},"content":" * It binds the scroll pane\u0027s vertical value to the dialog container\u0027s height,","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"Jweng88"},"content":" * ensuring automatic scrolling as messages are added.","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"Jweng88"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"Jweng88"},"content":" public void initialize() {","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"Jweng88"},"content":" // Add assertions to check assumptions about UI components","lastModifiedDate":"2023-09-09"},{"lineNumber":52,"author":{"gitId":"Jweng88"},"content":" assert scrollPane !\u003d null : \"ScrollPane should not be null\";","lastModifiedDate":"2023-09-09"},{"lineNumber":53,"author":{"gitId":"Jweng88"},"content":" assert dialogContainer !\u003d null : \"DialogContainer should not be null\";","lastModifiedDate":"2023-09-09"},{"lineNumber":54,"author":{"gitId":"Jweng88"},"content":" assert userInput !\u003d null : \"UserInput should not be null\";","lastModifiedDate":"2023-09-09"},{"lineNumber":55,"author":{"gitId":"Jweng88"},"content":" assert sendButton !\u003d null : \"SendButton should not be null\";","lastModifiedDate":"2023-09-09"},{"lineNumber":56,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":57,"author":{"gitId":"Jweng88"},"content":" String dukeImagePath \u003d \"/images/DaDuke.png\";","lastModifiedDate":"2023-09-09"},{"lineNumber":58,"author":{"gitId":"Jweng88"},"content":" String userImagePath \u003d \"/images/DaUser.png\";","lastModifiedDate":"2023-09-09"},{"lineNumber":59,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":60,"author":{"gitId":"Jweng88"},"content":" // Use assertions to check for valid image paths","lastModifiedDate":"2023-09-09"},{"lineNumber":61,"author":{"gitId":"Jweng88"},"content":" assert getClass().getResource(dukeImagePath) !\u003d null : \"Duke image path is invalid: \" + dukeImagePath;","lastModifiedDate":"2023-09-09"},{"lineNumber":62,"author":{"gitId":"Jweng88"},"content":" assert getClass().getResource(userImagePath) !\u003d null : \"User image path is invalid: \" + userImagePath;","lastModifiedDate":"2023-09-09"},{"lineNumber":63,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":64,"author":{"gitId":"Jweng88"},"content":" // Load the images","lastModifiedDate":"2023-09-09"},{"lineNumber":65,"author":{"gitId":"Jweng88"},"content":" userImage \u003d new Image(getClass().getResourceAsStream(userImagePath));","lastModifiedDate":"2023-09-09"},{"lineNumber":66,"author":{"gitId":"Jweng88"},"content":" dukeImage \u003d new Image(getClass().getResourceAsStream(dukeImagePath));","lastModifiedDate":"2023-09-09"},{"lineNumber":67,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":68,"author":{"gitId":"Jweng88"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-05"},{"lineNumber":69,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":70,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":71,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":72,"author":{"gitId":"Jweng88"},"content":" * Sets the Duke instance for the controller to enable communication with the Duke logic.","lastModifiedDate":"2023-09-05"},{"lineNumber":73,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":74,"author":{"gitId":"Jweng88"},"content":" * @param d The Duke instance that handles the application\u0027s logic.","lastModifiedDate":"2023-09-05"},{"lineNumber":75,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":76,"author":{"gitId":"Jweng88"},"content":" public void setDuke(Duke d) {","lastModifiedDate":"2023-09-05"},{"lineNumber":77,"author":{"gitId":"Jweng88"},"content":" duke \u003d d;","lastModifiedDate":"2023-09-05"},{"lineNumber":78,"author":{"gitId":"Jweng88"},"content":" dialogContainer.getChildren().add(","lastModifiedDate":"2023-09-05"},{"lineNumber":79,"author":{"gitId":"Jweng88"},"content":" DialogBox.getDukeDialog(duke.initialise(), dukeImage)","lastModifiedDate":"2023-09-05"},{"lineNumber":80,"author":{"gitId":"Jweng88"},"content":" );","lastModifiedDate":"2023-09-05"},{"lineNumber":81,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":82,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":83,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":84,"author":{"gitId":"Jweng88"},"content":" * Creates two dialog boxes, one echoing user input and the other containing Duke\u0027s reply","lastModifiedDate":"2023-09-05"},{"lineNumber":85,"author":{"gitId":"Jweng88"},"content":" * and then appends them to the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-05"},{"lineNumber":86,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":87,"author":{"gitId":"Jweng88"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":88,"author":{"gitId":"Jweng88"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-05"},{"lineNumber":89,"author":{"gitId":"Jweng88"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-05"},{"lineNumber":90,"author":{"gitId":"Jweng88"},"content":" String response \u003d duke.getResponse(input);","lastModifiedDate":"2023-09-05"},{"lineNumber":91,"author":{"gitId":"Jweng88"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-05"},{"lineNumber":92,"author":{"gitId":"Jweng88"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-05"},{"lineNumber":93,"author":{"gitId":"Jweng88"},"content":" DialogBox.getDukeDialog(response, dukeImage)","lastModifiedDate":"2023-09-05"},{"lineNumber":94,"author":{"gitId":"Jweng88"},"content":" );","lastModifiedDate":"2023-09-05"},{"lineNumber":95,"author":{"gitId":"Jweng88"},"content":" userInput.clear();","lastModifiedDate":"2023-09-05"},{"lineNumber":96,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":97,"author":{"gitId":"Jweng88"},"content":"}","lastModifiedDate":"2023-09-05"},{"lineNumber":98,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":99,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"Jweng88":99}},{"path":"src/main/java/duke/ui/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jweng88"},"content":"package duke.ui;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"Jweng88"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Jweng88"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"Jweng88"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"Jweng88"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Jweng88"},"content":" * Represents the user interface of the Duke chatbot.","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Jweng88"},"content":"public class Ui {","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Jweng88"},"content":" /** The current status or messages displayed to the user */","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"Jweng88"},"content":" private String currentStatus \u003d \"\";","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Jweng88"},"content":" * Changes the current status by appending a message.","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"Jweng88"},"content":" * @param status The message to append to the current status.","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Jweng88"},"content":" private void changeStatus(String status) {","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"Jweng88"},"content":" currentStatus +\u003d status + \"\\n\";","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"Jweng88"},"content":" * Displays a welcome message to the user.","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Jweng88"},"content":" public void showWelcome() {","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"Jweng88"},"content":" changeStatus(\"Hello! I\u0027m Bob\");","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"Jweng88"},"content":" changeStatus(\"What can I do for you?\");","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"Jweng88"},"content":" showLine();","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"Jweng88"},"content":" * Displays a horizontal line separator.","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"Jweng88"},"content":" public void showLine() {","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"Jweng88"},"content":" changeStatus(\"\");","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"Jweng88"},"content":" * Displays an error message to the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"Jweng88"},"content":" * @param errorMessage The error message to be displayed.","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"Jweng88"},"content":" public void showError(String errorMessage) {","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"Jweng88"},"content":" changeStatus(\"☹ \" + errorMessage);","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"Jweng88"},"content":" * Displays a goodbye message to the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"Jweng88"},"content":" public void showGoodbyeMessage() {","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"Jweng88"},"content":" changeStatus(\"Bye. Hope to see you again soon!\");","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"Jweng88"},"content":" * Displays a message indicating matching tasks found based on the keyword search.","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"Jweng88"},"content":" * @param matchingTasks The list of matching tasks to display.","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"Jweng88"},"content":" public void showMatchingTasks(TaskList matchingTasks) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"Jweng88"},"content":" changeStatus(\"Here are the matching tasks in your list:\");","lastModifiedDate":"2023-09-05"},{"lineNumber":64,"author":{"gitId":"Jweng88"},"content":" for (int i \u003d 0; i \u003c matchingTasks.size(); i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"Jweng88"},"content":" changeStatus((i + 1) + \".\" + matchingTasks.get(i));","lastModifiedDate":"2023-09-05"},{"lineNumber":66,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"Jweng88"},"content":" * Displays a message indicating no matching tasks were found based on the keyword search.","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"Jweng88"},"content":" public void showNoMatchingTasks() {","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"Jweng88"},"content":" changeStatus(\"No matching tasks found.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":74,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"Jweng88"},"content":" * Displays the list of tasks to the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"Jweng88"},"content":" * @param tasks The list of tasks to be displayed.","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"Jweng88"},"content":" * @throws DukeException If an error occurs while displaying the tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"Jweng88"},"content":" public void showTaskList(TaskList tasks) throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":83,"author":{"gitId":"Jweng88"},"content":" changeStatus(\"Here are the tasks in your list:\");","lastModifiedDate":"2023-09-05"},{"lineNumber":84,"author":{"gitId":"Jweng88"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-08-27"},{"lineNumber":85,"author":{"gitId":"Jweng88"},"content":" changeStatus((i + 1) + \". \" + tasks.get(i));","lastModifiedDate":"2023-09-05"},{"lineNumber":86,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":87,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":88,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":89,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"Jweng88"},"content":" * Displays a message indicating that a task has been added to the list.","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"Jweng88"},"content":" * @param tasks The list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"Jweng88"},"content":" * @throws DukeException If an error occurs while displaying the message.","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"Jweng88"},"content":" public void showTaskAddedMessage(TaskList tasks) throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":96,"author":{"gitId":"Jweng88"},"content":" changeStatus(\"Got it. I\u0027ve added this task:\");","lastModifiedDate":"2023-09-05"},{"lineNumber":97,"author":{"gitId":"Jweng88"},"content":" changeStatus(tasks.get(tasks.size() - 1).toString());","lastModifiedDate":"2023-09-05"},{"lineNumber":98,"author":{"gitId":"Jweng88"},"content":" changeStatus(\"Now you have \" + tasks.size() + \" tasks in the list.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":99,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":100,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":101,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"Jweng88"},"content":" * Displays a message indicating that a task has been marked as done.","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"Jweng88"},"content":" * @param tasks The list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"Jweng88"},"content":" * @param taskIndex The index of the task that has been marked as done.","lastModifiedDate":"2023-08-30"},{"lineNumber":106,"author":{"gitId":"Jweng88"},"content":" * @throws DukeException If an error occurs while displaying the message.","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":108,"author":{"gitId":"Jweng88"},"content":" public void showTaskMarkedAsDone(TaskList tasks, int taskIndex) throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":109,"author":{"gitId":"Jweng88"},"content":" changeStatus(\"Nice! I\u0027ve marked this task as done:\");","lastModifiedDate":"2023-09-05"},{"lineNumber":110,"author":{"gitId":"Jweng88"},"content":" changeStatus(tasks.get(taskIndex).toString());","lastModifiedDate":"2023-09-05"},{"lineNumber":111,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":112,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":113,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":114,"author":{"gitId":"Jweng88"},"content":" * Displays a message indicating that a task has been marked as not done.","lastModifiedDate":"2023-08-30"},{"lineNumber":115,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":116,"author":{"gitId":"Jweng88"},"content":" * @param tasks The list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":117,"author":{"gitId":"Jweng88"},"content":" * @param taskIndex The index of the task that has been marked as not done.","lastModifiedDate":"2023-08-30"},{"lineNumber":118,"author":{"gitId":"Jweng88"},"content":" * @throws DukeException If an error occurs while displaying the message.","lastModifiedDate":"2023-08-30"},{"lineNumber":119,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":120,"author":{"gitId":"Jweng88"},"content":" public void showTaskMarkedAsUndone(TaskList tasks, int taskIndex) throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":121,"author":{"gitId":"Jweng88"},"content":" changeStatus(\"OK, I\u0027ve marked this task as not done yet:\");","lastModifiedDate":"2023-09-05"},{"lineNumber":122,"author":{"gitId":"Jweng88"},"content":" changeStatus(tasks.get(taskIndex).toString());","lastModifiedDate":"2023-09-05"},{"lineNumber":123,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":124,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":125,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":126,"author":{"gitId":"Jweng88"},"content":" * Displays a message indicating that a task has been removed from the list.","lastModifiedDate":"2023-08-30"},{"lineNumber":127,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":128,"author":{"gitId":"Jweng88"},"content":" * @param tasks The list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":129,"author":{"gitId":"Jweng88"},"content":" * @param removedTask The task that has been removed from the list.","lastModifiedDate":"2023-08-30"},{"lineNumber":130,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":131,"author":{"gitId":"Jweng88"},"content":" public void showTaskRemoved(TaskList tasks, Task removedTask) {","lastModifiedDate":"2023-08-27"},{"lineNumber":132,"author":{"gitId":"Jweng88"},"content":" changeStatus(\"Noted. I\u0027ve removed this task:\");","lastModifiedDate":"2023-09-05"},{"lineNumber":133,"author":{"gitId":"Jweng88"},"content":" changeStatus(removedTask.toString());","lastModifiedDate":"2023-09-05"},{"lineNumber":134,"author":{"gitId":"Jweng88"},"content":" changeStatus(\"Now you have \" + tasks.size() + \" tasks in the list.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":135,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":136,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":137,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":138,"author":{"gitId":"Jweng88"},"content":" * Displays an error message indicating that tasks could not be loaded from a file.","lastModifiedDate":"2023-08-30"},{"lineNumber":139,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":140,"author":{"gitId":"Jweng88"},"content":" public void showLoadingError() {","lastModifiedDate":"2023-08-27"},{"lineNumber":141,"author":{"gitId":"Jweng88"},"content":" changeStatus(\"Error loading tasks from file.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":142,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":143,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":144,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":145,"author":{"gitId":"Jweng88"},"content":" * Gets the current status or messages displayed to the user and clears the status.","lastModifiedDate":"2023-09-05"},{"lineNumber":146,"author":{"gitId":"Jweng88"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":147,"author":{"gitId":"Jweng88"},"content":" * @return The current status or messages displayed to the user.","lastModifiedDate":"2023-09-05"},{"lineNumber":148,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":149,"author":{"gitId":"Jweng88"},"content":" public String getCurrentStatus() {","lastModifiedDate":"2023-09-05"},{"lineNumber":150,"author":{"gitId":"Jweng88"},"content":" String tmp \u003d currentStatus;","lastModifiedDate":"2023-09-05"},{"lineNumber":151,"author":{"gitId":"Jweng88"},"content":" this.currentStatus \u003d \"\";","lastModifiedDate":"2023-09-05"},{"lineNumber":152,"author":{"gitId":"Jweng88"},"content":" return tmp;","lastModifiedDate":"2023-09-05"},{"lineNumber":153,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":154,"author":{"gitId":"Jweng88"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"Jweng88":154}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"Jweng88"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"Jweng88"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"Jweng88"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"Jweng88"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"Jweng88"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"Jweng88"},"content":"\u003c!-- FXML document for the DialogBox user interface --\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"Jweng88"},"content":"\u003cfx:root alignment\u003d\"TOP_RIGHT\" maxHeight\u003d\"1.7976931348623157E308\" maxWidth\u003d\"1.7976931348623157E308\"","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"Jweng88"},"content":" prefWidth\u003d\"400.0\" type\u003d\"javafx.scene.layout.HBox\" xmlns\u003d\"http://javafx.com/javafx/17\"","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"Jweng88"},"content":" xmlns:fx\u003d\"http://javafx.com/fxml/1\"\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"Jweng88"},"content":" \u003c!-- Children elements within the DialogBox --\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"Jweng88"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"Jweng88"},"content":" \u003c!-- Label for displaying text content --\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"Jweng88"},"content":" \u003cLabel fx:id\u003d\"dialog\" text\u003d\"Label\" wrapText\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"Jweng88"},"content":" \u003c!-- ImageView for displaying an image --\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"Jweng88"},"content":" \u003cImageView fx:id\u003d\"displayPicture\" fitHeight\u003d\"99.0\" fitWidth\u003d\"99.0\"","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"Jweng88"},"content":" pickOnBounds\u003d\"true\" preserveRatio\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"Jweng88"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"Jweng88"},"content":" \u003c!-- Padding settings for the DialogBox --\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"Jweng88"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"Jweng88"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"Jweng88"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"Jweng88"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"Jweng88":29}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"Jweng88"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"Jweng88"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"Jweng88"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"Jweng88"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"Jweng88"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"Jweng88"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"Jweng88"},"content":"\u003c!-- FXML document for the MainWindow user interface --\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"Jweng88"},"content":"\u003cAnchorPane maxHeight\u003d\"-Infinity\" maxWidth\u003d\"-Infinity\" minHeight\u003d\"-Infinity\"","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"Jweng88"},"content":" minWidth\u003d\"-Infinity\" prefHeight\u003d\"600.0\" prefWidth\u003d\"400.0\" xmlns\u003d\"http://javafx.com/javafx/17\"","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"Jweng88"},"content":" xmlns:fx\u003d\"http://javafx.com/fxml/1\" fx:controller\u003d\"duke.ui.MainWindow\"\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"Jweng88"},"content":" \u003c!-- User input text field --\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"Jweng88"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"Jweng88"},"content":" \u003cTextField fx:id\u003d\"userInput\" layoutY\u003d\"558.0\" onAction\u003d\"#handleUserInput\"","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"Jweng88"},"content":" prefHeight\u003d\"41.0\" prefWidth\u003d\"324.0\" AnchorPane.bottomAnchor\u003d\"1.0\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"Jweng88"},"content":" \u003c!-- Send button --\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"Jweng88"},"content":" \u003cButton fx:id\u003d\"sendButton\" layoutX\u003d\"324.0\" layoutY\u003d\"558.0\" mnemonicParsing\u003d\"false\"","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"Jweng88"},"content":" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"41.0\" prefWidth\u003d\"76.0\" text\u003d\"Send\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"Jweng88"},"content":" \u003c!-- Scroll pane for dialog container --\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"Jweng88"},"content":" \u003cScrollPane fx:id\u003d\"scrollPane\" hbarPolicy\u003d\"NEVER\" hvalue\u003d\"1.0\"","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"Jweng88"},"content":" prefHeight\u003d\"557.0\" prefWidth\u003d\"400.0\" vvalue\u003d\"1.0\"\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"Jweng88"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"Jweng88"},"content":" \u003c!-- Dialog container for displaying messages --\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"Jweng88"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"552.0\" prefWidth\u003d\"388.0\" /\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"Jweng88"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"Jweng88"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"Jweng88"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"Jweng88"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"Jweng88":34}},{"path":"src/test/java/duke/task/TaskListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jweng88"},"content":"package duke.task;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Jweng88"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Jweng88"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"Jweng88"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"Jweng88"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Jweng88"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Jweng88"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"Jweng88"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Jweng88"},"content":" * A JUnit test class for the TaskList class.","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Jweng88"},"content":"public class TaskListTest {","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"Jweng88"},"content":" private TaskList taskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Jweng88"},"content":" * Sets up the test fixture.","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Jweng88"},"content":" * Creates a new TaskList object with an empty ArrayList.","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Jweng88"},"content":" @BeforeEach","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"Jweng88"},"content":" public void setup() {","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"Jweng88"},"content":" taskList \u003d new TaskList(new ArrayList\u003c\u003e());","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Jweng88"},"content":" * Tests the addTask method of the TaskList class.","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Jweng88"},"content":" * Adds a new task to the task list and checks if the size of the task list is 1.","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Jweng88"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"Jweng88"},"content":" public void testAddTask() {","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"Jweng88"},"content":" Task task \u003d new ToDo(\"Test Task\");","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"Jweng88"},"content":" taskList.addTask(task);","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"Jweng88"},"content":" assertEquals(1, taskList.getTasks().size());","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"Jweng88"},"content":" * Tests the deleteTask method of the TaskList class.","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"Jweng88"},"content":" * Adds a new task to the task list, deletes it, and checks if the size of the task list is 0.","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"Jweng88"},"content":" * @throws DukeException If an error occurs while deleting the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"Jweng88"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"Jweng88"},"content":" public void testDeleteTask() throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"Jweng88"},"content":" Task task \u003d new ToDo(\"Test Task\");","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"Jweng88"},"content":" taskList.addTask(task);","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"Jweng88"},"content":" taskList.deleteTask(0);","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"Jweng88"},"content":" assertEquals(0, taskList.getTasks().size());","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"Jweng88"},"content":" * Tests the deleteTask method of the TaskList class with an invalid task index.","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"Jweng88"},"content":" * Expects a DukeException to be thrown.","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"Jweng88"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"Jweng88"},"content":" public void testDeleteInvalidTask() {","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"Jweng88"},"content":" assertThrows(DukeException.class, () -\u003e taskList.deleteTask(0));","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"Jweng88"},"content":" * Tests the get method of the TaskList class.","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"Jweng88"},"content":" * Adds a new task to the task list, retrieves it, and checks if its string representation is correct.","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"Jweng88"},"content":" * @throws DukeException If an error occurs while retrieving the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"Jweng88"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"Jweng88"},"content":" public void testGetTask() throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"Jweng88"},"content":" Task task \u003d new ToDo(\"Test Task\");","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"Jweng88"},"content":" taskList.addTask(task);","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"Jweng88"},"content":" Task retrievedTask \u003d taskList.get(0);","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"Jweng88"},"content":" assertEquals(\"[T][ ] Test Task\", retrievedTask.toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":75,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"Jweng88"},"content":" * Tests the get method of the TaskList class with an invalid task index.","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"Jweng88"},"content":" * Expects a DukeException to be thrown.","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"Jweng88"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":81,"author":{"gitId":"Jweng88"},"content":" public void testGetInvalidTask() {","lastModifiedDate":"2023-08-29"},{"lineNumber":82,"author":{"gitId":"Jweng88"},"content":" assertThrows(DukeException.class, () -\u003e taskList.get(0));","lastModifiedDate":"2023-08-29"},{"lineNumber":83,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":84,"author":{"gitId":"Jweng88"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"Jweng88":84}},{"path":"src/test/java/duke/task/ToDoTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Jweng88"},"content":"package duke.task;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Jweng88"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"Jweng88"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"Jweng88"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Jweng88"},"content":" * A JUnit test class for the ToDo class.","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Jweng88"},"content":"public class ToDoTest {","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Jweng88"},"content":" * Tests the toString method of the ToDo class.","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Jweng88"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"Jweng88"},"content":" public void testToString() {","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"Jweng88"},"content":" ToDo todo \u003d new ToDo(\"Buy groceries\");","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"Jweng88"},"content":" assertEquals(\"[T][ ] Buy groceries\", todo.toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Jweng88"},"content":" * Tests the markAsDone method of the ToDo class.","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Jweng88"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"Jweng88"},"content":" public void testMarkAsDone() {","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"Jweng88"},"content":" ToDo todo \u003d new ToDo(\"Buy groceries\");","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"Jweng88"},"content":" todo.markAsDone();","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"Jweng88"},"content":" assertEquals(\"[T][X] Buy groceries\", todo.toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Jweng88"},"content":" * Tests the markAsNotDone method of the ToDo class.","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"Jweng88"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"Jweng88"},"content":" public void testMarkAsNotDone() {","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"Jweng88"},"content":" ToDo todo \u003d new ToDo(\"Buy groceries\");","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"Jweng88"},"content":" todo.markAsDone();","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"Jweng88"},"content":" todo.markAsNotDone();","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"Jweng88"},"content":" assertEquals(\"[T][ ] Buy groceries\", todo.toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"Jweng88"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"Jweng88"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"Jweng88"},"content":" * Tests the createTaskFromFormattedString method of the ToDo class.","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"Jweng88"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"Jweng88"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"Jweng88"},"content":" public void testCreateTaskFromFormattedString() {","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"Jweng88"},"content":" String formattedString \u003d \"T | 1 | Buy groceries\";","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"Jweng88"},"content":" Task task \u003d Task.createTaskFromFormattedString(formattedString);","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"Jweng88"},"content":" assertEquals(\"[T][X] Buy groceries\", task.toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"Jweng88"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"Jweng88"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"Jweng88":51}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"Jweng88"},"content":"todo read book","lastModifiedDate":"2023-08-22"},{"lineNumber":2,"author":{"gitId":"Jweng88"},"content":"deadline return book /by June 6th","lastModifiedDate":"2023-08-22"},{"lineNumber":3,"author":{"gitId":"Jweng88"},"content":"event project meeting /from Aug 6th 2pm /to 4pm","lastModifiedDate":"2023-08-22"},{"lineNumber":4,"author":{"gitId":"Jweng88"},"content":"mark 1","lastModifiedDate":"2023-08-22"},{"lineNumber":5,"author":{"gitId":"Jweng88"},"content":"mark 2","lastModifiedDate":"2023-08-22"},{"lineNumber":6,"author":{"gitId":"Jweng88"},"content":"unmark 2","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"Jweng88"},"content":"list","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"Jweng88"},"content":"bye","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"Jweng88":8}}] diff --git a/Jweng88_ip_master/commits.json b/Jweng88_ip_master/commits.json index c85976db..5a4ae4e7 100644 --- a/Jweng88_ip_master/commits.json +++ b/Jweng88_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"Jweng88":[{"date":"2023-08-21","commitResults":[{"hash":"dac1aa2ac9c29351993b65715a21714a95d6ad26","isMergeCommit":false,"messageTitle":"Rename, Greet, Exit","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":6}}},{"hash":"2f45a14ce7e1f0656392bb462d239c216d73282d","isMergeCommit":false,"messageTitle":"Echo","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":16,"deletions":2}}},{"hash":"18c5329e08bd4a402b6ac0e5a1362529a8340a33","isMergeCommit":false,"messageTitle":"Add, List","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":2}}},{"hash":"95d56e2d798ef8485b371b83acf4797f17194a19","isMergeCommit":false,"messageTitle":"Mark as Done","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":46,"deletions":4}}}]},{"date":"2023-08-22","commitResults":[{"hash":"841c201595091aa3235988646148148400b65526","isMergeCommit":false,"messageTitle":"ToDos, Events, Deadlines","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":74,"deletions":7}}},{"hash":"0e99208124afad1c71ae17c5751d495a817d64ef","isMergeCommit":false,"messageTitle":"Automated Text UI Testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":8,"deletions":0}}},{"hash":"7ee68268880869d730501b793a7f5e5e1f93d3d1","isMergeCommit":false,"messageTitle":"Handle Errors","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":75,"deletions":47}}},{"hash":"0e7d2b128acd43f6f11654834e9ac32f1857a149","isMergeCommit":false,"messageTitle":"Delete","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":50,"deletions":30}}}]},{"date":"2023-08-26","commitResults":[{"hash":"8c7679b1fd7c7c6710ae17a37225d713134e13b0","isMergeCommit":false,"messageTitle":"Save tasks and load data from hard disk","messageBody":"The code now allows:\n* saving of tasks in hard disk automatically\n* loading of data from hard disk when chatbot starts up\n","tags":["Level-7"],"fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":0},"java":{"insertions":87,"deletions":0}}},{"hash":"6ef43b7b8adc265fee980167ab4472c205cd50b2","isMergeCommit":false,"messageTitle":"Teach the chatbot to understand dates and times","messageBody":"The code will allow the chatbot to understand:\n\n* store deadline dates and times as a java.time.LocalDateTime in the task object\n* store start and end of event dates and times as java.time.LocalDateTime in the task object\n","tags":["Level-8"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":2},"java":{"insertions":12,"deletions":8}}}]},{"date":"2023-08-27","commitResults":[{"hash":"766be71e9c6189abd838e5623717a1a34947846b","isMergeCommit":false,"messageTitle":"Make the code more OOP","messageBody":"The code has been refactored to extract out closely related code as\n\nclasses which includes:\n\n* Abstract class: Command\n* Classes extending Command class: AddDeadlineCommand, AddEventCommand,\n\nAddTodoCommand, DeleteCommand, ExitCommand, ListCommand,\n\nMarkAsDoneCommand, MarkAsUndoneCommand\n\n* Classes: Ui, Storage, Parser, TaskList, Duke\n","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"java":{"insertions":402,"deletions":149}}},{"hash":"367caa0671c8f06925154d8e2328d54a03aee75f","isMergeCommit":false,"messageTitle":"Organise the classes into suitable java packages","messageBody":"The code has been organised into suitable java packages as followed:\n\n* An overall duke package\n* Packages in duke: command, exception, storage, task, ui\n","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":266,"deletions":167}}}]},{"date":"2023-08-28","commitResults":[{"hash":"cc988bb10d26bad1877c6f9a668b7f11bddbcc1d","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027 into branch-Gradle","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-29","commitResults":[{"hash":"c19aa75878a3ced6dcf85bc7d54f0a9577df331d","isMergeCommit":false,"messageTitle":"Add JUnit tests to test behaviour of the code","messageBody":"The code has two added test classes:\n\n* TaskListTest class -- tests for addTask, deleteTask, get,\ngetting and deleting invalid task\n\n* ToDoTest class -- tests for toString, markAsDone, markAsNotDone,\n\ncreateTaskFromFormattedString\n","tags":["A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":105,"deletions":7}}},{"hash":"1e4c3f28582ae48b9e6383adb17058b43b7d62cf","isMergeCommit":false,"messageTitle":"Package the App as a JAR file","messageBody":"Edited on the build.gradle file to successfully package the app\nto an executable JAR file.\n","tags":["A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":4,"deletions":1}}}]},{"date":"2023-08-30","commitResults":[{"hash":"8283ae90449348fd57f3eef24a5816168a0e6719","isMergeCommit":false,"messageTitle":"Add JavaDoc comments to the code","messageBody":"Added header comments to all non-private classes/methods,\nand non-trivial private methods.\n","fileTypesAndContributionMap":{"java":{"insertions":510,"deletions":2}}},{"hash":"f716de49b063cf08435572c019ca3df0851ad922","isMergeCommit":false,"messageTitle":"Tweak the code to comply with the coding standard","messageBody":"The code now complies with the given coding standard.\n","fileTypesAndContributionMap":{"java":{"insertions":58,"deletions":50}}},{"hash":"d87c5ef9974cbac8298486a30cedfdd77c4ace17","isMergeCommit":false,"messageTitle":"Add JavaDoc comments to the code","messageBody":"Added additional header comments to all class-level members.\n","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":37,"deletions":0}}},{"hash":"66bee48c1879f4d1ce3ea6b9139efbfb0b8fd105","isMergeCommit":false,"messageTitle":"Allows users to find tasks with a keyword","messageBody":"The code now allows the user to find a task by searching for a keyword.\n","fileTypesAndContributionMap":{"java":{"insertions":98,"deletions":1}}},{"hash":"78e6dcf9746ea5e6c6ca4fbab9849d6cd6fdb33c","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"df4b56c0a85f78ebc635a1b43294efa462f1fc07","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-05","commitResults":[{"hash":"e6d4ffdc7260c50d2c42f78494326613767319cb","isMergeCommit":false,"messageTitle":"Add a GUI to the chatbot","messageBody":"The code uses the JavaFX technology to implement the GUI.\n\nUsers can now interact with the chatbot using the GUI\nrather than the text-based UI.\n","fileTypesAndContributionMap":{"gradle":{"insertions":15,"deletions":0},"fxml":{"insertions":63,"deletions":0},"java":{"insertions":317,"deletions":60}}},{"hash":"182565f2664f7a234b9bdd2aaec734289ef109bd","isMergeCommit":false,"messageTitle":"Use checkStyle to detect coding style violations","messageBody":"The code now follows the coding style guidelines.\n","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":0},"java":{"insertions":22,"deletions":21}}}]},{"date":"2023-09-06","commitResults":[{"hash":"7db9ebe5c46e68b6d571c16f0baf73d2abcc4b20","isMergeCommit":false,"messageTitle":"Use checkStyle to detect coding style violations","messageBody":"In the previous commit,\nthe code had some violations in the coding style.\n\nThe code now follows coding style guidelines\nwhile adding GUI to the chatbot.\n","fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":0},"java":{"insertions":20,"deletions":18}}},{"hash":"560526547c32e37fe9c2b4aed93f44d50fb47407","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-10\u0027","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"Jweng88":{"java":1630,"md":0,"fxml":63,"sh":0,"bat":0,"gradle":24,"txt":12}},"authorContributionVariance":{"Jweng88":74661.125},"authorDisplayNameMap":{"Jweng88":"CS2103T-T17-3 JOSH.. HAO"}} +{"authorDailyContributionsMap":{"Jweng88":[{"date":"2023-08-21","commitResults":[{"hash":"dac1aa2ac9c29351993b65715a21714a95d6ad26","isMergeCommit":false,"messageTitle":"Rename, Greet, Exit","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":6}}},{"hash":"2f45a14ce7e1f0656392bb462d239c216d73282d","isMergeCommit":false,"messageTitle":"Echo","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":16,"deletions":2}}},{"hash":"18c5329e08bd4a402b6ac0e5a1362529a8340a33","isMergeCommit":false,"messageTitle":"Add, List","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":2}}},{"hash":"95d56e2d798ef8485b371b83acf4797f17194a19","isMergeCommit":false,"messageTitle":"Mark as Done","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":46,"deletions":4}}}]},{"date":"2023-08-22","commitResults":[{"hash":"841c201595091aa3235988646148148400b65526","isMergeCommit":false,"messageTitle":"ToDos, Events, Deadlines","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":74,"deletions":7}}},{"hash":"0e99208124afad1c71ae17c5751d495a817d64ef","isMergeCommit":false,"messageTitle":"Automated Text UI Testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":8,"deletions":0}}},{"hash":"7ee68268880869d730501b793a7f5e5e1f93d3d1","isMergeCommit":false,"messageTitle":"Handle Errors","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":75,"deletions":47}}},{"hash":"0e7d2b128acd43f6f11654834e9ac32f1857a149","isMergeCommit":false,"messageTitle":"Delete","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":50,"deletions":30}}}]},{"date":"2023-08-26","commitResults":[{"hash":"8c7679b1fd7c7c6710ae17a37225d713134e13b0","isMergeCommit":false,"messageTitle":"Save tasks and load data from hard disk","messageBody":"The code now allows:\n* saving of tasks in hard disk automatically\n* loading of data from hard disk when chatbot starts up\n","tags":["Level-7"],"fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":0},"java":{"insertions":87,"deletions":0}}},{"hash":"6ef43b7b8adc265fee980167ab4472c205cd50b2","isMergeCommit":false,"messageTitle":"Teach the chatbot to understand dates and times","messageBody":"The code will allow the chatbot to understand:\n\n* store deadline dates and times as a java.time.LocalDateTime in the task object\n* store start and end of event dates and times as java.time.LocalDateTime in the task object\n","tags":["Level-8"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":2},"java":{"insertions":12,"deletions":8}}}]},{"date":"2023-08-27","commitResults":[{"hash":"766be71e9c6189abd838e5623717a1a34947846b","isMergeCommit":false,"messageTitle":"Make the code more OOP","messageBody":"The code has been refactored to extract out closely related code as\n\nclasses which includes:\n\n* Abstract class: Command\n* Classes extending Command class: AddDeadlineCommand, AddEventCommand,\n\nAddTodoCommand, DeleteCommand, ExitCommand, ListCommand,\n\nMarkAsDoneCommand, MarkAsUndoneCommand\n\n* Classes: Ui, Storage, Parser, TaskList, Duke\n","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"java":{"insertions":402,"deletions":149}}},{"hash":"367caa0671c8f06925154d8e2328d54a03aee75f","isMergeCommit":false,"messageTitle":"Organise the classes into suitable java packages","messageBody":"The code has been organised into suitable java packages as followed:\n\n* An overall duke package\n* Packages in duke: command, exception, storage, task, ui\n","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":266,"deletions":167}}}]},{"date":"2023-08-28","commitResults":[{"hash":"cc988bb10d26bad1877c6f9a668b7f11bddbcc1d","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027 into branch-Gradle","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-29","commitResults":[{"hash":"c19aa75878a3ced6dcf85bc7d54f0a9577df331d","isMergeCommit":false,"messageTitle":"Add JUnit tests to test behaviour of the code","messageBody":"The code has two added test classes:\n\n* TaskListTest class -- tests for addTask, deleteTask, get,\ngetting and deleting invalid task\n\n* ToDoTest class -- tests for toString, markAsDone, markAsNotDone,\n\ncreateTaskFromFormattedString\n","tags":["A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":105,"deletions":7}}},{"hash":"1e4c3f28582ae48b9e6383adb17058b43b7d62cf","isMergeCommit":false,"messageTitle":"Package the App as a JAR file","messageBody":"Edited on the build.gradle file to successfully package the app\nto an executable JAR file.\n","tags":["A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":4,"deletions":1}}}]},{"date":"2023-08-30","commitResults":[{"hash":"8283ae90449348fd57f3eef24a5816168a0e6719","isMergeCommit":false,"messageTitle":"Add JavaDoc comments to the code","messageBody":"Added header comments to all non-private classes/methods,\nand non-trivial private methods.\n","fileTypesAndContributionMap":{"java":{"insertions":510,"deletions":2}}},{"hash":"f716de49b063cf08435572c019ca3df0851ad922","isMergeCommit":false,"messageTitle":"Tweak the code to comply with the coding standard","messageBody":"The code now complies with the given coding standard.\n","fileTypesAndContributionMap":{"java":{"insertions":58,"deletions":50}}},{"hash":"d87c5ef9974cbac8298486a30cedfdd77c4ace17","isMergeCommit":false,"messageTitle":"Add JavaDoc comments to the code","messageBody":"Added additional header comments to all class-level members.\n","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":37,"deletions":0}}},{"hash":"66bee48c1879f4d1ce3ea6b9139efbfb0b8fd105","isMergeCommit":false,"messageTitle":"Allows users to find tasks with a keyword","messageBody":"The code now allows the user to find a task by searching for a keyword.\n","fileTypesAndContributionMap":{"java":{"insertions":98,"deletions":1}}},{"hash":"78e6dcf9746ea5e6c6ca4fbab9849d6cd6fdb33c","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"df4b56c0a85f78ebc635a1b43294efa462f1fc07","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-05","commitResults":[{"hash":"e6d4ffdc7260c50d2c42f78494326613767319cb","isMergeCommit":false,"messageTitle":"Add a GUI to the chatbot","messageBody":"The code uses the JavaFX technology to implement the GUI.\n\nUsers can now interact with the chatbot using the GUI\nrather than the text-based UI.\n","fileTypesAndContributionMap":{"gradle":{"insertions":15,"deletions":0},"fxml":{"insertions":63,"deletions":0},"java":{"insertions":317,"deletions":60}}},{"hash":"182565f2664f7a234b9bdd2aaec734289ef109bd","isMergeCommit":false,"messageTitle":"Use checkStyle to detect coding style violations","messageBody":"The code now follows the coding style guidelines.\n","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":0},"java":{"insertions":22,"deletions":21}}}]},{"date":"2023-09-06","commitResults":[{"hash":"7db9ebe5c46e68b6d571c16f0baf73d2abcc4b20","isMergeCommit":false,"messageTitle":"Use checkStyle to detect coding style violations","messageBody":"In the previous commit,\nthe code had some violations in the coding style.\n\nThe code now follows coding style guidelines\nwhile adding GUI to the chatbot.\n","fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":0},"java":{"insertions":20,"deletions":18}}},{"hash":"560526547c32e37fe9c2b4aed93f44d50fb47407","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-10\u0027","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-09","commitResults":[{"hash":"22f70d6e55b12d6a28ff5ef7952e48f767959672","isMergeCommit":false,"messageTitle":"Adding assertions to UI elements and task index","messageBody":"The code has some assumptions about the UI elements\nbeing present and task indexes being positive at runtime.\n\nHowever this might not be the case, so missing UI elements and\nnegative task indexes can lead to unexpected behaviours.\n\nAdding assertions can help us to catch these missing UI elements\nand negative indexes and stop the execution.\n\nUsing assertions is preferable as it is easy to implement, easy to\ndisable for production while ensuring the code functions as expected.\n\nRefer to this on the use of assertions:\nhttps://nus-cs2103-ay2324s1.github.io/website/se-book-adapted/chapters/errorHandling.html#assertions\n","tags":["A-FullCommitMessage"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":0},"java":{"insertions":43,"deletions":5}}},{"hash":"7e541090213af2a1893b06505e60b3e78837ccc8","isMergeCommit":false,"messageTitle":"Improve code quality","messageBody":"There are various points in the code where code quality can be\nimproved, including complicated header comments and deep nesting.\n\nComplicated header comments can be confusing and less clear.\nDeep nesting can make it difficult for the reader\nto keep track of the logic.\n\nComplicated header comments are replaced with\nsimpler ones for better readability.\nDeep nesting code are replaced with simpler code while\nmaking the happy path prominent so that the happy path\nis less nested, providing better readability and maintainability.\n\nSimpler header comments are preferred for better readability.\nLess nesting and making happy path prominent provides\nbetter code readability and maintainability.\n\nRefer to this on dealing with code quality:\nhttps://nus-cs2103-ay2324s1.github.io/website/schedule/week5/topics.html#W5-4\n","fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":11}}}]},{"date":"2023-09-10","commitResults":[{"hash":"29be322126808868bf6bba5b08a3bd3256c06b1f","isMergeCommit":true,"messageTitle":"Merge pull request #1 from Jweng88/branch-A-Assertions","messageBody":"Adding assertions to UI elements and task index","tags":["A-Assertions"],"fileTypesAndContributionMap":{}},{"hash":"1f84443b08ba4b6c64bfeebd69c3ed73d5552988","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-A-CodeQuality","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"86d9159ced154ab47584659baf48653b339860ab","isMergeCommit":true,"messageTitle":"Merge pull request #2 from Jweng88/branch-A-CodeQuality","messageBody":"Improve Code quality","tags":["A-CodeQuality"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"Jweng88":{"java":1681,"md":0,"fxml":63,"sh":0,"bat":0,"gradle":25,"txt":12}},"authorContributionVariance":{"Jweng88":64587.457},"authorDisplayNameMap":{"Jweng88":"CS2103T-T17-3 JOSH.. HAO"}} diff --git a/Kokseng1_ip_master/authorship.json b/Kokseng1_ip_master/authorship.json index f159be79..f2533fea 100644 --- a/Kokseng1_ip_master/authorship.json +++ b/Kokseng1_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":"Kokseng1"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-04"},{"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":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"Kokseng1"},"content":" implementation \u0027org.junit.jupiter:junit-jupiter-api:5.10.0\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"Kokseng1"},"content":" implementation \u0027org.junit.jupiter:junit-jupiter:5.10.0\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":16,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":17,"author":{"gitId":"Kokseng1"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":19,"author":{"gitId":"Kokseng1"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":20,"author":{"gitId":"Kokseng1"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":21,"author":{"gitId":"Kokseng1"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":22,"author":{"gitId":"Kokseng1"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":23,"author":{"gitId":"Kokseng1"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":24,"author":{"gitId":"Kokseng1"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":25,"author":{"gitId":"Kokseng1"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":26,"author":{"gitId":"Kokseng1"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":27,"author":{"gitId":"Kokseng1"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":28,"author":{"gitId":"Kokseng1"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":29,"author":{"gitId":"Kokseng1"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":30,"author":{"gitId":"Kokseng1"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":31,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":" }","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":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":48,"author":{"gitId":"Kokseng1"},"content":" mainClass.set(\"duke.Duke\")","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":50,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":51,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"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"},{"lineNumber":60,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":61,"author":{"gitId":"Kokseng1"},"content":"checkstyle {","lastModifiedDate":"2023-09-08"},{"lineNumber":62,"author":{"gitId":"Kokseng1"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":63,"author":{"gitId":"Kokseng1"},"content":"}","lastModifiedDate":"2023-09-08"}],"authorContributionMap":{"Kokseng1":22,"-":41}},{"path":"src/main/java/duke/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kokseng1"},"content":"package duke;","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":3,"author":{"gitId":"Kokseng1"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"Kokseng1"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"Kokseng1"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"Kokseng1"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"Kokseng1"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"Kokseng1"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"Kokseng1"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"Kokseng1"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"Kokseng1"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"Kokseng1"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"Kokseng1"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"Kokseng1"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"Kokseng1"},"content":"/**","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"Kokseng1"},"content":" * An example of a custom control using FXML.","lastModifiedDate":"2023-09-08"},{"lineNumber":19,"author":{"gitId":"Kokseng1"},"content":" * This control represents a dialog box consisting of an ImageView to represent the speaker\u0027s face and a label","lastModifiedDate":"2023-09-08"},{"lineNumber":20,"author":{"gitId":"Kokseng1"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-08"},{"lineNumber":21,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":22,"author":{"gitId":"Kokseng1"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-08"},{"lineNumber":23,"author":{"gitId":"Kokseng1"},"content":" @FXML","lastModifiedDate":"2023-09-08"},{"lineNumber":24,"author":{"gitId":"Kokseng1"},"content":" private Label dialog;","lastModifiedDate":"2023-09-08"},{"lineNumber":25,"author":{"gitId":"Kokseng1"},"content":" @FXML","lastModifiedDate":"2023-09-08"},{"lineNumber":26,"author":{"gitId":"Kokseng1"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-08"},{"lineNumber":27,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":28,"author":{"gitId":"Kokseng1"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-08"},{"lineNumber":29,"author":{"gitId":"Kokseng1"},"content":" try {","lastModifiedDate":"2023-09-08"},{"lineNumber":30,"author":{"gitId":"Kokseng1"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(duke.MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-08"},{"lineNumber":31,"author":{"gitId":"Kokseng1"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-08"},{"lineNumber":32,"author":{"gitId":"Kokseng1"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-08"},{"lineNumber":33,"author":{"gitId":"Kokseng1"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-08"},{"lineNumber":34,"author":{"gitId":"Kokseng1"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-08"},{"lineNumber":35,"author":{"gitId":"Kokseng1"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-08"},{"lineNumber":36,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":37,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":38,"author":{"gitId":"Kokseng1"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-08"},{"lineNumber":39,"author":{"gitId":"Kokseng1"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-08"},{"lineNumber":40,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":41,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":42,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":43,"author":{"gitId":"Kokseng1"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-08"},{"lineNumber":44,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":45,"author":{"gitId":"Kokseng1"},"content":" private void flip() {","lastModifiedDate":"2023-09-08"},{"lineNumber":46,"author":{"gitId":"Kokseng1"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-08"},{"lineNumber":47,"author":{"gitId":"Kokseng1"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-08"},{"lineNumber":48,"author":{"gitId":"Kokseng1"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-08"},{"lineNumber":49,"author":{"gitId":"Kokseng1"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-08"},{"lineNumber":50,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":51,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":52,"author":{"gitId":"Kokseng1"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-08"},{"lineNumber":53,"author":{"gitId":"Kokseng1"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-08"},{"lineNumber":54,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":55,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":56,"author":{"gitId":"Kokseng1"},"content":" public static DialogBox getDukeDialog(String text, Image img) {","lastModifiedDate":"2023-09-08"},{"lineNumber":57,"author":{"gitId":"Kokseng1"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-08"},{"lineNumber":58,"author":{"gitId":"Kokseng1"},"content":" db.flip();","lastModifiedDate":"2023-09-08"},{"lineNumber":59,"author":{"gitId":"Kokseng1"},"content":" return db;","lastModifiedDate":"2023-09-08"},{"lineNumber":60,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":61,"author":{"gitId":"Kokseng1"},"content":"}","lastModifiedDate":"2023-09-08"}],"authorContributionMap":{"Kokseng1":61}},{"path":"src/main/java/duke/DialogBoxOld.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kokseng1"},"content":"package duke;","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":3,"author":{"gitId":"Kokseng1"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"Kokseng1"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"Kokseng1"},"content":"import javafx.geometry.Insets;","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"Kokseng1"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"Kokseng1"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"Kokseng1"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"Kokseng1"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"Kokseng1"},"content":"import javafx.scene.layout.*;","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"Kokseng1"},"content":"import javafx.scene.shape.Circle;","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"Kokseng1"},"content":"import javafx.scene.paint.Color;","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"Kokseng1"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"Kokseng1"},"content":"/**","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"Kokseng1"},"content":" * Represents the dialog boxes that pop up everytime a message is sent","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":19,"author":{"gitId":"Kokseng1"},"content":"public class DialogBoxOld extends HBox {","lastModifiedDate":"2023-09-08"},{"lineNumber":20,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":21,"author":{"gitId":"Kokseng1"},"content":" private Label text;","lastModifiedDate":"2023-09-08"},{"lineNumber":22,"author":{"gitId":"Kokseng1"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-08"},{"lineNumber":23,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":24,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":25,"author":{"gitId":"Kokseng1"},"content":" * Constructor for a DialogBox instance","lastModifiedDate":"2023-09-08"},{"lineNumber":26,"author":{"gitId":"Kokseng1"},"content":" * @param l Label containing text to be displayed","lastModifiedDate":"2023-09-08"},{"lineNumber":27,"author":{"gitId":"Kokseng1"},"content":" * @param iv ImageView instance, which will display an image in the dialog box","lastModifiedDate":"2023-09-08"},{"lineNumber":28,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":29,"author":{"gitId":"Kokseng1"},"content":" public DialogBoxOld(Label l, ImageView iv) {","lastModifiedDate":"2023-09-08"},{"lineNumber":30,"author":{"gitId":"Kokseng1"},"content":" text \u003d l;","lastModifiedDate":"2023-09-08"},{"lineNumber":31,"author":{"gitId":"Kokseng1"},"content":" displayPicture \u003d iv;","lastModifiedDate":"2023-09-08"},{"lineNumber":32,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":33,"author":{"gitId":"Kokseng1"},"content":" text.setWrapText(true);","lastModifiedDate":"2023-09-08"},{"lineNumber":34,"author":{"gitId":"Kokseng1"},"content":" displayPicture.setFitWidth(100.0);","lastModifiedDate":"2023-09-08"},{"lineNumber":35,"author":{"gitId":"Kokseng1"},"content":" displayPicture.setFitHeight(100.0);","lastModifiedDate":"2023-09-08"},{"lineNumber":36,"author":{"gitId":"Kokseng1"},"content":" text.setPadding(new Insets(10, 20, 20, 10));","lastModifiedDate":"2023-09-08"},{"lineNumber":37,"author":{"gitId":"Kokseng1"},"content":" this.setAlignment(Pos.TOP_RIGHT);","lastModifiedDate":"2023-09-08"},{"lineNumber":38,"author":{"gitId":"Kokseng1"},"content":" this.getChildren().addAll(text, displayPicture);","lastModifiedDate":"2023-09-08"},{"lineNumber":39,"author":{"gitId":"Kokseng1"},"content":" this.setPadding(new Insets(20, 20, 20, 20));","lastModifiedDate":"2023-09-08"},{"lineNumber":40,"author":{"gitId":"Kokseng1"},"content":" this.setBackground(new Background(new BackgroundFill(Color.LIGHTBLUE, new CornerRadii(50), new Insets(20, 20, 20 , 20))));","lastModifiedDate":"2023-09-08"},{"lineNumber":41,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":42,"author":{"gitId":"Kokseng1"},"content":" Circle clip \u003d new Circle(50.0); // Adjusting the radius","lastModifiedDate":"2023-09-08"},{"lineNumber":43,"author":{"gitId":"Kokseng1"},"content":" clip.setCenterX(50.0);","lastModifiedDate":"2023-09-08"},{"lineNumber":44,"author":{"gitId":"Kokseng1"},"content":" clip.setCenterY(50.0);","lastModifiedDate":"2023-09-08"},{"lineNumber":45,"author":{"gitId":"Kokseng1"},"content":" displayPicture.setClip(clip); //clip into circle","lastModifiedDate":"2023-09-08"},{"lineNumber":46,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":47,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":48,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":49,"author":{"gitId":"Kokseng1"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-08"},{"lineNumber":50,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":51,"author":{"gitId":"Kokseng1"},"content":" private void flip() {","lastModifiedDate":"2023-09-08"},{"lineNumber":52,"author":{"gitId":"Kokseng1"},"content":" this.setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-08"},{"lineNumber":53,"author":{"gitId":"Kokseng1"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-08"},{"lineNumber":54,"author":{"gitId":"Kokseng1"},"content":" FXCollections.reverse(tmp);","lastModifiedDate":"2023-09-08"},{"lineNumber":55,"author":{"gitId":"Kokseng1"},"content":" this.getChildren().setAll(tmp);","lastModifiedDate":"2023-09-08"},{"lineNumber":56,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":57,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":58,"author":{"gitId":"Kokseng1"},"content":" public static DialogBoxOld getUserDialog(Label l, ImageView iv) {","lastModifiedDate":"2023-09-08"},{"lineNumber":59,"author":{"gitId":"Kokseng1"},"content":" return new DialogBoxOld(l, iv);","lastModifiedDate":"2023-09-08"},{"lineNumber":60,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":61,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":62,"author":{"gitId":"Kokseng1"},"content":" public static DialogBoxOld getDukeDialog(Label l, ImageView iv) {","lastModifiedDate":"2023-09-08"},{"lineNumber":63,"author":{"gitId":"Kokseng1"},"content":" var db \u003d new DialogBoxOld(l, iv);","lastModifiedDate":"2023-09-08"},{"lineNumber":64,"author":{"gitId":"Kokseng1"},"content":" db.flip();","lastModifiedDate":"2023-09-08"},{"lineNumber":65,"author":{"gitId":"Kokseng1"},"content":" return db;","lastModifiedDate":"2023-09-08"},{"lineNumber":66,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":67,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":68,"author":{"gitId":"Kokseng1"},"content":"}","lastModifiedDate":"2023-09-08"}],"authorContributionMap":{"Kokseng1":68}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kokseng1"},"content":"package duke;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"Kokseng1"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"Kokseng1"},"content":"import duke.exceptions.DukeException;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"Kokseng1"},"content":"import duke.exceptions.TaskParseException;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"Kokseng1"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Kokseng1"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"Kokseng1"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"Kokseng1"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"Kokseng1"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"Kokseng1"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"Kokseng1"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"Kokseng1"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"Kokseng1"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"Kokseng1"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"Kokseng1"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"Kokseng1"},"content":"import javafx.scene.layout.Region;","lastModifiedDate":"2023-09-08"},{"lineNumber":19,"author":{"gitId":"Kokseng1"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-08"},{"lineNumber":20,"author":{"gitId":"Kokseng1"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-08"},{"lineNumber":21,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"Kokseng1"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"Kokseng1"},"content":" * main program, responsible for running everything and connecting components together","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"Kokseng1"},"content":"public class Duke extends Application {","lastModifiedDate":"2023-09-08"},{"lineNumber":26,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"Kokseng1"},"content":" * types of task","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"Kokseng1"},"content":" public enum TaskType {","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"Kokseng1"},"content":" BYE,","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"Kokseng1"},"content":" LIST,","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"Kokseng1"},"content":" MARK,","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"Kokseng1"},"content":" UNMARK,","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"Kokseng1"},"content":" DELETE,","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"Kokseng1"},"content":" EVENT,","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"Kokseng1"},"content":" TODO,","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"Kokseng1"},"content":" DEADLINE,","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"Kokseng1"},"content":" FIND","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"Kokseng1"},"content":" protected Stage primaryStage;","lastModifiedDate":"2023-09-08"},{"lineNumber":41,"author":{"gitId":"Kokseng1"},"content":" @FXML","lastModifiedDate":"2023-09-08"},{"lineNumber":42,"author":{"gitId":"Kokseng1"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-08"},{"lineNumber":43,"author":{"gitId":"Kokseng1"},"content":" @FXML","lastModifiedDate":"2023-09-08"},{"lineNumber":44,"author":{"gitId":"Kokseng1"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-08"},{"lineNumber":45,"author":{"gitId":"Kokseng1"},"content":" @FXML","lastModifiedDate":"2023-09-08"},{"lineNumber":46,"author":{"gitId":"Kokseng1"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-08"},{"lineNumber":47,"author":{"gitId":"Kokseng1"},"content":" @FXML","lastModifiedDate":"2023-09-08"},{"lineNumber":48,"author":{"gitId":"Kokseng1"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-08"},{"lineNumber":49,"author":{"gitId":"Kokseng1"},"content":" private Scene scene;","lastModifiedDate":"2023-09-08"},{"lineNumber":50,"author":{"gitId":"Kokseng1"},"content":" private final Image user \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaUser.png\"));","lastModifiedDate":"2023-09-08"},{"lineNumber":51,"author":{"gitId":"Kokseng1"},"content":" private final Image duke \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaDuke.png\"));","lastModifiedDate":"2023-09-08"},{"lineNumber":52,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":53,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":54,"author":{"gitId":"Kokseng1"},"content":" @Override","lastModifiedDate":"2023-09-08"},{"lineNumber":55,"author":{"gitId":"Kokseng1"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-08"},{"lineNumber":56,"author":{"gitId":"Kokseng1"},"content":" primaryStage \u003d stage;","lastModifiedDate":"2023-09-08"},{"lineNumber":57,"author":{"gitId":"Kokseng1"},"content":" //The container for the content of the chat to scroll.","lastModifiedDate":"2023-09-08"},{"lineNumber":58,"author":{"gitId":"Kokseng1"},"content":" scrollPane \u003d new ScrollPane();","lastModifiedDate":"2023-09-08"},{"lineNumber":59,"author":{"gitId":"Kokseng1"},"content":" dialogContainer \u003d new VBox();","lastModifiedDate":"2023-09-08"},{"lineNumber":60,"author":{"gitId":"Kokseng1"},"content":" scrollPane.setContent(dialogContainer);","lastModifiedDate":"2023-09-08"},{"lineNumber":61,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":62,"author":{"gitId":"Kokseng1"},"content":" userInput \u003d new TextField();","lastModifiedDate":"2023-09-08"},{"lineNumber":63,"author":{"gitId":"Kokseng1"},"content":" sendButton \u003d new Button(\"Send\");","lastModifiedDate":"2023-09-08"},{"lineNumber":64,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":65,"author":{"gitId":"Kokseng1"},"content":" AnchorPane mainLayout \u003d new AnchorPane();","lastModifiedDate":"2023-09-08"},{"lineNumber":66,"author":{"gitId":"Kokseng1"},"content":" mainLayout.getChildren().addAll(scrollPane, userInput, sendButton);","lastModifiedDate":"2023-09-08"},{"lineNumber":67,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":68,"author":{"gitId":"Kokseng1"},"content":" scene \u003d new Scene(mainLayout);","lastModifiedDate":"2023-09-08"},{"lineNumber":69,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":70,"author":{"gitId":"Kokseng1"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-08"},{"lineNumber":71,"author":{"gitId":"Kokseng1"},"content":" stage.show();","lastModifiedDate":"2023-09-08"},{"lineNumber":72,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":73,"author":{"gitId":"Kokseng1"},"content":" stage.setTitle(\"Duke\");","lastModifiedDate":"2023-09-08"},{"lineNumber":74,"author":{"gitId":"Kokseng1"},"content":" stage.setResizable(false);","lastModifiedDate":"2023-09-08"},{"lineNumber":75,"author":{"gitId":"Kokseng1"},"content":" stage.setMinHeight(600.0);","lastModifiedDate":"2023-09-08"},{"lineNumber":76,"author":{"gitId":"Kokseng1"},"content":" stage.setMinWidth(400.0);","lastModifiedDate":"2023-09-08"},{"lineNumber":77,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":78,"author":{"gitId":"Kokseng1"},"content":" mainLayout.setPrefSize(400.0, 600.0);","lastModifiedDate":"2023-09-08"},{"lineNumber":79,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":80,"author":{"gitId":"Kokseng1"},"content":" scrollPane.setPrefSize(385, 535);","lastModifiedDate":"2023-09-08"},{"lineNumber":81,"author":{"gitId":"Kokseng1"},"content":" scrollPane.setHbarPolicy(ScrollPane.ScrollBarPolicy.NEVER);","lastModifiedDate":"2023-09-08"},{"lineNumber":82,"author":{"gitId":"Kokseng1"},"content":" scrollPane.setVbarPolicy(ScrollPane.ScrollBarPolicy.ALWAYS);","lastModifiedDate":"2023-09-08"},{"lineNumber":83,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":84,"author":{"gitId":"Kokseng1"},"content":" scrollPane.setVvalue(1.0);","lastModifiedDate":"2023-09-08"},{"lineNumber":85,"author":{"gitId":"Kokseng1"},"content":" scrollPane.setFitToWidth(true);","lastModifiedDate":"2023-09-08"},{"lineNumber":86,"author":{"gitId":"Kokseng1"},"content":" dialogContainer.setPrefHeight(Region.USE_COMPUTED_SIZE);","lastModifiedDate":"2023-09-08"},{"lineNumber":87,"author":{"gitId":"Kokseng1"},"content":" userInput.setPrefWidth(325.0);","lastModifiedDate":"2023-09-08"},{"lineNumber":88,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":89,"author":{"gitId":"Kokseng1"},"content":" sendButton.setPrefWidth(55.0);","lastModifiedDate":"2023-09-08"},{"lineNumber":90,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":91,"author":{"gitId":"Kokseng1"},"content":" AnchorPane.setTopAnchor(scrollPane, 1.0);","lastModifiedDate":"2023-09-08"},{"lineNumber":92,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":93,"author":{"gitId":"Kokseng1"},"content":" AnchorPane.setBottomAnchor(sendButton, 1.0);","lastModifiedDate":"2023-09-08"},{"lineNumber":94,"author":{"gitId":"Kokseng1"},"content":" AnchorPane.setRightAnchor(sendButton, 1.0);","lastModifiedDate":"2023-09-08"},{"lineNumber":95,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":96,"author":{"gitId":"Kokseng1"},"content":" AnchorPane.setLeftAnchor(userInput , 1.0);","lastModifiedDate":"2023-09-08"},{"lineNumber":97,"author":{"gitId":"Kokseng1"},"content":" AnchorPane.setBottomAnchor(userInput, 1.0);","lastModifiedDate":"2023-09-08"},{"lineNumber":98,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":99,"author":{"gitId":"Kokseng1"},"content":" sendButton.setOnMouseClicked((event) -\u003e {","lastModifiedDate":"2023-09-08"},{"lineNumber":100,"author":{"gitId":"Kokseng1"},"content":" dialogContainer.getChildren().add(getDialogLabel(userInput.getText()));","lastModifiedDate":"2023-09-08"},{"lineNumber":101,"author":{"gitId":"Kokseng1"},"content":" userInput.clear();","lastModifiedDate":"2023-09-08"},{"lineNumber":102,"author":{"gitId":"Kokseng1"},"content":" });","lastModifiedDate":"2023-09-08"},{"lineNumber":103,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":104,"author":{"gitId":"Kokseng1"},"content":" userInput.setOnAction((event) -\u003e {","lastModifiedDate":"2023-09-08"},{"lineNumber":105,"author":{"gitId":"Kokseng1"},"content":" dialogContainer.getChildren().add(getDialogLabel(userInput.getText()));","lastModifiedDate":"2023-09-08"},{"lineNumber":106,"author":{"gitId":"Kokseng1"},"content":" userInput.clear();","lastModifiedDate":"2023-09-08"},{"lineNumber":107,"author":{"gitId":"Kokseng1"},"content":" });","lastModifiedDate":"2023-09-08"},{"lineNumber":108,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":109,"author":{"gitId":"Kokseng1"},"content":" dialogContainer.heightProperty().addListener((observable) -\u003e scrollPane.setVvalue(1.0));","lastModifiedDate":"2023-09-08"},{"lineNumber":110,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":111,"author":{"gitId":"Kokseng1"},"content":" sendButton.setOnMouseClicked((event) -\u003e {","lastModifiedDate":"2023-09-08"},{"lineNumber":112,"author":{"gitId":"Kokseng1"},"content":" handleUserInput();","lastModifiedDate":"2023-09-08"},{"lineNumber":113,"author":{"gitId":"Kokseng1"},"content":" });","lastModifiedDate":"2023-09-08"},{"lineNumber":114,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":115,"author":{"gitId":"Kokseng1"},"content":" userInput.setOnAction((event) -\u003e {","lastModifiedDate":"2023-09-08"},{"lineNumber":116,"author":{"gitId":"Kokseng1"},"content":" handleUserInput();","lastModifiedDate":"2023-09-08"},{"lineNumber":117,"author":{"gitId":"Kokseng1"},"content":" });","lastModifiedDate":"2023-09-08"},{"lineNumber":118,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":119,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":120,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":121,"author":{"gitId":"Kokseng1"},"content":" * Creates a label with the specified text and adds it to the dialog container.","lastModifiedDate":"2023-09-08"},{"lineNumber":122,"author":{"gitId":"Kokseng1"},"content":" * @param text String containing text to add","lastModifiedDate":"2023-09-08"},{"lineNumber":123,"author":{"gitId":"Kokseng1"},"content":" * @return a label with the specified text that has word wrap enabled.","lastModifiedDate":"2023-09-08"},{"lineNumber":124,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":125,"author":{"gitId":"Kokseng1"},"content":" private Label getDialogLabel(String text) {","lastModifiedDate":"2023-09-08"},{"lineNumber":126,"author":{"gitId":"Kokseng1"},"content":" Label textToAdd \u003d new Label(text);","lastModifiedDate":"2023-09-08"},{"lineNumber":127,"author":{"gitId":"Kokseng1"},"content":" textToAdd.setWrapText(true);","lastModifiedDate":"2023-09-08"},{"lineNumber":128,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":129,"author":{"gitId":"Kokseng1"},"content":" return textToAdd;","lastModifiedDate":"2023-09-08"},{"lineNumber":130,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":131,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":132,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":133,"author":{"gitId":"Kokseng1"},"content":" * Creates two dialog boxes, one echoing user input and the other containing Duke\u0027s reply and then appends them to","lastModifiedDate":"2023-09-08"},{"lineNumber":134,"author":{"gitId":"Kokseng1"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-08"},{"lineNumber":135,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":136,"author":{"gitId":"Kokseng1"},"content":" @FXML","lastModifiedDate":"2023-09-08"},{"lineNumber":137,"author":{"gitId":"Kokseng1"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-08"},{"lineNumber":138,"author":{"gitId":"Kokseng1"},"content":" String userText \u003d userInput.getText();","lastModifiedDate":"2023-09-08"},{"lineNumber":139,"author":{"gitId":"Kokseng1"},"content":" String dukeText \u003d getResponse(userInput.getText());","lastModifiedDate":"2023-09-08"},{"lineNumber":140,"author":{"gitId":"Kokseng1"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-08"},{"lineNumber":141,"author":{"gitId":"Kokseng1"},"content":" DialogBox.getUserDialog(userText, user),","lastModifiedDate":"2023-09-08"},{"lineNumber":142,"author":{"gitId":"Kokseng1"},"content":" DialogBox.getDukeDialog(dukeText, duke)","lastModifiedDate":"2023-09-08"},{"lineNumber":143,"author":{"gitId":"Kokseng1"},"content":" );","lastModifiedDate":"2023-09-08"},{"lineNumber":144,"author":{"gitId":"Kokseng1"},"content":" userInput.clear();","lastModifiedDate":"2023-09-08"},{"lineNumber":145,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":146,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":147,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":148,"author":{"gitId":"Kokseng1"},"content":" String getResponse(String input) {","lastModifiedDate":"2023-09-08"},{"lineNumber":149,"author":{"gitId":"Kokseng1"},"content":" try {","lastModifiedDate":"2023-08-23"},{"lineNumber":150,"author":{"gitId":"Kokseng1"},"content":" TaskType taskType \u003d Parser.parseType(input);","lastModifiedDate":"2023-09-08"},{"lineNumber":151,"author":{"gitId":"Kokseng1"},"content":" switch (taskType) {","lastModifiedDate":"2023-09-03"},{"lineNumber":152,"author":{"gitId":"Kokseng1"},"content":" case LIST: {","lastModifiedDate":"2023-09-03"},{"lineNumber":153,"author":{"gitId":"Kokseng1"},"content":" return TaskList.getListAsString();","lastModifiedDate":"2023-09-08"},{"lineNumber":154,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":155,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":156,"author":{"gitId":"Kokseng1"},"content":" case MARK: {","lastModifiedDate":"2023-09-03"},{"lineNumber":157,"author":{"gitId":"Kokseng1"},"content":" int tasknum \u003d Parser.getMarkIndex(input);","lastModifiedDate":"2023-09-08"},{"lineNumber":158,"author":{"gitId":"Kokseng1"},"content":" return TaskList.markTask(tasknum);","lastModifiedDate":"2023-09-08"},{"lineNumber":159,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":160,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":161,"author":{"gitId":"Kokseng1"},"content":" case UNMARK: {","lastModifiedDate":"2023-09-03"},{"lineNumber":162,"author":{"gitId":"Kokseng1"},"content":" int tasknum \u003d Parser.getUnmarkIndex(input);","lastModifiedDate":"2023-09-08"},{"lineNumber":163,"author":{"gitId":"Kokseng1"},"content":" return TaskList.unmarkTask(tasknum);","lastModifiedDate":"2023-09-08"},{"lineNumber":164,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":165,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":166,"author":{"gitId":"Kokseng1"},"content":" case DEADLINE:","lastModifiedDate":"2023-09-03"},{"lineNumber":167,"author":{"gitId":"Kokseng1"},"content":" case TODO:","lastModifiedDate":"2023-09-03"},{"lineNumber":168,"author":{"gitId":"Kokseng1"},"content":" case EVENT:","lastModifiedDate":"2023-09-03"},{"lineNumber":169,"author":{"gitId":"Kokseng1"},"content":" Task nextTask \u003d Parser.parseTask(input, taskType);","lastModifiedDate":"2023-09-08"},{"lineNumber":170,"author":{"gitId":"Kokseng1"},"content":" return TaskList.addTask(nextTask);","lastModifiedDate":"2023-09-08"},{"lineNumber":171,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":172,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":173,"author":{"gitId":"Kokseng1"},"content":" case DELETE: {","lastModifiedDate":"2023-09-03"},{"lineNumber":174,"author":{"gitId":"Kokseng1"},"content":" return TaskList.deleteTask(Parser.getDeleteIndex(input));","lastModifiedDate":"2023-09-08"},{"lineNumber":175,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":176,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":177,"author":{"gitId":"Kokseng1"},"content":" case FIND: {","lastModifiedDate":"2023-09-06"},{"lineNumber":178,"author":{"gitId":"Kokseng1"},"content":" ArrayList\u003cTask\u003e list \u003d TaskList.find(input);","lastModifiedDate":"2023-09-08"},{"lineNumber":179,"author":{"gitId":"Kokseng1"},"content":" if (list.size() \u003d\u003d 0) {","lastModifiedDate":"2023-09-06"},{"lineNumber":180,"author":{"gitId":"Kokseng1"},"content":" return (\"there are no matching tasks!\");","lastModifiedDate":"2023-09-08"},{"lineNumber":181,"author":{"gitId":"Kokseng1"},"content":" } else {","lastModifiedDate":"2023-09-06"},{"lineNumber":182,"author":{"gitId":"Kokseng1"},"content":" String header \u003d \"Here are the matching tasks in your list:\\n\";","lastModifiedDate":"2023-09-08"},{"lineNumber":183,"author":{"gitId":"Kokseng1"},"content":" String listInString \u003d Ui.getListAsString(list);","lastModifiedDate":"2023-09-08"},{"lineNumber":184,"author":{"gitId":"Kokseng1"},"content":" return header + listInString;","lastModifiedDate":"2023-09-08"},{"lineNumber":185,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":186,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":187,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":188,"author":{"gitId":"Kokseng1"},"content":" case BYE: {","lastModifiedDate":"2023-09-08"},{"lineNumber":189,"author":{"gitId":"Kokseng1"},"content":" return (\"Bye. Hope to see you again soon!\");","lastModifiedDate":"2023-09-08"},{"lineNumber":190,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":191,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":192,"author":{"gitId":"Kokseng1"},"content":" default: {","lastModifiedDate":"2023-08-29"},{"lineNumber":193,"author":{"gitId":"Kokseng1"},"content":" throw new DukeException(\"I can\u0027t identify your command!\");","lastModifiedDate":"2023-08-29"},{"lineNumber":194,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":195,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":196,"author":{"gitId":"Kokseng1"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":197,"author":{"gitId":"Kokseng1"},"content":" return e.getMessage();","lastModifiedDate":"2023-09-08"},{"lineNumber":198,"author":{"gitId":"Kokseng1"},"content":" } catch (TaskParseException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":199,"author":{"gitId":"Kokseng1"},"content":" return e.getMessage();","lastModifiedDate":"2023-09-08"},{"lineNumber":200,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":201,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":202,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":203,"author":{"gitId":"Kokseng1"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-03"},{"lineNumber":204,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":205,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"Kokseng1":203,"-":2}},{"path":"src/main/java/duke/DukeTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kokseng1"},"content":"package duke;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"Kokseng1"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"Kokseng1"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"Kokseng1"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"Kokseng1"},"content":"import duke.exceptions.DukeException;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"Kokseng1"},"content":"import duke.exceptions.TaskParseException;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"Kokseng1"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"Kokseng1"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"Kokseng1"},"content":"import duke.task.Todo;","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"Kokseng1"},"content":"public class DukeTest {","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"Kokseng1"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"Kokseng1"},"content":" public void parseTypeTest() {","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"Kokseng1"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"Kokseng1"},"content":" Duke.TaskType result \u003d Parser.parseType(\"Todo make\");","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"Kokseng1"},"content":" assertEquals(Duke.TaskType.TODO, result);","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"Kokseng1"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"Kokseng1"},"content":" fail(e.getMessage());","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"Kokseng1"},"content":" } catch (TaskParseException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"Kokseng1"},"content":" fail(e.getMessage());","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"Kokseng1"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"Kokseng1"},"content":" public void parseTaskTest() {","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"Kokseng1"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"Kokseng1"},"content":" Task expected \u003d new Deadline(false, \"deadline return book /by 2019-12-02\");","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"Kokseng1"},"content":" Task result \u003d Parser.parseTask(\"deadline return book /by 2019-12-02\", Duke.TaskType.DEADLINE);","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"Kokseng1"},"content":" assertEquals(expected.toString(), result.toString());","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"Kokseng1"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"Kokseng1"},"content":" fail(e.getMessage());","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"Kokseng1"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"Kokseng1"},"content":" public void markTasFromTaskListTest() {","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"Kokseng1"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"Kokseng1"},"content":" Task expected \u003d new Todo(true, \"todo mark\");","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"Kokseng1"},"content":" TaskList list \u003d new TaskList();","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"Kokseng1"},"content":" list.addTask(new Todo(false, \"todo mark\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"Kokseng1"},"content":" list.markTask(0);","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"Kokseng1"},"content":" Task result \u003d list.getTask(0);","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"Kokseng1"},"content":" assertEquals(result.toString(), expected.toString());","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"Kokseng1"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"Kokseng1"},"content":" fail(e.getMessage());","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"Kokseng1"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"Kokseng1":52}},{"path":"src/main/java/duke/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kokseng1"},"content":"package duke;","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":3,"author":{"gitId":"Kokseng1"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"Kokseng1"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"Kokseng1"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"Kokseng1"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"Kokseng1"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"Kokseng1"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"Kokseng1"},"content":"/**","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"Kokseng1"},"content":" * A GUI for Duke using FXML.","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"Kokseng1"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"Kokseng1"},"content":" private Duke duke \u003d new Duke();","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"Kokseng1"},"content":" @Override","lastModifiedDate":"2023-09-08"},{"lineNumber":19,"author":{"gitId":"Kokseng1"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-08"},{"lineNumber":20,"author":{"gitId":"Kokseng1"},"content":" try {","lastModifiedDate":"2023-09-08"},{"lineNumber":21,"author":{"gitId":"Kokseng1"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-08"},{"lineNumber":22,"author":{"gitId":"Kokseng1"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-08"},{"lineNumber":23,"author":{"gitId":"Kokseng1"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-08"},{"lineNumber":24,"author":{"gitId":"Kokseng1"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-08"},{"lineNumber":25,"author":{"gitId":"Kokseng1"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setDuke(duke);","lastModifiedDate":"2023-09-08"},{"lineNumber":26,"author":{"gitId":"Kokseng1"},"content":" stage.show();","lastModifiedDate":"2023-09-08"},{"lineNumber":27,"author":{"gitId":"Kokseng1"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-08"},{"lineNumber":28,"author":{"gitId":"Kokseng1"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-08"},{"lineNumber":29,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":30,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":31,"author":{"gitId":"Kokseng1"},"content":"}","lastModifiedDate":"2023-09-08"},{"lineNumber":32,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-08"}],"authorContributionMap":{"Kokseng1":32}},{"path":"src/main/java/duke/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kokseng1"},"content":"package duke;","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":3,"author":{"gitId":"Kokseng1"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"Kokseng1"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"Kokseng1"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"Kokseng1"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"Kokseng1"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"Kokseng1"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"Kokseng1"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"Kokseng1"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"Kokseng1"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"Kokseng1"},"content":"/**","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"Kokseng1"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"Kokseng1"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"Kokseng1"},"content":" @FXML","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"Kokseng1"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"Kokseng1"},"content":" @FXML","lastModifiedDate":"2023-09-08"},{"lineNumber":19,"author":{"gitId":"Kokseng1"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-08"},{"lineNumber":20,"author":{"gitId":"Kokseng1"},"content":" @FXML","lastModifiedDate":"2023-09-08"},{"lineNumber":21,"author":{"gitId":"Kokseng1"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-08"},{"lineNumber":22,"author":{"gitId":"Kokseng1"},"content":" @FXML","lastModifiedDate":"2023-09-08"},{"lineNumber":23,"author":{"gitId":"Kokseng1"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-08"},{"lineNumber":24,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":25,"author":{"gitId":"Kokseng1"},"content":" private Duke duke;","lastModifiedDate":"2023-09-08"},{"lineNumber":26,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":27,"author":{"gitId":"Kokseng1"},"content":" private Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaUser.png\"));","lastModifiedDate":"2023-09-08"},{"lineNumber":28,"author":{"gitId":"Kokseng1"},"content":" private Image dukeImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaDuke.png\"));","lastModifiedDate":"2023-09-08"},{"lineNumber":29,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":30,"author":{"gitId":"Kokseng1"},"content":" @FXML","lastModifiedDate":"2023-09-08"},{"lineNumber":31,"author":{"gitId":"Kokseng1"},"content":" public void initialize() {","lastModifiedDate":"2023-09-08"},{"lineNumber":32,"author":{"gitId":"Kokseng1"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-08"},{"lineNumber":33,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":34,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":35,"author":{"gitId":"Kokseng1"},"content":" public void setDuke(Duke d) {","lastModifiedDate":"2023-09-08"},{"lineNumber":36,"author":{"gitId":"Kokseng1"},"content":" duke \u003d d;","lastModifiedDate":"2023-09-08"},{"lineNumber":37,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":38,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":39,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":40,"author":{"gitId":"Kokseng1"},"content":" * Creates two dialog boxes, one echoing user input and the other containing Duke\u0027s reply and then appends them to","lastModifiedDate":"2023-09-08"},{"lineNumber":41,"author":{"gitId":"Kokseng1"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-08"},{"lineNumber":42,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":43,"author":{"gitId":"Kokseng1"},"content":" @FXML","lastModifiedDate":"2023-09-08"},{"lineNumber":44,"author":{"gitId":"Kokseng1"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-08"},{"lineNumber":45,"author":{"gitId":"Kokseng1"},"content":" String userInputText \u003d userInput.getText();","lastModifiedDate":"2023-09-08"},{"lineNumber":46,"author":{"gitId":"Kokseng1"},"content":" Label input \u003d new Label(userInputText);","lastModifiedDate":"2023-09-08"},{"lineNumber":47,"author":{"gitId":"Kokseng1"},"content":" Label response \u003d new Label(duke.getResponse(userInputText));","lastModifiedDate":"2023-09-08"},{"lineNumber":48,"author":{"gitId":"Kokseng1"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-08"},{"lineNumber":49,"author":{"gitId":"Kokseng1"},"content":" DialogBoxOld.getUserDialog(input, new ImageView(userImage)),","lastModifiedDate":"2023-09-08"},{"lineNumber":50,"author":{"gitId":"Kokseng1"},"content":" DialogBoxOld.getDukeDialog(response, new ImageView(dukeImage))","lastModifiedDate":"2023-09-08"},{"lineNumber":51,"author":{"gitId":"Kokseng1"},"content":" );","lastModifiedDate":"2023-09-08"},{"lineNumber":52,"author":{"gitId":"Kokseng1"},"content":" userInput.clear();","lastModifiedDate":"2023-09-08"},{"lineNumber":53,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":54,"author":{"gitId":"Kokseng1"},"content":"}","lastModifiedDate":"2023-09-08"}],"authorContributionMap":{"Kokseng1":54}},{"path":"src/main/java/duke/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kokseng1"},"content":"package duke;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"Kokseng1"},"content":"import duke.exceptions.DukeException;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"Kokseng1"},"content":"import duke.exceptions.TaskParseException;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"Kokseng1"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"Kokseng1"},"content":"import duke.task.Event;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"Kokseng1"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Kokseng1"},"content":"import duke.task.Todo;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"Kokseng1"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"Kokseng1"},"content":" * parser to make sense of user commands, parsing from command to action","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"Kokseng1"},"content":"public class Parser {","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"Kokseng1"},"content":" * if command is delete, use this method to get the index of task user wants to delete","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"Kokseng1"},"content":" * @param text original command","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"Kokseng1"},"content":" * @return Integer representing the index of task to be deleted","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"Kokseng1"},"content":" public static Integer getDeleteIndex(String text) {","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"Kokseng1"},"content":" return Integer.parseInt(text.split(\" \")[1]) - 1;","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"Kokseng1"},"content":" * if command is mark, use this method to get the index of task user wants to mark","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"Kokseng1"},"content":" * @param text original command","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"Kokseng1"},"content":" * @return Integer representing the index of task to be marked","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"Kokseng1"},"content":" public static Integer getMarkIndex(String text) {","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"Kokseng1"},"content":" return Integer.parseInt(text.split(\" \")[1]) - 1;","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"Kokseng1"},"content":" * if command is unmark, use this method to get the index of task user wants to unmark","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"Kokseng1"},"content":" * @param text original command","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"Kokseng1"},"content":" * @return Integer representing the index of task to be unmarked","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"Kokseng1"},"content":" public static Integer getUnmarkIndex(String text) {","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"Kokseng1"},"content":" return Integer.parseInt(text.split(\" \")[1]) - 1;","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"Kokseng1"},"content":" * given a TaskType, parses a text into a task of that type","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"Kokseng1"},"content":" * @param text original user input","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"Kokseng1"},"content":" * @param type type of task that user specified","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"Kokseng1"},"content":" * @return task constructed according to user input","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"Kokseng1"},"content":" public static Task parseTask(String text, Duke.TaskType type) throws DukeException {","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"Kokseng1"},"content":" switch (type) {","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"Kokseng1"},"content":" case TODO: {","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"Kokseng1"},"content":" return new Todo(false, text);","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"Kokseng1"},"content":" case DEADLINE: {","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"Kokseng1"},"content":" if (!text.contains(\"/by\") || text.length() \u003c\u003d text.indexOf(\"/by\") + 4) {","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"Kokseng1"},"content":" throw new DukeException(\"You forgot to specify when the deadline ends!\");","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"Kokseng1"},"content":" return new Deadline(false, text);","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"Kokseng1"},"content":" case EVENT: {","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"Kokseng1"},"content":" if (!text.contains(\"/from\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"Kokseng1"},"content":" throw new DukeException(\"You forgot to specify when the event starts!\");","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"Kokseng1"},"content":" if (!text.contains(\"/to\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"Kokseng1"},"content":" throw new DukeException(\"You forgot to specify when the event ends!\");","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"Kokseng1"},"content":" return new Event(false, text);","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"Kokseng1"},"content":" default: {","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"Kokseng1"},"content":" throw new DukeException(\"Not a task!\");","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":75,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":76,"author":{"gitId":"Kokseng1"},"content":" * make sense of what TaskType the user is trying to create from the first word of their input","lastModifiedDate":"2023-09-04"},{"lineNumber":77,"author":{"gitId":"Kokseng1"},"content":" * @param text user input","lastModifiedDate":"2023-09-04"},{"lineNumber":78,"author":{"gitId":"Kokseng1"},"content":" * @return TaskType according to user input","lastModifiedDate":"2023-09-04"},{"lineNumber":79,"author":{"gitId":"Kokseng1"},"content":" * @throws DukeException Some components of the command may be missing for certain tasks","lastModifiedDate":"2023-09-04"},{"lineNumber":80,"author":{"gitId":"Kokseng1"},"content":" * @throws TaskParseException unable to understand what TaskType the user is trying to create","lastModifiedDate":"2023-09-04"},{"lineNumber":81,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":82,"author":{"gitId":"Kokseng1"},"content":" public static Duke.TaskType parseType(String text) throws DukeException, TaskParseException {","lastModifiedDate":"2023-09-03"},{"lineNumber":83,"author":{"gitId":"Kokseng1"},"content":" String[] textParts \u003d text.split(\" \");","lastModifiedDate":"2023-09-03"},{"lineNumber":84,"author":{"gitId":"Kokseng1"},"content":" String firstWord \u003d textParts[0].toLowerCase();","lastModifiedDate":"2023-09-03"},{"lineNumber":85,"author":{"gitId":"Kokseng1"},"content":" if (textParts.length \u003c\u003d 1 \u0026\u0026 !firstWord.equals(\"list\") \u0026\u0026 !firstWord.equals(\"bye\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":86,"author":{"gitId":"Kokseng1"},"content":" throw new DukeException(\"You forgot to write the task\");","lastModifiedDate":"2023-09-03"},{"lineNumber":87,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":88,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":89,"author":{"gitId":"Kokseng1"},"content":" switch (textParts[0].toLowerCase()) {","lastModifiedDate":"2023-09-03"},{"lineNumber":90,"author":{"gitId":"Kokseng1"},"content":" case \"list\": {","lastModifiedDate":"2023-09-03"},{"lineNumber":91,"author":{"gitId":"Kokseng1"},"content":" return Duke.TaskType.LIST;","lastModifiedDate":"2023-09-03"},{"lineNumber":92,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":93,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":94,"author":{"gitId":"Kokseng1"},"content":" case \"mark\": {","lastModifiedDate":"2023-09-03"},{"lineNumber":95,"author":{"gitId":"Kokseng1"},"content":" return Duke.TaskType.MARK;","lastModifiedDate":"2023-09-03"},{"lineNumber":96,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":97,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":98,"author":{"gitId":"Kokseng1"},"content":" case \"unmark\": {","lastModifiedDate":"2023-09-03"},{"lineNumber":99,"author":{"gitId":"Kokseng1"},"content":" return Duke.TaskType.UNMARK;","lastModifiedDate":"2023-09-03"},{"lineNumber":100,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":101,"author":{"gitId":"Kokseng1"},"content":" case \"deadline\": {","lastModifiedDate":"2023-09-03"},{"lineNumber":102,"author":{"gitId":"Kokseng1"},"content":" return Duke.TaskType.DEADLINE;","lastModifiedDate":"2023-09-03"},{"lineNumber":103,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":104,"author":{"gitId":"Kokseng1"},"content":" case \"event\": {","lastModifiedDate":"2023-09-03"},{"lineNumber":105,"author":{"gitId":"Kokseng1"},"content":" return Duke.TaskType.EVENT;","lastModifiedDate":"2023-09-03"},{"lineNumber":106,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":107,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":108,"author":{"gitId":"Kokseng1"},"content":" case \"todo\": {","lastModifiedDate":"2023-09-03"},{"lineNumber":109,"author":{"gitId":"Kokseng1"},"content":" return Duke.TaskType.TODO;","lastModifiedDate":"2023-09-03"},{"lineNumber":110,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":111,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":112,"author":{"gitId":"Kokseng1"},"content":" case \"delete\": {","lastModifiedDate":"2023-09-03"},{"lineNumber":113,"author":{"gitId":"Kokseng1"},"content":" return Duke.TaskType.DELETE;","lastModifiedDate":"2023-09-03"},{"lineNumber":114,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":115,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":116,"author":{"gitId":"Kokseng1"},"content":" case \"bye\": {","lastModifiedDate":"2023-09-03"},{"lineNumber":117,"author":{"gitId":"Kokseng1"},"content":" return Duke.TaskType.BYE;","lastModifiedDate":"2023-09-03"},{"lineNumber":118,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":119,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":120,"author":{"gitId":"Kokseng1"},"content":" case \"find\": {","lastModifiedDate":"2023-09-06"},{"lineNumber":121,"author":{"gitId":"Kokseng1"},"content":" return Duke.TaskType.FIND;","lastModifiedDate":"2023-09-06"},{"lineNumber":122,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":123,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":124,"author":{"gitId":"Kokseng1"},"content":" default: {","lastModifiedDate":"2023-09-03"},{"lineNumber":125,"author":{"gitId":"Kokseng1"},"content":" throw new TaskParseException(\"Not a TaskType\");","lastModifiedDate":"2023-09-03"},{"lineNumber":126,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":127,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":128,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":129,"author":{"gitId":"Kokseng1"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"Kokseng1":129}},{"path":"src/main/java/duke/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kokseng1"},"content":"package duke;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"Kokseng1"},"content":"import java.io.File;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"Kokseng1"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"Kokseng1"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"Kokseng1"},"content":"import java.nio.file.Files;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"Kokseng1"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"Kokseng1"},"content":"import java.nio.file.Paths;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"Kokseng1"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Kokseng1"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Kokseng1"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"Kokseng1"},"content":"import duke.exceptions.DukeException;","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"Kokseng1"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"Kokseng1"},"content":"import duke.task.Event;","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"Kokseng1"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"Kokseng1"},"content":"import duke.task.Todo;","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"Kokseng1"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"Kokseng1"},"content":" * Saves and loads tasks to hard drive in String form","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"Kokseng1"},"content":"class Storage {","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"Kokseng1"},"content":" * name of file and path which the data is to be stored","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"Kokseng1"},"content":" static final String FILE_NAME \u003d \"./data/duke.txt\";","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"Kokseng1"},"content":" * check if file that is to be written to and loaded from exists, if","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"Kokseng1"},"content":" * it does not, create one","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"Kokseng1"},"content":" static void checkFileExists() {","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"Kokseng1"},"content":" Path path \u003d Paths.get(FILE_NAME);","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"Kokseng1"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"Kokseng1"},"content":" if (!Files.exists(path)) {","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"Kokseng1"},"content":" Ui.print(\"data file not found, creating a new one\");","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"Kokseng1"},"content":" Path dirPath \u003d Paths.get(\"./data\");","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"Kokseng1"},"content":" Files.createDirectories(dirPath);","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"Kokseng1"},"content":" File file \u003d new File(FILE_NAME);","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"Kokseng1"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"Kokseng1"},"content":" e.printStackTrace();","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"Kokseng1"},"content":" * wipes file and save tasks given in param to hard drive","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"Kokseng1"},"content":" * @param tasks ArrayList of tasks to be saved","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"Kokseng1"},"content":" public static void saveTask(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"Kokseng1"},"content":" checkFileExists();","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"Kokseng1"},"content":" try (FileWriter fileWriter \u003d new FileWriter(FILE_NAME)) {","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"Kokseng1"},"content":" for (Task task : tasks) {","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"Kokseng1"},"content":" String text \u003d \"\";","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"Kokseng1"},"content":" if (task instanceof Todo) {","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"Kokseng1"},"content":" String done \u003d task.getisDone()","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"Kokseng1"},"content":" ? \"1\"","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"Kokseng1"},"content":" : \"0\";","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"Kokseng1"},"content":" String desc \u003d task.getDescription();","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"Kokseng1"},"content":" text \u003d \"T|\" + done + \"|\" + desc;","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"Kokseng1"},"content":" } else if (task instanceof Event) {","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"Kokseng1"},"content":" String done \u003d task.getisDone()","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"Kokseng1"},"content":" ? \"1\"","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"Kokseng1"},"content":" : \"0\";","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"Kokseng1"},"content":" String desc \u003d task.getDescription();","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"Kokseng1"},"content":" LocalDate from \u003d ((Event) task).getFrom();","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"Kokseng1"},"content":" LocalDate to \u003d ((Event) task).getTo();","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"Kokseng1"},"content":" text \u003d \"E|\" + done + \"|\" + desc + \"|\" + from + \"|\" + to;","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"Kokseng1"},"content":" } else if (task instanceof Deadline) {","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"Kokseng1"},"content":" String done \u003d task.getisDone()","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"Kokseng1"},"content":" ? \"1\"","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"Kokseng1"},"content":" : \"0\";","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"Kokseng1"},"content":" String desc \u003d task.getDescription();","lastModifiedDate":"2023-09-04"},{"lineNumber":74,"author":{"gitId":"Kokseng1"},"content":" LocalDate by \u003d ((Deadline) task).getBy();","lastModifiedDate":"2023-09-04"},{"lineNumber":75,"author":{"gitId":"Kokseng1"},"content":" text \u003d \"D|\" + done + \"|\" + desc + \"|\" + by;","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"Kokseng1"},"content":" fileWriter.write(text + \"\\n\");","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":79,"author":{"gitId":"Kokseng1"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":80,"author":{"gitId":"Kokseng1"},"content":" e.printStackTrace();","lastModifiedDate":"2023-08-28"},{"lineNumber":81,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":82,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":83,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":84,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":85,"author":{"gitId":"Kokseng1"},"content":" * loads task from hard drive and returns it","lastModifiedDate":"2023-09-04"},{"lineNumber":86,"author":{"gitId":"Kokseng1"},"content":" * @return ArrayList of tasks","lastModifiedDate":"2023-09-04"},{"lineNumber":87,"author":{"gitId":"Kokseng1"},"content":" * @throws DukeException if there are no tasks in the hard drive","lastModifiedDate":"2023-09-04"},{"lineNumber":88,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":89,"author":{"gitId":"Kokseng1"},"content":" public static ArrayList\u003cTask\u003e loadTasks() throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":90,"author":{"gitId":"Kokseng1"},"content":" checkFileExists();","lastModifiedDate":"2023-08-29"},{"lineNumber":91,"author":{"gitId":"Kokseng1"},"content":" ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-29"},{"lineNumber":92,"author":{"gitId":"Kokseng1"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":93,"author":{"gitId":"Kokseng1"},"content":" Scanner sc \u003d new Scanner(new File(FILE_NAME));","lastModifiedDate":"2023-09-03"},{"lineNumber":94,"author":{"gitId":"Kokseng1"},"content":" while (sc.hasNextLine()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":95,"author":{"gitId":"Kokseng1"},"content":" String next \u003d sc.nextLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":96,"author":{"gitId":"Kokseng1"},"content":" Task nextTask \u003d Task.parse(next);","lastModifiedDate":"2023-09-03"},{"lineNumber":97,"author":{"gitId":"Kokseng1"},"content":" tasks.add(nextTask);","lastModifiedDate":"2023-09-03"},{"lineNumber":98,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":99,"author":{"gitId":"Kokseng1"},"content":" return tasks;","lastModifiedDate":"2023-08-28"},{"lineNumber":100,"author":{"gitId":"Kokseng1"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":101,"author":{"gitId":"Kokseng1"},"content":" throw new DukeException(\"There are no tasks\");","lastModifiedDate":"2023-08-29"},{"lineNumber":102,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":103,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":104,"author":{"gitId":"Kokseng1"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"Kokseng1":104}},{"path":"src/main/java/duke/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kokseng1"},"content":"package duke;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"Kokseng1"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"Kokseng1"},"content":"import duke.exceptions.DukeException;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"Kokseng1"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Kokseng1"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"Kokseng1"},"content":" * contains the list of tasks, and provides methods to edit the list and interact with storage/hard drive","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"Kokseng1"},"content":"public class TaskList {","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"Kokseng1"},"content":" * ArrayList of tasks","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"Kokseng1"},"content":" private static ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"Kokseng1"},"content":" * saves current tasks to hard drive","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"Kokseng1"},"content":" public static void saveList() {","lastModifiedDate":"2023-09-08"},{"lineNumber":21,"author":{"gitId":"Kokseng1"},"content":" Storage.saveTask(tasks);","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"Kokseng1"},"content":" * loads tasks from hard drive into tasks, prints a message if there","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"Kokseng1"},"content":" * are no tasks found","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"Kokseng1"},"content":" public static void updateFromStorage() {","lastModifiedDate":"2023-09-08"},{"lineNumber":29,"author":{"gitId":"Kokseng1"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"Kokseng1"},"content":" tasks \u003d Storage.loadTasks();","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"Kokseng1"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"Kokseng1"},"content":" Ui.print(\"No tasks found in storage, starting new list\");","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"Kokseng1"},"content":" * prints the list of task in their string format,","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"Kokseng1"},"content":" * each task starts on a new line","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"Kokseng1"},"content":" * @throws DukeException if there are no tasks in the list","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"Kokseng1"},"content":" public static String getListAsString() throws DukeException {","lastModifiedDate":"2023-09-08"},{"lineNumber":42,"author":{"gitId":"Kokseng1"},"content":" if (tasks.size() \u003d\u003d 0) {","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"Kokseng1"},"content":" throw new DukeException(\"There are no tasks yet\");","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":46,"author":{"gitId":"Kokseng1"},"content":" StringBuilder stringBuilder \u003d new StringBuilder();","lastModifiedDate":"2023-09-08"},{"lineNumber":47,"author":{"gitId":"Kokseng1"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-09-08"},{"lineNumber":48,"author":{"gitId":"Kokseng1"},"content":" String str \u003d (i + 1) + \".\" + tasks.get(i);","lastModifiedDate":"2023-09-08"},{"lineNumber":49,"author":{"gitId":"Kokseng1"},"content":" stringBuilder.append(str).append(\"\\n\");","lastModifiedDate":"2023-09-08"},{"lineNumber":50,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":51,"author":{"gitId":"Kokseng1"},"content":" return stringBuilder.toString();","lastModifiedDate":"2023-09-08"},{"lineNumber":52,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"Kokseng1"},"content":" * add a task to the current list","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"Kokseng1"},"content":" * @param task task to be added","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"Kokseng1"},"content":" public static String addTask(Task task) {","lastModifiedDate":"2023-09-08"},{"lineNumber":59,"author":{"gitId":"Kokseng1"},"content":" tasks.add(task);","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"Kokseng1"},"content":" return (\"Got it. I\u0027ve added this task: \\n\" + task + \"\\nnow you have \"","lastModifiedDate":"2023-09-08"},{"lineNumber":61,"author":{"gitId":"Kokseng1"},"content":" + tasks.size() + \" tasks in the list\");","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"Kokseng1"},"content":" * deletes a task from the list","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"Kokseng1"},"content":" * @param i index of task which is to be deleted","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"Kokseng1"},"content":" * @throws DukeException if index is out of range or there are no tasks to delete","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":69,"author":{"gitId":"Kokseng1"},"content":" public static String deleteTask(int i) throws DukeException {","lastModifiedDate":"2023-09-08"},{"lineNumber":70,"author":{"gitId":"Kokseng1"},"content":" if (tasks.size() \u003c\u003d 0) {","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"Kokseng1"},"content":" throw new DukeException(\"There are no tasks to delete\");","lastModifiedDate":"2023-09-04"},{"lineNumber":72,"author":{"gitId":"Kokseng1"},"content":" } else if (tasks.size() \u003c i) {","lastModifiedDate":"2023-09-04"},{"lineNumber":73,"author":{"gitId":"Kokseng1"},"content":" throw new DukeException(\"Task.Task index out of range\");","lastModifiedDate":"2023-09-04"},{"lineNumber":74,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":75,"author":{"gitId":"Kokseng1"},"content":" Task deleted \u003d tasks.remove(i);","lastModifiedDate":"2023-09-04"},{"lineNumber":76,"author":{"gitId":"Kokseng1"},"content":" return (\"Noted. I\u0027ve removed this task:\\n\" + deleted + \"\\nNow you have \"","lastModifiedDate":"2023-09-08"},{"lineNumber":77,"author":{"gitId":"Kokseng1"},"content":" + tasks.size() + \" tasks in the list\");","lastModifiedDate":"2023-09-04"},{"lineNumber":78,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":79,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":80,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":81,"author":{"gitId":"Kokseng1"},"content":" * marks a task at an index as done","lastModifiedDate":"2023-09-04"},{"lineNumber":82,"author":{"gitId":"Kokseng1"},"content":" * @param i index of task to be marked as done","lastModifiedDate":"2023-09-04"},{"lineNumber":83,"author":{"gitId":"Kokseng1"},"content":" * @throws DukeException if task is already done","lastModifiedDate":"2023-09-04"},{"lineNumber":84,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":85,"author":{"gitId":"Kokseng1"},"content":" public static String markTask(int i) throws DukeException {","lastModifiedDate":"2023-09-08"},{"lineNumber":86,"author":{"gitId":"Kokseng1"},"content":" return tasks.get(i).mark();","lastModifiedDate":"2023-09-08"},{"lineNumber":87,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":88,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":89,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":90,"author":{"gitId":"Kokseng1"},"content":" * unmarks task at an index as undone","lastModifiedDate":"2023-09-04"},{"lineNumber":91,"author":{"gitId":"Kokseng1"},"content":" * @param i index of task which is to be marked undone","lastModifiedDate":"2023-09-04"},{"lineNumber":92,"author":{"gitId":"Kokseng1"},"content":" * @throws DukeException if task is still undone","lastModifiedDate":"2023-09-04"},{"lineNumber":93,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":94,"author":{"gitId":"Kokseng1"},"content":" public static String unmarkTask(int i) throws DukeException {","lastModifiedDate":"2023-09-08"},{"lineNumber":95,"author":{"gitId":"Kokseng1"},"content":" return tasks.get(i).unmark();","lastModifiedDate":"2023-09-08"},{"lineNumber":96,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":97,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":98,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":99,"author":{"gitId":"Kokseng1"},"content":" * getter for task from list","lastModifiedDate":"2023-09-05"},{"lineNumber":100,"author":{"gitId":"Kokseng1"},"content":" * @param i index of task to be gotten","lastModifiedDate":"2023-09-05"},{"lineNumber":101,"author":{"gitId":"Kokseng1"},"content":" * @return task at index i","lastModifiedDate":"2023-09-05"},{"lineNumber":102,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":103,"author":{"gitId":"Kokseng1"},"content":" public static Task getTask(int i) {","lastModifiedDate":"2023-09-08"},{"lineNumber":104,"author":{"gitId":"Kokseng1"},"content":" return tasks.get(i);","lastModifiedDate":"2023-09-05"},{"lineNumber":105,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":106,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":107,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":108,"author":{"gitId":"Kokseng1"},"content":" * find tasks containing a certain word","lastModifiedDate":"2023-09-06"},{"lineNumber":109,"author":{"gitId":"Kokseng1"},"content":" * @param word word to look for","lastModifiedDate":"2023-09-06"},{"lineNumber":110,"author":{"gitId":"Kokseng1"},"content":" * @return ArrayList of Tasks containing the word","lastModifiedDate":"2023-09-06"},{"lineNumber":111,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":112,"author":{"gitId":"Kokseng1"},"content":" public static ArrayList\u003cTask\u003e find(String word) {","lastModifiedDate":"2023-09-08"},{"lineNumber":113,"author":{"gitId":"Kokseng1"},"content":" String wordToFind \u003d word.split(\" \")[1];","lastModifiedDate":"2023-09-06"},{"lineNumber":114,"author":{"gitId":"Kokseng1"},"content":" ArrayList\u003cTask\u003e result \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-06"},{"lineNumber":115,"author":{"gitId":"Kokseng1"},"content":" for (Task task : tasks) {","lastModifiedDate":"2023-09-06"},{"lineNumber":116,"author":{"gitId":"Kokseng1"},"content":" if (task.getDescription().contains(wordToFind)) {","lastModifiedDate":"2023-09-06"},{"lineNumber":117,"author":{"gitId":"Kokseng1"},"content":" result.add(task);","lastModifiedDate":"2023-09-06"},{"lineNumber":118,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":119,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":120,"author":{"gitId":"Kokseng1"},"content":" return result;","lastModifiedDate":"2023-09-06"},{"lineNumber":121,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":122,"author":{"gitId":"Kokseng1"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"Kokseng1":122}},{"path":"src/main/java/duke/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kokseng1"},"content":"package duke;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"Kokseng1"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"Kokseng1"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"Kokseng1"},"content":"import duke.exceptions.DukeException;","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"Kokseng1"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"Kokseng1"},"content":" * responsible for printing messages and recieving commands","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"Kokseng1"},"content":"public class Ui {","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"Kokseng1"},"content":" * scanner to read input","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"Kokseng1"},"content":" private static final Scanner sc \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"Kokseng1"},"content":" * read and returns command","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"Kokseng1"},"content":" * @return String of user input","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"Kokseng1"},"content":" public static String readCommand() {","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"Kokseng1"},"content":" return sc.nextLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"Kokseng1"},"content":" * prints a message to the user","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"Kokseng1"},"content":" * @param message String message to be printed","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"Kokseng1"},"content":" public static void print(String message) {","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"Kokseng1"},"content":" System.out.println(message);","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"Kokseng1"},"content":" * greeting to be printed at start of program","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"Kokseng1"},"content":" public static void printGreeting() {","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"Kokseng1"},"content":" String name \u003d \"Chaty\";","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"Kokseng1"},"content":" System.out.println(\"Hello! I\u0027m \" + name + \"\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"Kokseng1"},"content":" + \"What can I do for you?\" + \"\\n\\n\");","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":43,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":44,"author":{"gitId":"Kokseng1"},"content":" * prints an arraylist, a new line for each object in the list","lastModifiedDate":"2023-09-07"},{"lineNumber":45,"author":{"gitId":"Kokseng1"},"content":" * @param list list of objects to be printed","lastModifiedDate":"2023-09-07"},{"lineNumber":46,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":47,"author":{"gitId":"Kokseng1"},"content":" public static void printArrayList(ArrayList list) {","lastModifiedDate":"2023-09-06"},{"lineNumber":48,"author":{"gitId":"Kokseng1"},"content":" for (int i \u003d 0; i \u003c list.size(); i++) {","lastModifiedDate":"2023-09-06"},{"lineNumber":49,"author":{"gitId":"Kokseng1"},"content":" Ui.print((i + 1) + \".\" + list.get(i));","lastModifiedDate":"2023-09-06"},{"lineNumber":50,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":51,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":52,"author":{"gitId":"Kokseng1"},"content":" public static String getListAsString(ArrayList list) throws DukeException {","lastModifiedDate":"2023-09-08"},{"lineNumber":53,"author":{"gitId":"Kokseng1"},"content":" if (list.size() \u003d\u003d 0) {","lastModifiedDate":"2023-09-08"},{"lineNumber":54,"author":{"gitId":"Kokseng1"},"content":" throw new DukeException(\"There are no tasks yet\");","lastModifiedDate":"2023-09-08"},{"lineNumber":55,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":56,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":57,"author":{"gitId":"Kokseng1"},"content":" StringBuilder stringBuilder \u003d new StringBuilder();","lastModifiedDate":"2023-09-08"},{"lineNumber":58,"author":{"gitId":"Kokseng1"},"content":" for (Object obj : list) {","lastModifiedDate":"2023-09-08"},{"lineNumber":59,"author":{"gitId":"Kokseng1"},"content":" stringBuilder.append(obj.toString()).append(\"\\n\");","lastModifiedDate":"2023-09-08"},{"lineNumber":60,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":61,"author":{"gitId":"Kokseng1"},"content":" return stringBuilder.toString();","lastModifiedDate":"2023-09-08"},{"lineNumber":62,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":63,"author":{"gitId":"Kokseng1"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"Kokseng1":63}},{"path":"src/main/java/duke/exceptions/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kokseng1"},"content":"package duke.exceptions;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"Kokseng1"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"Kokseng1"},"content":" * Represents a Duke exclusive error, not including parsing between String and Task","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"Kokseng1"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Kokseng1"},"content":" * public onstructor, returns a \u003ccode\u003eDukeException\u003c/code\u003e instance","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"Kokseng1"},"content":" * @param message message that is to be displayed","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"Kokseng1"},"content":" public DukeException(String message) {","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"Kokseng1"},"content":" super(message);","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"Kokseng1"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"Kokseng1":14}},{"path":"src/main/java/duke/exceptions/TaskParseException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kokseng1"},"content":"package duke.exceptions;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"Kokseng1"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"Kokseng1"},"content":" * Represents a parsing error between String and Task","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"Kokseng1"},"content":"public class TaskParseException extends Exception {","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Kokseng1"},"content":" * public onstructor, returns a \u003ccode\u003eTaskParseException\u003c/code\u003e instance","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"Kokseng1"},"content":" * @param message message that is to be displayed","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"Kokseng1"},"content":" public TaskParseException(String message) {","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"Kokseng1"},"content":" super(message);","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"Kokseng1"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"Kokseng1":14}},{"path":"src/main/java/duke/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kokseng1"},"content":"package duke.task;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"Kokseng1"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"Kokseng1"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"Kokseng1"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"Kokseng1"},"content":"import duke.exceptions.DukeException;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"Kokseng1"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"Kokseng1"},"content":" * Represents a Task of Deadline type, has a \u003ccode\u003eby\u003c/code\u003e that indicates when the task should be done","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"Kokseng1"},"content":" * by. \u003ccode\u003eby\u003c/code\u003e is stored in \u003ccode\u003eLocalDate\u003c/code\u003e format.","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"Kokseng1"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"Kokseng1"},"content":" * indicates when the task should be done","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"Kokseng1"},"content":" private final LocalDate by;","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"Kokseng1"},"content":" private final DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"dd MMMM yyyy\");","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"Kokseng1"},"content":" * Constructor, returns a \u003ccode\u003eDeadline\u003c/code\u003e instance","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"Kokseng1"},"content":" * @param done whether the task is done or not","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"Kokseng1"},"content":" * @param desc description or name of the task, and when the task must be done by, in","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"Kokseng1"},"content":" * \"YYYY-MM-DD\" format","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"Kokseng1"},"content":" * @throws DukeException error if incorrect format is used for by date and is unable to be parsed","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"Kokseng1"},"content":" public Deadline(boolean done, String desc) throws DukeException {","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"Kokseng1"},"content":" super(done, desc.substring(9, desc.indexOf(\"/by\")));","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"Kokseng1"},"content":" String byString \u003d desc.substring(desc.indexOf(\"/by\") + 4).replace(\" \", \"\");","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"Kokseng1"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"Kokseng1"},"content":" this.by \u003d LocalDate.parse(byString);","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"Kokseng1"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"Kokseng1"},"content":" throw new DukeException(\"Incorrect date format! Use eg.2019-12-02\");","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"Kokseng1"},"content":" * getter for \u003ccode\u003eby\u003c/code\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"Kokseng1"},"content":" * @return LocalDate by","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"Kokseng1"},"content":" public LocalDate getBy() {","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"Kokseng1"},"content":" return this.by;","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"Kokseng1"},"content":" * String representation of Deadline, including task type, if task is done, by date and task name","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"Kokseng1"},"content":" * @return String representation of Deadline","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"Kokseng1"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"Kokseng1"},"content":" public String toString() {","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"Kokseng1"},"content":" return \"[D]\" + super.toString() + \"(by: \" + this.by.format(formatter) + \")\";","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"Kokseng1"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"Kokseng1":53}},{"path":"src/main/java/duke/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kokseng1"},"content":"package duke.task;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"Kokseng1"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"Kokseng1"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"Kokseng1"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"Kokseng1"},"content":"import duke.exceptions.DukeException;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"Kokseng1"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"Kokseng1"},"content":" * Represents a Task of Event type, has a \u003ccode\u003eto\u003c/code\u003e and \u003ccode\u003efrom\u003c/code\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"Kokseng1"},"content":" * \u003ccode\u003eto\u003c/code\u003e and \u003ccode\u003efrom\u003c/code\u003e is stored in \u003ccode\u003eLocalDate\u003c/code\u003e format.","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"Kokseng1"},"content":"public class Event extends Task {","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"Kokseng1"},"content":" * when the event starts","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"Kokseng1"},"content":" private final LocalDate from;","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"Kokseng1"},"content":" * when the event ends","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"Kokseng1"},"content":" private final LocalDate to;","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"Kokseng1"},"content":" private final DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"dd MMMM yyyy\");","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"Kokseng1"},"content":" * constructor for Event, returns an Event","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"Kokseng1"},"content":" * @param done whether the event is done or over","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"Kokseng1"},"content":" * @param desc name of the event, when is it from, indicated by /from and when is it to","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"Kokseng1"},"content":" * , indicated by \u003ccode\u003eto\u003c/code\u003e. Both must be in YYYY-MM-DD format","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"Kokseng1"},"content":" * @throws DukeException throws an error if the date is unable to be parsed, likely due","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"Kokseng1"},"content":" * to wrong format","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"Kokseng1"},"content":" public Event(boolean done, String desc) throws DukeException {","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"Kokseng1"},"content":" super(done, desc.substring(6, desc.indexOf(\"/from\")));","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"Kokseng1"},"content":" int fromIndex \u003d desc.indexOf(\"/from\");","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"Kokseng1"},"content":" int toIndex \u003d desc.indexOf(\"/to\");","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"Kokseng1"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"Kokseng1"},"content":" String fromString \u003d desc.substring(fromIndex + 6, toIndex).replace(\" \", \"\");","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"Kokseng1"},"content":" String toString \u003d desc.substring(toIndex + 4).replace(\" \", \"\");","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"Kokseng1"},"content":" this.from \u003d LocalDate.parse(fromString);","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"Kokseng1"},"content":" this.to \u003d LocalDate.parse(toString);","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"Kokseng1"},"content":" } catch (StringIndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"Kokseng1"},"content":" throw new DukeException(\"You didn\u0027t enter the event in the correct format!\");","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"Kokseng1"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"Kokseng1"},"content":" throw new DukeException(\"Incorrect date format! Use eg.2019-12-02\");","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"Kokseng1"},"content":" * getter for from date","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"Kokseng1"},"content":" * @return LocalDate from","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"Kokseng1"},"content":" public LocalDate getFrom() {","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"Kokseng1"},"content":" return this.from;","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"Kokseng1"},"content":" * getter for to date","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"Kokseng1"},"content":" * @return LocalDate to","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"Kokseng1"},"content":" public LocalDate getTo() {","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"Kokseng1"},"content":" return this.to;","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"Kokseng1"},"content":" * String representation of Event, including task type, if task is done, from and to date, and task name","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"Kokseng1"},"content":" * @return String representation of Deadline","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"Kokseng1"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":69,"author":{"gitId":"Kokseng1"},"content":" public String toString() {","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"Kokseng1"},"content":" return \"[E]\" + super.toString() + \"(from: \" + this.from.format(formatter)","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"Kokseng1"},"content":" + \" to: \" + this.to.format(formatter) + \")\";","lastModifiedDate":"2023-09-04"},{"lineNumber":72,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":73,"author":{"gitId":"Kokseng1"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"Kokseng1":73}},{"path":"src/main/java/duke/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kokseng1"},"content":"package duke.task;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"Kokseng1"},"content":"import duke.exceptions.DukeException;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"Kokseng1"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"Kokseng1"},"content":" * Represents a Task, a supertype of Event, Deadline and Todo","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"Kokseng1"},"content":" * \u003ccode\u003eisDone\u003c/code\u003e shows whether the task is completed","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"Kokseng1"},"content":"public abstract class Task {","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"Kokseng1"},"content":" * name of task","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"Kokseng1"},"content":" private final String description;","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"Kokseng1"},"content":" * whether the task is done","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"Kokseng1"},"content":" private boolean isDone;","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"Kokseng1"},"content":" * constructor, should not be used because this is an abstract class. For initialising description","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"Kokseng1"},"content":" * and isDone only","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"Kokseng1"},"content":" * @param done whether the task is done","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"Kokseng1"},"content":" * @param description name of task","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"Kokseng1"},"content":" public Task(boolean done, String description) {","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"Kokseng1"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"Kokseng1"},"content":" this.isDone \u003d done;","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"Kokseng1"},"content":" * getter for boolean isDone","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"Kokseng1"},"content":" * @return boolean isDone","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"Kokseng1"},"content":" public boolean getisDone() {","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"Kokseng1"},"content":" return this.isDone;","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"Kokseng1"},"content":" * getter for descriptions","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"Kokseng1"},"content":" * @return","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"Kokseng1"},"content":" public String getDescription() {","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"Kokseng1"},"content":" return this.description;","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"Kokseng1"},"content":" * marks the task as done, if it is undone","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"Kokseng1"},"content":" * @throws DukeException if task is already done","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"Kokseng1"},"content":" public String mark() throws DukeException {","lastModifiedDate":"2023-09-08"},{"lineNumber":50,"author":{"gitId":"Kokseng1"},"content":" if (this.isDone) {","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"Kokseng1"},"content":" throw new DukeException(\"Task already done\");","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"Kokseng1"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"Kokseng1"},"content":" return (\"Nice! I\u0027ve marked this task as done:\\n\" + toString());","lastModifiedDate":"2023-09-08"},{"lineNumber":55,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"Kokseng1"},"content":" * unmarks the task as undone, if it is done","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"Kokseng1"},"content":" * @throws DukeException if task is still undone","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"Kokseng1"},"content":" public String unmark() throws DukeException {","lastModifiedDate":"2023-09-08"},{"lineNumber":62,"author":{"gitId":"Kokseng1"},"content":" if (!this.isDone) {","lastModifiedDate":"2023-08-28"},{"lineNumber":63,"author":{"gitId":"Kokseng1"},"content":" throw new DukeException(\"Task still undone\");","lastModifiedDate":"2023-08-28"},{"lineNumber":64,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":65,"author":{"gitId":"Kokseng1"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-28"},{"lineNumber":66,"author":{"gitId":"Kokseng1"},"content":" return \"OK, I\u0027ve marked this task as not done yet:\\n\" + toString();","lastModifiedDate":"2023-09-08"},{"lineNumber":67,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":68,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":69,"author":{"gitId":"Kokseng1"},"content":" * get String representation of whether the task is done","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"Kokseng1"},"content":" * @return \u003ccode\u003e\"X\"\u003c/code\u003e for done, \" \" for undone","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":72,"author":{"gitId":"Kokseng1"},"content":" private String getStatusIcon() {","lastModifiedDate":"2023-08-28"},{"lineNumber":73,"author":{"gitId":"Kokseng1"},"content":" return (isDone ? \"X\" : \" \"); // mark done task with X","lastModifiedDate":"2023-08-28"},{"lineNumber":74,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":75,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":76,"author":{"gitId":"Kokseng1"},"content":" * String representation of task, including whether the task is done","lastModifiedDate":"2023-09-04"},{"lineNumber":77,"author":{"gitId":"Kokseng1"},"content":" * @return string representation of task","lastModifiedDate":"2023-09-04"},{"lineNumber":78,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":79,"author":{"gitId":"Kokseng1"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":80,"author":{"gitId":"Kokseng1"},"content":" public String toString() {","lastModifiedDate":"2023-08-28"},{"lineNumber":81,"author":{"gitId":"Kokseng1"},"content":" return (\"[\" + this.getStatusIcon() + \"] \" + this.description);","lastModifiedDate":"2023-08-28"},{"lineNumber":82,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":83,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":84,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":85,"author":{"gitId":"Kokseng1"},"content":" * converts hard drive\u0027s String format of a task into an actual task item","lastModifiedDate":"2023-09-04"},{"lineNumber":86,"author":{"gitId":"Kokseng1"},"content":" * @param text String from hard drive","lastModifiedDate":"2023-09-04"},{"lineNumber":87,"author":{"gitId":"Kokseng1"},"content":" * @return task item","lastModifiedDate":"2023-09-04"},{"lineNumber":88,"author":{"gitId":"Kokseng1"},"content":" * @throws DukeException if string cannot be recognised and cannot be parsed into a task","lastModifiedDate":"2023-09-04"},{"lineNumber":89,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":90,"author":{"gitId":"Kokseng1"},"content":" public static Task parse(String text) throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":91,"author":{"gitId":"Kokseng1"},"content":" String[] parts \u003d text.split(\"\\\\|\");","lastModifiedDate":"2023-08-29"},{"lineNumber":92,"author":{"gitId":"Kokseng1"},"content":" String first \u003d parts[0];","lastModifiedDate":"2023-08-29"},{"lineNumber":93,"author":{"gitId":"Kokseng1"},"content":" Task task;","lastModifiedDate":"2023-09-03"},{"lineNumber":94,"author":{"gitId":"Kokseng1"},"content":" boolean done \u003d parts[1].equals(\"1\"); // 1 \u003d done, 0 \u003d undone","lastModifiedDate":"2023-09-03"},{"lineNumber":95,"author":{"gitId":"Kokseng1"},"content":" String description \u003d parts[2];","lastModifiedDate":"2023-08-29"},{"lineNumber":96,"author":{"gitId":"Kokseng1"},"content":" switch (first) {","lastModifiedDate":"2023-08-29"},{"lineNumber":97,"author":{"gitId":"Kokseng1"},"content":" case \"T\":","lastModifiedDate":"2023-08-29"},{"lineNumber":98,"author":{"gitId":"Kokseng1"},"content":" task \u003d new Todo(done, \"todo \" + description);","lastModifiedDate":"2023-08-29"},{"lineNumber":99,"author":{"gitId":"Kokseng1"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":100,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":101,"author":{"gitId":"Kokseng1"},"content":" case \"E\":","lastModifiedDate":"2023-08-29"},{"lineNumber":102,"author":{"gitId":"Kokseng1"},"content":" String from \u003d parts[3];","lastModifiedDate":"2023-08-29"},{"lineNumber":103,"author":{"gitId":"Kokseng1"},"content":" String to \u003d parts[4];","lastModifiedDate":"2023-08-29"},{"lineNumber":104,"author":{"gitId":"Kokseng1"},"content":" task \u003d new Event(done, \"event \" + description + \" /from \" + from + \" /to \" + to);","lastModifiedDate":"2023-08-29"},{"lineNumber":105,"author":{"gitId":"Kokseng1"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":106,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":107,"author":{"gitId":"Kokseng1"},"content":" case \"D\":","lastModifiedDate":"2023-08-29"},{"lineNumber":108,"author":{"gitId":"Kokseng1"},"content":" String by \u003d parts[3];","lastModifiedDate":"2023-08-29"},{"lineNumber":109,"author":{"gitId":"Kokseng1"},"content":" task \u003d new Deadline(done, \"deadline \" + description + \" /by \" + by);","lastModifiedDate":"2023-08-29"},{"lineNumber":110,"author":{"gitId":"Kokseng1"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":111,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":112,"author":{"gitId":"Kokseng1"},"content":" default:","lastModifiedDate":"2023-09-03"},{"lineNumber":113,"author":{"gitId":"Kokseng1"},"content":" throw new DukeException(\"Unable to parse from hard drive\");","lastModifiedDate":"2023-09-03"},{"lineNumber":114,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":115,"author":{"gitId":"Kokseng1"},"content":" return task;","lastModifiedDate":"2023-08-29"},{"lineNumber":116,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":117,"author":{"gitId":"Kokseng1"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"Kokseng1":117}},{"path":"src/main/java/duke/task/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kokseng1"},"content":"package duke.task;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"Kokseng1"},"content":"import duke.exceptions.DukeException;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"Kokseng1"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"Kokseng1"},"content":" * Represents a task of Todo type","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Kokseng1"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"Kokseng1"},"content":" * constructor, returns a todo instance","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"Kokseng1"},"content":" * @param done whether the task is done","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"Kokseng1"},"content":" * @param desc name of the task","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"Kokseng1"},"content":" * @throws DukeException","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"Kokseng1"},"content":" public Todo(boolean done, String desc) throws DukeException {","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"Kokseng1"},"content":" super(done, desc.substring(5));","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"Kokseng1"},"content":" if (desc.substring(5).isEmpty()) {","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"Kokseng1"},"content":" throw new DukeException(\"You forgot to enter the task!\");","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"Kokseng1"},"content":" * String representation of item, including indication of tasktype (todo)","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"Kokseng1"},"content":" * @return string representation of todo","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"Kokseng1"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"Kokseng1"},"content":" public String toString() {","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"Kokseng1"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"Kokseng1"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"Kokseng1":30}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"Kokseng1"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":3,"author":{"gitId":"Kokseng1"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"Kokseng1"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"Kokseng1"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"Kokseng1"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"Kokseng1"},"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-08"},{"lineNumber":9,"author":{"gitId":"Kokseng1"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"Kokseng1"},"content":" \u003cLabel fx:id\u003d\"dialog\" text\u003d\"Label\" wrapText\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"Kokseng1"},"content":" \u003cImageView fx:id\u003d\"displayPicture\" fitHeight\u003d\"99.0\" fitWidth\u003d\"99.0\" pickOnBounds\u003d\"true\" preserveRatio\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"Kokseng1"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"Kokseng1"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"Kokseng1"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"Kokseng1"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"Kokseng1"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-08"}],"authorContributionMap":{"Kokseng1":17}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"Kokseng1"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":3,"author":{"gitId":"Kokseng1"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"Kokseng1"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"Kokseng1"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"Kokseng1"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"Kokseng1"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"Kokseng1"},"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.MainWindow\"\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"Kokseng1"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"Kokseng1"},"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\" /\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"Kokseng1"},"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\" /\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"Kokseng1"},"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-08"},{"lineNumber":14,"author":{"gitId":"Kokseng1"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"Kokseng1"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"552.0\" prefWidth\u003d\"388.0\" /\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"Kokseng1"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"Kokseng1"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"Kokseng1"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":19,"author":{"gitId":"Kokseng1"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-08"}],"authorContributionMap":{"Kokseng1":19}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"Kokseng1"},"content":"todo read book","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"Kokseng1"},"content":"todo","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"Kokseng1"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"Kokseng1"},"content":"deadline return book /by Sunday","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"Kokseng1"},"content":"deadline return book /by 2019-12-02","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"Kokseng1"},"content":"deadline return book","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"Kokseng1"},"content":"event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"Kokseng1"},"content":"event project meeting /from 2019-12-02 /to 2019-12-03","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Kokseng1"},"content":"list","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"Kokseng1"},"content":"mark 2","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"Kokseng1"},"content":"mark 2","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"Kokseng1"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"Kokseng1"},"content":"delete 3","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"Kokseng1"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"Kokseng1"},"content":"bye","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"Kokseng1":15}},{"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":"Kokseng1"},"content":"del ACTUAL.TXT","lastModifiedDate":"2023-08-28"},{"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":"Kokseng1"},"content":"javac -cp ..\\src\\main\\java -Xlint:none -d ..\\bin ..\\src\\main\\java*.java","lastModifiedDate":"2023-09-04"},{"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":"-"},"content":"java -classpath ..\\bin Duke \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"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":{"Kokseng1":2,"-":19}}] +[{"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":"Kokseng1"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-04"},{"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":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"Kokseng1"},"content":" implementation \u0027org.junit.jupiter:junit-jupiter-api:5.10.0\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"Kokseng1"},"content":" implementation \u0027org.junit.jupiter:junit-jupiter:5.10.0\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":16,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":17,"author":{"gitId":"Kokseng1"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":19,"author":{"gitId":"Kokseng1"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":20,"author":{"gitId":"Kokseng1"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":21,"author":{"gitId":"Kokseng1"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":22,"author":{"gitId":"Kokseng1"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":23,"author":{"gitId":"Kokseng1"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":24,"author":{"gitId":"Kokseng1"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":25,"author":{"gitId":"Kokseng1"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":26,"author":{"gitId":"Kokseng1"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":27,"author":{"gitId":"Kokseng1"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":28,"author":{"gitId":"Kokseng1"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":29,"author":{"gitId":"Kokseng1"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":30,"author":{"gitId":"Kokseng1"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":31,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":" }","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":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":48,"author":{"gitId":"Kokseng1"},"content":" mainClass.set(\"Mainduke.Launcher\")","lastModifiedDate":"2023-09-09"},{"lineNumber":49,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":50,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":51,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":52,"author":{"gitId":"Kokseng1"},"content":" archiveBaseName \u003d \"launch\"","lastModifiedDate":"2023-09-09"},{"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":"Kokseng1"},"content":" from(sourceSets.main.resources) {","lastModifiedDate":"2023-09-09"},{"lineNumber":56,"author":{"gitId":"Kokseng1"},"content":" include \u0027images/**\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":57,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":58,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":59,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":60,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":61,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":62,"author":{"gitId":"Kokseng1"},"content":" enableAssertions \u003d true","lastModifiedDate":"2023-09-09"},{"lineNumber":63,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":64,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":65,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":66,"author":{"gitId":"Kokseng1"},"content":"checkstyle {","lastModifiedDate":"2023-09-08"},{"lineNumber":67,"author":{"gitId":"Kokseng1"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-08"},{"lineNumber":68,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2023-09-08"}],"authorContributionMap":{"Kokseng1":27,"-":41}},{"path":"src/main/java/mainDuke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kokseng1"},"content":"package mainDuke;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"Kokseng1"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"Kokseng1"},"content":"import mainDuke.stageStuff.DialogBox;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"Kokseng1"},"content":"import mainDuke.exceptions.DukeException;","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"Kokseng1"},"content":"import mainDuke.exceptions.TaskParseException;","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"Kokseng1"},"content":"import mainDuke.task.Task;","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"Kokseng1"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"Kokseng1"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"Kokseng1"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"Kokseng1"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"Kokseng1"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"Kokseng1"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"Kokseng1"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"Kokseng1"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"Kokseng1"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"Kokseng1"},"content":"import javafx.scene.layout.Region;","lastModifiedDate":"2023-09-08"},{"lineNumber":19,"author":{"gitId":"Kokseng1"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-08"},{"lineNumber":20,"author":{"gitId":"Kokseng1"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-08"},{"lineNumber":21,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"Kokseng1"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"Kokseng1"},"content":" * Main program, responsible for running everything and connecting components together.","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"Kokseng1"},"content":"public class Duke extends Application {","lastModifiedDate":"2023-09-08"},{"lineNumber":26,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"Kokseng1"},"content":" * Types of task.","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"Kokseng1"},"content":" public enum TaskType {","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"Kokseng1"},"content":" BYE,","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"Kokseng1"},"content":" LIST,","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"Kokseng1"},"content":" MARK,","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"Kokseng1"},"content":" UNMARK,","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"Kokseng1"},"content":" DELETE,","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"Kokseng1"},"content":" EVENT,","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"Kokseng1"},"content":" TODO,","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"Kokseng1"},"content":" DEADLINE,","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"Kokseng1"},"content":" FIND","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"Kokseng1"},"content":" protected Stage primaryStage;","lastModifiedDate":"2023-09-08"},{"lineNumber":41,"author":{"gitId":"Kokseng1"},"content":" @FXML","lastModifiedDate":"2023-09-08"},{"lineNumber":42,"author":{"gitId":"Kokseng1"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-08"},{"lineNumber":43,"author":{"gitId":"Kokseng1"},"content":" @FXML","lastModifiedDate":"2023-09-08"},{"lineNumber":44,"author":{"gitId":"Kokseng1"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-08"},{"lineNumber":45,"author":{"gitId":"Kokseng1"},"content":" @FXML","lastModifiedDate":"2023-09-08"},{"lineNumber":46,"author":{"gitId":"Kokseng1"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-08"},{"lineNumber":47,"author":{"gitId":"Kokseng1"},"content":" @FXML","lastModifiedDate":"2023-09-08"},{"lineNumber":48,"author":{"gitId":"Kokseng1"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-08"},{"lineNumber":49,"author":{"gitId":"Kokseng1"},"content":" private Scene scene;","lastModifiedDate":"2023-09-08"},{"lineNumber":50,"author":{"gitId":"Kokseng1"},"content":" private final Image user \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaUser.png\"));","lastModifiedDate":"2023-09-08"},{"lineNumber":51,"author":{"gitId":"Kokseng1"},"content":" private final Image duke \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaDuke.png\"));","lastModifiedDate":"2023-09-08"},{"lineNumber":52,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":53,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":54,"author":{"gitId":"Kokseng1"},"content":" @Override","lastModifiedDate":"2023-09-08"},{"lineNumber":55,"author":{"gitId":"Kokseng1"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-08"},{"lineNumber":56,"author":{"gitId":"Kokseng1"},"content":" primaryStage \u003d stage;","lastModifiedDate":"2023-09-08"},{"lineNumber":57,"author":{"gitId":"Kokseng1"},"content":" //The container for the content of the chat to scroll.","lastModifiedDate":"2023-09-08"},{"lineNumber":58,"author":{"gitId":"Kokseng1"},"content":" scrollPane \u003d new ScrollPane();","lastModifiedDate":"2023-09-08"},{"lineNumber":59,"author":{"gitId":"Kokseng1"},"content":" dialogContainer \u003d new VBox();","lastModifiedDate":"2023-09-08"},{"lineNumber":60,"author":{"gitId":"Kokseng1"},"content":" scrollPane.setContent(dialogContainer);","lastModifiedDate":"2023-09-08"},{"lineNumber":61,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":62,"author":{"gitId":"Kokseng1"},"content":" userInput \u003d new TextField();","lastModifiedDate":"2023-09-08"},{"lineNumber":63,"author":{"gitId":"Kokseng1"},"content":" sendButton \u003d new Button(\"Send\");","lastModifiedDate":"2023-09-08"},{"lineNumber":64,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":65,"author":{"gitId":"Kokseng1"},"content":" AnchorPane mainLayout \u003d new AnchorPane();","lastModifiedDate":"2023-09-08"},{"lineNumber":66,"author":{"gitId":"Kokseng1"},"content":" mainLayout.getChildren().addAll(scrollPane, userInput, sendButton);","lastModifiedDate":"2023-09-08"},{"lineNumber":67,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":68,"author":{"gitId":"Kokseng1"},"content":" scene \u003d new Scene(mainLayout);","lastModifiedDate":"2023-09-08"},{"lineNumber":69,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":70,"author":{"gitId":"Kokseng1"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-08"},{"lineNumber":71,"author":{"gitId":"Kokseng1"},"content":" stage.show();","lastModifiedDate":"2023-09-08"},{"lineNumber":72,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":73,"author":{"gitId":"Kokseng1"},"content":" stage.setTitle(\"Duke\");","lastModifiedDate":"2023-09-08"},{"lineNumber":74,"author":{"gitId":"Kokseng1"},"content":" stage.setResizable(false);","lastModifiedDate":"2023-09-08"},{"lineNumber":75,"author":{"gitId":"Kokseng1"},"content":" stage.setMinHeight(600.0);","lastModifiedDate":"2023-09-08"},{"lineNumber":76,"author":{"gitId":"Kokseng1"},"content":" stage.setMinWidth(400.0);","lastModifiedDate":"2023-09-08"},{"lineNumber":77,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":78,"author":{"gitId":"Kokseng1"},"content":" mainLayout.setPrefSize(400.0, 600.0);","lastModifiedDate":"2023-09-08"},{"lineNumber":79,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":80,"author":{"gitId":"Kokseng1"},"content":" scrollPane.setPrefSize(385, 535);","lastModifiedDate":"2023-09-08"},{"lineNumber":81,"author":{"gitId":"Kokseng1"},"content":" scrollPane.setHbarPolicy(ScrollPane.ScrollBarPolicy.NEVER);","lastModifiedDate":"2023-09-08"},{"lineNumber":82,"author":{"gitId":"Kokseng1"},"content":" scrollPane.setVbarPolicy(ScrollPane.ScrollBarPolicy.ALWAYS);","lastModifiedDate":"2023-09-08"},{"lineNumber":83,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":84,"author":{"gitId":"Kokseng1"},"content":" scrollPane.setVvalue(1.0);","lastModifiedDate":"2023-09-08"},{"lineNumber":85,"author":{"gitId":"Kokseng1"},"content":" scrollPane.setFitToWidth(true);","lastModifiedDate":"2023-09-08"},{"lineNumber":86,"author":{"gitId":"Kokseng1"},"content":" dialogContainer.setPrefHeight(Region.USE_COMPUTED_SIZE);","lastModifiedDate":"2023-09-08"},{"lineNumber":87,"author":{"gitId":"Kokseng1"},"content":" userInput.setPrefWidth(325.0);","lastModifiedDate":"2023-09-08"},{"lineNumber":88,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":89,"author":{"gitId":"Kokseng1"},"content":" sendButton.setPrefWidth(55.0);","lastModifiedDate":"2023-09-08"},{"lineNumber":90,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":91,"author":{"gitId":"Kokseng1"},"content":" AnchorPane.setTopAnchor(scrollPane, 1.0);","lastModifiedDate":"2023-09-08"},{"lineNumber":92,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":93,"author":{"gitId":"Kokseng1"},"content":" AnchorPane.setBottomAnchor(sendButton, 1.0);","lastModifiedDate":"2023-09-08"},{"lineNumber":94,"author":{"gitId":"Kokseng1"},"content":" AnchorPane.setRightAnchor(sendButton, 1.0);","lastModifiedDate":"2023-09-08"},{"lineNumber":95,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":96,"author":{"gitId":"Kokseng1"},"content":" AnchorPane.setLeftAnchor(userInput , 1.0);","lastModifiedDate":"2023-09-08"},{"lineNumber":97,"author":{"gitId":"Kokseng1"},"content":" AnchorPane.setBottomAnchor(userInput, 1.0);","lastModifiedDate":"2023-09-08"},{"lineNumber":98,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":99,"author":{"gitId":"Kokseng1"},"content":" sendButton.setOnMouseClicked((event) -\u003e {","lastModifiedDate":"2023-09-08"},{"lineNumber":100,"author":{"gitId":"Kokseng1"},"content":" dialogContainer.getChildren().add(getDialogLabel(userInput.getText()));","lastModifiedDate":"2023-09-08"},{"lineNumber":101,"author":{"gitId":"Kokseng1"},"content":" userInput.clear();","lastModifiedDate":"2023-09-08"},{"lineNumber":102,"author":{"gitId":"Kokseng1"},"content":" });","lastModifiedDate":"2023-09-08"},{"lineNumber":103,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":104,"author":{"gitId":"Kokseng1"},"content":" userInput.setOnAction((event) -\u003e {","lastModifiedDate":"2023-09-08"},{"lineNumber":105,"author":{"gitId":"Kokseng1"},"content":" dialogContainer.getChildren().add(getDialogLabel(userInput.getText()));","lastModifiedDate":"2023-09-08"},{"lineNumber":106,"author":{"gitId":"Kokseng1"},"content":" userInput.clear();","lastModifiedDate":"2023-09-08"},{"lineNumber":107,"author":{"gitId":"Kokseng1"},"content":" });","lastModifiedDate":"2023-09-08"},{"lineNumber":108,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":109,"author":{"gitId":"Kokseng1"},"content":" dialogContainer.heightProperty().addListener((observable) -\u003e scrollPane.setVvalue(1.0));","lastModifiedDate":"2023-09-08"},{"lineNumber":110,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":111,"author":{"gitId":"Kokseng1"},"content":" sendButton.setOnMouseClicked((event) -\u003e {","lastModifiedDate":"2023-09-08"},{"lineNumber":112,"author":{"gitId":"Kokseng1"},"content":" handleUserInput();","lastModifiedDate":"2023-09-08"},{"lineNumber":113,"author":{"gitId":"Kokseng1"},"content":" });","lastModifiedDate":"2023-09-08"},{"lineNumber":114,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":115,"author":{"gitId":"Kokseng1"},"content":" userInput.setOnAction((event) -\u003e {","lastModifiedDate":"2023-09-08"},{"lineNumber":116,"author":{"gitId":"Kokseng1"},"content":" handleUserInput();","lastModifiedDate":"2023-09-08"},{"lineNumber":117,"author":{"gitId":"Kokseng1"},"content":" });","lastModifiedDate":"2023-09-08"},{"lineNumber":118,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":119,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":120,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":121,"author":{"gitId":"Kokseng1"},"content":" * Creates a label with the specified text and adds it to the dialog container.","lastModifiedDate":"2023-09-08"},{"lineNumber":122,"author":{"gitId":"Kokseng1"},"content":" * @param text String containing text to add.","lastModifiedDate":"2023-09-09"},{"lineNumber":123,"author":{"gitId":"Kokseng1"},"content":" * @return a label with the specified text that has word wrap enabled.","lastModifiedDate":"2023-09-08"},{"lineNumber":124,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":125,"author":{"gitId":"Kokseng1"},"content":" private Label getDialogLabel(String text) {","lastModifiedDate":"2023-09-08"},{"lineNumber":126,"author":{"gitId":"Kokseng1"},"content":" Label textToAdd \u003d new Label(text);","lastModifiedDate":"2023-09-08"},{"lineNumber":127,"author":{"gitId":"Kokseng1"},"content":" textToAdd.setWrapText(true);","lastModifiedDate":"2023-09-08"},{"lineNumber":128,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":129,"author":{"gitId":"Kokseng1"},"content":" return textToAdd;","lastModifiedDate":"2023-09-08"},{"lineNumber":130,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":131,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":132,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":133,"author":{"gitId":"Kokseng1"},"content":" * Creates two dialog boxes, one echoing user input and the other containing Duke\u0027s reply and then appends them to","lastModifiedDate":"2023-09-08"},{"lineNumber":134,"author":{"gitId":"Kokseng1"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-08"},{"lineNumber":135,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":136,"author":{"gitId":"Kokseng1"},"content":" @FXML","lastModifiedDate":"2023-09-08"},{"lineNumber":137,"author":{"gitId":"Kokseng1"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-08"},{"lineNumber":138,"author":{"gitId":"Kokseng1"},"content":" String userText \u003d userInput.getText();","lastModifiedDate":"2023-09-08"},{"lineNumber":139,"author":{"gitId":"Kokseng1"},"content":" String dukeText \u003d getResponse(userInput.getText());","lastModifiedDate":"2023-09-08"},{"lineNumber":140,"author":{"gitId":"Kokseng1"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-08"},{"lineNumber":141,"author":{"gitId":"Kokseng1"},"content":" DialogBox.getUserDialog(userText, user),","lastModifiedDate":"2023-09-08"},{"lineNumber":142,"author":{"gitId":"Kokseng1"},"content":" DialogBox.getDukeDialog(dukeText, duke)","lastModifiedDate":"2023-09-08"},{"lineNumber":143,"author":{"gitId":"Kokseng1"},"content":" );","lastModifiedDate":"2023-09-08"},{"lineNumber":144,"author":{"gitId":"Kokseng1"},"content":" userInput.clear();","lastModifiedDate":"2023-09-08"},{"lineNumber":145,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":146,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":147,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":148,"author":{"gitId":"Kokseng1"},"content":" public String getResponse(String input) {","lastModifiedDate":"2023-09-09"},{"lineNumber":149,"author":{"gitId":"Kokseng1"},"content":" try {","lastModifiedDate":"2023-08-23"},{"lineNumber":150,"author":{"gitId":"Kokseng1"},"content":" TaskType taskType \u003d Parser.parseType(input);","lastModifiedDate":"2023-09-08"},{"lineNumber":151,"author":{"gitId":"Kokseng1"},"content":" switch (taskType) {","lastModifiedDate":"2023-09-03"},{"lineNumber":152,"author":{"gitId":"Kokseng1"},"content":" case LIST: {","lastModifiedDate":"2023-09-03"},{"lineNumber":153,"author":{"gitId":"Kokseng1"},"content":" return TaskList.getListAsString();","lastModifiedDate":"2023-09-08"},{"lineNumber":154,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":155,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":156,"author":{"gitId":"Kokseng1"},"content":" case MARK: {","lastModifiedDate":"2023-09-03"},{"lineNumber":157,"author":{"gitId":"Kokseng1"},"content":" int tasknum \u003d Parser.getMarkIndex(input);","lastModifiedDate":"2023-09-08"},{"lineNumber":158,"author":{"gitId":"Kokseng1"},"content":" return TaskList.markTask(tasknum);","lastModifiedDate":"2023-09-08"},{"lineNumber":159,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":160,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":161,"author":{"gitId":"Kokseng1"},"content":" case UNMARK: {","lastModifiedDate":"2023-09-03"},{"lineNumber":162,"author":{"gitId":"Kokseng1"},"content":" int tasknum \u003d Parser.getUnmarkIndex(input);","lastModifiedDate":"2023-09-08"},{"lineNumber":163,"author":{"gitId":"Kokseng1"},"content":" return TaskList.unmarkTask(tasknum);","lastModifiedDate":"2023-09-08"},{"lineNumber":164,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":165,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":166,"author":{"gitId":"Kokseng1"},"content":" case DEADLINE:","lastModifiedDate":"2023-09-03"},{"lineNumber":167,"author":{"gitId":"Kokseng1"},"content":" case TODO:","lastModifiedDate":"2023-09-03"},{"lineNumber":168,"author":{"gitId":"Kokseng1"},"content":" case EVENT:","lastModifiedDate":"2023-09-03"},{"lineNumber":169,"author":{"gitId":"Kokseng1"},"content":" Task nextTask \u003d Parser.parseTask(input, taskType);","lastModifiedDate":"2023-09-08"},{"lineNumber":170,"author":{"gitId":"Kokseng1"},"content":" return TaskList.addTask(nextTask);","lastModifiedDate":"2023-09-08"},{"lineNumber":171,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":172,"author":{"gitId":"Kokseng1"},"content":" case DELETE: {","lastModifiedDate":"2023-09-03"},{"lineNumber":173,"author":{"gitId":"Kokseng1"},"content":" return TaskList.deleteTask(Parser.getDeleteIndex(input));","lastModifiedDate":"2023-09-08"},{"lineNumber":174,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":175,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":176,"author":{"gitId":"Kokseng1"},"content":" case FIND: {","lastModifiedDate":"2023-09-06"},{"lineNumber":177,"author":{"gitId":"Kokseng1"},"content":" ArrayList\u003cTask\u003e list \u003d TaskList.find(input);","lastModifiedDate":"2023-09-08"},{"lineNumber":178,"author":{"gitId":"Kokseng1"},"content":" if (list.size() \u003d\u003d 0) {","lastModifiedDate":"2023-09-06"},{"lineNumber":179,"author":{"gitId":"Kokseng1"},"content":" return (\"there are no matching tasks!\");","lastModifiedDate":"2023-09-08"},{"lineNumber":180,"author":{"gitId":"Kokseng1"},"content":" } else {","lastModifiedDate":"2023-09-06"},{"lineNumber":181,"author":{"gitId":"Kokseng1"},"content":" String header \u003d \"Here are the matching tasks in your list:\\n\";","lastModifiedDate":"2023-09-08"},{"lineNumber":182,"author":{"gitId":"Kokseng1"},"content":" String listInString \u003d Ui.getListAsString(list);","lastModifiedDate":"2023-09-08"},{"lineNumber":183,"author":{"gitId":"Kokseng1"},"content":" return header + listInString;","lastModifiedDate":"2023-09-08"},{"lineNumber":184,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":185,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":186,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":187,"author":{"gitId":"Kokseng1"},"content":" case BYE: {","lastModifiedDate":"2023-09-08"},{"lineNumber":188,"author":{"gitId":"Kokseng1"},"content":" return (\"Bye. Hope to see you again soon!\");","lastModifiedDate":"2023-09-08"},{"lineNumber":189,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":190,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":191,"author":{"gitId":"Kokseng1"},"content":" default: {","lastModifiedDate":"2023-08-29"},{"lineNumber":192,"author":{"gitId":"Kokseng1"},"content":" throw new DukeException(\"I can\u0027t identify your command!\");","lastModifiedDate":"2023-08-29"},{"lineNumber":193,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":194,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":195,"author":{"gitId":"Kokseng1"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":196,"author":{"gitId":"Kokseng1"},"content":" return e.getMessage();","lastModifiedDate":"2023-09-08"},{"lineNumber":197,"author":{"gitId":"Kokseng1"},"content":" } catch (TaskParseException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":198,"author":{"gitId":"Kokseng1"},"content":" return e.getMessage();","lastModifiedDate":"2023-09-08"},{"lineNumber":199,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":200,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":201,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":202,"author":{"gitId":"Kokseng1"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-03"},{"lineNumber":203,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":204,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"Kokseng1":202,"-":2}},{"path":"src/main/java/mainDuke/DukeTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kokseng1"},"content":"package mainDuke;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"Kokseng1"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"Kokseng1"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"Kokseng1"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"Kokseng1"},"content":"import mainDuke.exceptions.DukeException;","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"Kokseng1"},"content":"import mainDuke.exceptions.TaskParseException;","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"Kokseng1"},"content":"import mainDuke.task.Deadline;","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"Kokseng1"},"content":"import mainDuke.task.Task;","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"Kokseng1"},"content":"import mainDuke.task.Todo;","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"Kokseng1"},"content":"public class DukeTest {","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"Kokseng1"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"Kokseng1"},"content":" public void parseTypeTest() {","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"Kokseng1"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"Kokseng1"},"content":" Duke.TaskType result \u003d Parser.parseType(\"Todo make\");","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"Kokseng1"},"content":" assertEquals(Duke.TaskType.TODO, result);","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"Kokseng1"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"Kokseng1"},"content":" fail(e.getMessage());","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"Kokseng1"},"content":" } catch (TaskParseException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"Kokseng1"},"content":" fail(e.getMessage());","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"Kokseng1"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"Kokseng1"},"content":" public void parseTaskTest() {","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"Kokseng1"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"Kokseng1"},"content":" Task expected \u003d new Deadline(false, \"deadline return book /by 2019-12-02\");","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"Kokseng1"},"content":" Task result \u003d Parser.parseTask(\"deadline return book /by 2019-12-02\", Duke.TaskType.DEADLINE);","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"Kokseng1"},"content":" assertEquals(expected.toString(), result.toString());","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"Kokseng1"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"Kokseng1"},"content":" fail(e.getMessage());","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"Kokseng1"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"Kokseng1"},"content":" public void markTasFromTaskListTest() {","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"Kokseng1"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"Kokseng1"},"content":" Task expected \u003d new Todo(true, \"todo mark\");","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"Kokseng1"},"content":" TaskList list \u003d new TaskList();","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"Kokseng1"},"content":" list.addTask(new Todo(false, \"todo mark\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"Kokseng1"},"content":" list.markTask(0);","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"Kokseng1"},"content":" Task result \u003d list.getTask(0);","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"Kokseng1"},"content":" assertEquals(result.toString(), expected.toString());","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"Kokseng1"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"Kokseng1"},"content":" fail(e.getMessage());","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"Kokseng1"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"Kokseng1":52}},{"path":"src/main/java/mainDuke/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kokseng1"},"content":"package mainDuke;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"Kokseng1"},"content":"import mainDuke.exceptions.DukeException;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"Kokseng1"},"content":"import mainDuke.exceptions.TaskParseException;","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"Kokseng1"},"content":"import mainDuke.task.Deadline;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"Kokseng1"},"content":"import mainDuke.task.Event;","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"Kokseng1"},"content":"import mainDuke.task.Task;","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"Kokseng1"},"content":"import mainDuke.task.Todo;","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"Kokseng1"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"Kokseng1"},"content":" * Parser to make sense of user commands, parsing from command to action","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"Kokseng1"},"content":"public class Parser {","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"Kokseng1"},"content":" * If command is delete, use this method to get the index of task user wants to delete.","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"Kokseng1"},"content":" * @param text original command.","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"Kokseng1"},"content":" * @return Integer representing the index of task to be deleted.","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"Kokseng1"},"content":" public static Integer getDeleteIndex(String text) {","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"Kokseng1"},"content":" return Integer.parseInt(text.split(\" \")[1]) - 1;","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"Kokseng1"},"content":" * If command is mark, use this method to get the index of task user wants to mark.","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"Kokseng1"},"content":" * @param text original command.","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"Kokseng1"},"content":" * @return Integer representing the index of task to be marked.","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"Kokseng1"},"content":" public static Integer getMarkIndex(String text) {","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"Kokseng1"},"content":" return Integer.parseInt(text.split(\" \")[1]) - 1;","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"Kokseng1"},"content":" * If command is unmark, use this method to get the index of task user wants to unmark.","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"Kokseng1"},"content":" * @param text original command.","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"Kokseng1"},"content":" * @return Integer representing the index of task to be unmarked.","lastModifiedDate":"2023-09-09"},{"lineNumber":35,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"Kokseng1"},"content":" public static Integer getUnmarkIndex(String text) {","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"Kokseng1"},"content":" return Integer.parseInt(text.split(\" \")[1]) - 1;","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"Kokseng1"},"content":" * Given a TaskType, parses a text into a task of that type.","lastModifiedDate":"2023-09-09"},{"lineNumber":42,"author":{"gitId":"Kokseng1"},"content":" * @param text original user input.","lastModifiedDate":"2023-09-09"},{"lineNumber":43,"author":{"gitId":"Kokseng1"},"content":" * @param type type of task that user specified.","lastModifiedDate":"2023-09-09"},{"lineNumber":44,"author":{"gitId":"Kokseng1"},"content":" * @return task constructed according to user input.","lastModifiedDate":"2023-09-09"},{"lineNumber":45,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"Kokseng1"},"content":" public static Task parseTask(String text, Duke.TaskType type) throws DukeException {","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"Kokseng1"},"content":" switch (type) {","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"Kokseng1"},"content":" case TODO: {","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"Kokseng1"},"content":" return new Todo(false, text);","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"Kokseng1"},"content":" case DEADLINE: {","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"Kokseng1"},"content":" if (!text.contains(\"/by\") || text.length() \u003c\u003d text.indexOf(\"/by\") + 4) {","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"Kokseng1"},"content":" throw new DukeException(\"You forgot to specify when the deadline ends!\");","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"Kokseng1"},"content":" return new Deadline(false, text);","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"Kokseng1"},"content":" case EVENT: {","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"Kokseng1"},"content":" if (!text.contains(\"/from\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"Kokseng1"},"content":" throw new DukeException(\"You forgot to specify when the event starts!\");","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"Kokseng1"},"content":" if (!text.contains(\"/to\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"Kokseng1"},"content":" throw new DukeException(\"You forgot to specify when the event ends!\");","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"Kokseng1"},"content":" return new Event(false, text);","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"Kokseng1"},"content":" default: {","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"Kokseng1"},"content":" throw new DukeException(\"Not a task!\");","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":75,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":76,"author":{"gitId":"Kokseng1"},"content":" * Make sense of what TaskType the user is trying to create from the first word of their input.","lastModifiedDate":"2023-09-09"},{"lineNumber":77,"author":{"gitId":"Kokseng1"},"content":" * @param text user input.","lastModifiedDate":"2023-09-09"},{"lineNumber":78,"author":{"gitId":"Kokseng1"},"content":" * @return TaskType according to user input.","lastModifiedDate":"2023-09-09"},{"lineNumber":79,"author":{"gitId":"Kokseng1"},"content":" * @throws DukeException Some components of the command may be missing for certain tasks.","lastModifiedDate":"2023-09-09"},{"lineNumber":80,"author":{"gitId":"Kokseng1"},"content":" * @throws TaskParseException unable to understand what TaskType the user is trying to create.","lastModifiedDate":"2023-09-09"},{"lineNumber":81,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":82,"author":{"gitId":"Kokseng1"},"content":" public static Duke.TaskType parseType(String text) throws DukeException, TaskParseException {","lastModifiedDate":"2023-09-03"},{"lineNumber":83,"author":{"gitId":"Kokseng1"},"content":" String[] textParts \u003d text.split(\" \");","lastModifiedDate":"2023-09-03"},{"lineNumber":84,"author":{"gitId":"Kokseng1"},"content":" String firstWord \u003d textParts[0].toLowerCase();","lastModifiedDate":"2023-09-03"},{"lineNumber":85,"author":{"gitId":"Kokseng1"},"content":" if (textParts.length \u003c\u003d 1 \u0026\u0026 !firstWord.equals(\"list\") \u0026\u0026 !firstWord.equals(\"bye\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":86,"author":{"gitId":"Kokseng1"},"content":" throw new DukeException(\"You forgot to write the task\");","lastModifiedDate":"2023-09-03"},{"lineNumber":87,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":88,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":89,"author":{"gitId":"Kokseng1"},"content":" switch (textParts[0].toLowerCase()) {","lastModifiedDate":"2023-09-03"},{"lineNumber":90,"author":{"gitId":"Kokseng1"},"content":" case \"list\": {","lastModifiedDate":"2023-09-03"},{"lineNumber":91,"author":{"gitId":"Kokseng1"},"content":" return Duke.TaskType.LIST;","lastModifiedDate":"2023-09-03"},{"lineNumber":92,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":93,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":94,"author":{"gitId":"Kokseng1"},"content":" case \"mark\": {","lastModifiedDate":"2023-09-03"},{"lineNumber":95,"author":{"gitId":"Kokseng1"},"content":" return Duke.TaskType.MARK;","lastModifiedDate":"2023-09-03"},{"lineNumber":96,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":97,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":98,"author":{"gitId":"Kokseng1"},"content":" case \"unmark\": {","lastModifiedDate":"2023-09-03"},{"lineNumber":99,"author":{"gitId":"Kokseng1"},"content":" return Duke.TaskType.UNMARK;","lastModifiedDate":"2023-09-03"},{"lineNumber":100,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":101,"author":{"gitId":"Kokseng1"},"content":" case \"deadline\": {","lastModifiedDate":"2023-09-03"},{"lineNumber":102,"author":{"gitId":"Kokseng1"},"content":" return Duke.TaskType.DEADLINE;","lastModifiedDate":"2023-09-03"},{"lineNumber":103,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":104,"author":{"gitId":"Kokseng1"},"content":" case \"event\": {","lastModifiedDate":"2023-09-03"},{"lineNumber":105,"author":{"gitId":"Kokseng1"},"content":" return Duke.TaskType.EVENT;","lastModifiedDate":"2023-09-03"},{"lineNumber":106,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":107,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":108,"author":{"gitId":"Kokseng1"},"content":" case \"todo\": {","lastModifiedDate":"2023-09-03"},{"lineNumber":109,"author":{"gitId":"Kokseng1"},"content":" return Duke.TaskType.TODO;","lastModifiedDate":"2023-09-03"},{"lineNumber":110,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":111,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":112,"author":{"gitId":"Kokseng1"},"content":" case \"delete\": {","lastModifiedDate":"2023-09-03"},{"lineNumber":113,"author":{"gitId":"Kokseng1"},"content":" return Duke.TaskType.DELETE;","lastModifiedDate":"2023-09-03"},{"lineNumber":114,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":115,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":116,"author":{"gitId":"Kokseng1"},"content":" case \"bye\": {","lastModifiedDate":"2023-09-03"},{"lineNumber":117,"author":{"gitId":"Kokseng1"},"content":" return Duke.TaskType.BYE;","lastModifiedDate":"2023-09-03"},{"lineNumber":118,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":119,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":120,"author":{"gitId":"Kokseng1"},"content":" case \"find\": {","lastModifiedDate":"2023-09-06"},{"lineNumber":121,"author":{"gitId":"Kokseng1"},"content":" return Duke.TaskType.FIND;","lastModifiedDate":"2023-09-06"},{"lineNumber":122,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":123,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":124,"author":{"gitId":"Kokseng1"},"content":" default: {","lastModifiedDate":"2023-09-03"},{"lineNumber":125,"author":{"gitId":"Kokseng1"},"content":" throw new TaskParseException(\"Not a TaskType\");","lastModifiedDate":"2023-09-03"},{"lineNumber":126,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":127,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":128,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":129,"author":{"gitId":"Kokseng1"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"Kokseng1":129}},{"path":"src/main/java/mainDuke/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kokseng1"},"content":"package mainDuke;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"Kokseng1"},"content":"import java.io.File;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"Kokseng1"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"Kokseng1"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"Kokseng1"},"content":"import java.nio.file.Files;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"Kokseng1"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"Kokseng1"},"content":"import java.nio.file.Paths;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"Kokseng1"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Kokseng1"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Kokseng1"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"Kokseng1"},"content":"import mainDuke.exceptions.DukeException;","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"Kokseng1"},"content":"import mainDuke.task.Deadline;","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"Kokseng1"},"content":"import mainDuke.task.Event;","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"Kokseng1"},"content":"import mainDuke.task.Task;","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"Kokseng1"},"content":"import mainDuke.task.Todo;","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"Kokseng1"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"Kokseng1"},"content":" * Saves and loads tasks to hard drive in String form.","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"Kokseng1"},"content":"class Storage {","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"Kokseng1"},"content":" * Name of file and path which the data is to be stored.","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"Kokseng1"},"content":" static final String FILE_NAME \u003d \"./data/duke.txt\";","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"Kokseng1"},"content":" * Check if file that is to be written to and loaded from exists, if","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"Kokseng1"},"content":" * it does not, create one.","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"Kokseng1"},"content":" static void checkFileExists() {","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"Kokseng1"},"content":" Path path \u003d Paths.get(FILE_NAME);","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"Kokseng1"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"Kokseng1"},"content":" if (!Files.exists(path)) {","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"Kokseng1"},"content":" Ui.print(\"data file not found, creating a new one\");","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"Kokseng1"},"content":" Path dirPath \u003d Paths.get(\"./data\");","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"Kokseng1"},"content":" Files.createDirectories(dirPath);","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"Kokseng1"},"content":" File file \u003d new File(FILE_NAME);","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"Kokseng1"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"Kokseng1"},"content":" e.printStackTrace();","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"Kokseng1"},"content":" * Wipes file and save tasks given in param to hard drive.","lastModifiedDate":"2023-09-09"},{"lineNumber":48,"author":{"gitId":"Kokseng1"},"content":" * @param tasks ArrayList of tasks to be saved.","lastModifiedDate":"2023-09-09"},{"lineNumber":49,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"Kokseng1"},"content":" public static void saveTask(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"Kokseng1"},"content":" checkFileExists();","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"Kokseng1"},"content":" try (FileWriter fileWriter \u003d new FileWriter(FILE_NAME)) {","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"Kokseng1"},"content":" for (Task task : tasks) {","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"Kokseng1"},"content":" String text \u003d \"\";","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"Kokseng1"},"content":" if (task instanceof Todo) {","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"Kokseng1"},"content":" String done \u003d task.getisDone()","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"Kokseng1"},"content":" ? \"1\"","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"Kokseng1"},"content":" : \"0\";","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"Kokseng1"},"content":" String desc \u003d task.getDescription();","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"Kokseng1"},"content":" text \u003d \"T|\" + done + \"|\" + desc;","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"Kokseng1"},"content":" } else if (task instanceof Event) {","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"Kokseng1"},"content":" String done \u003d task.getisDone()","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"Kokseng1"},"content":" ? \"1\"","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"Kokseng1"},"content":" : \"0\";","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"Kokseng1"},"content":" String desc \u003d task.getDescription();","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"Kokseng1"},"content":" LocalDate from \u003d ((Event) task).getFrom();","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"Kokseng1"},"content":" LocalDate to \u003d ((Event) task).getTo();","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"Kokseng1"},"content":" text \u003d \"E|\" + done + \"|\" + desc + \"|\" + from + \"|\" + to;","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"Kokseng1"},"content":" } else if (task instanceof Deadline) {","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"Kokseng1"},"content":" String done \u003d task.getisDone()","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"Kokseng1"},"content":" ? \"1\"","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"Kokseng1"},"content":" : \"0\";","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"Kokseng1"},"content":" String desc \u003d task.getDescription();","lastModifiedDate":"2023-09-04"},{"lineNumber":74,"author":{"gitId":"Kokseng1"},"content":" LocalDate by \u003d ((Deadline) task).getBy();","lastModifiedDate":"2023-09-04"},{"lineNumber":75,"author":{"gitId":"Kokseng1"},"content":" text \u003d \"D|\" + done + \"|\" + desc + \"|\" + by;","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"Kokseng1"},"content":" fileWriter.write(text + \"\\n\");","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":79,"author":{"gitId":"Kokseng1"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":80,"author":{"gitId":"Kokseng1"},"content":" e.printStackTrace();","lastModifiedDate":"2023-08-28"},{"lineNumber":81,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":82,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":83,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":84,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":85,"author":{"gitId":"Kokseng1"},"content":" * Loads task from hard drive and returns it.","lastModifiedDate":"2023-09-09"},{"lineNumber":86,"author":{"gitId":"Kokseng1"},"content":" * @return ArrayList of tasks.","lastModifiedDate":"2023-09-09"},{"lineNumber":87,"author":{"gitId":"Kokseng1"},"content":" * @throws DukeException if there are no tasks in the hard drive.","lastModifiedDate":"2023-09-09"},{"lineNumber":88,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":89,"author":{"gitId":"Kokseng1"},"content":" public static ArrayList\u003cTask\u003e loadTasks() throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":90,"author":{"gitId":"Kokseng1"},"content":" checkFileExists();","lastModifiedDate":"2023-08-29"},{"lineNumber":91,"author":{"gitId":"Kokseng1"},"content":" ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-29"},{"lineNumber":92,"author":{"gitId":"Kokseng1"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":93,"author":{"gitId":"Kokseng1"},"content":" Scanner sc \u003d new Scanner(new File(FILE_NAME));","lastModifiedDate":"2023-09-03"},{"lineNumber":94,"author":{"gitId":"Kokseng1"},"content":" while (sc.hasNextLine()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":95,"author":{"gitId":"Kokseng1"},"content":" String next \u003d sc.nextLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":96,"author":{"gitId":"Kokseng1"},"content":" Task nextTask \u003d Task.parse(next);","lastModifiedDate":"2023-09-03"},{"lineNumber":97,"author":{"gitId":"Kokseng1"},"content":" tasks.add(nextTask);","lastModifiedDate":"2023-09-03"},{"lineNumber":98,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":99,"author":{"gitId":"Kokseng1"},"content":" return tasks;","lastModifiedDate":"2023-08-28"},{"lineNumber":100,"author":{"gitId":"Kokseng1"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":101,"author":{"gitId":"Kokseng1"},"content":" throw new DukeException(\"There are no tasks\");","lastModifiedDate":"2023-08-29"},{"lineNumber":102,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":103,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":104,"author":{"gitId":"Kokseng1"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"Kokseng1":104}},{"path":"src/main/java/mainDuke/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kokseng1"},"content":"package mainDuke;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"Kokseng1"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"Kokseng1"},"content":"import mainDuke.exceptions.DukeException;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"Kokseng1"},"content":"import mainDuke.task.Task;","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Kokseng1"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"Kokseng1"},"content":" * Contains the list of tasks, and provides methods to edit the list and interact with storage/hard drive.","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"Kokseng1"},"content":"public class TaskList {","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"Kokseng1"},"content":" * ArrayList of tasks.","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"Kokseng1"},"content":" private static ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"Kokseng1"},"content":" * Saves current tasks to hard drive.","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"Kokseng1"},"content":" public static void saveList() {","lastModifiedDate":"2023-09-08"},{"lineNumber":21,"author":{"gitId":"Kokseng1"},"content":" Storage.saveTask(tasks);","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"Kokseng1"},"content":" * Loads tasks from hard drive into tasks, prints a message if there","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"Kokseng1"},"content":" * are no tasks found.","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"Kokseng1"},"content":" public static void updateFromStorage() {","lastModifiedDate":"2023-09-08"},{"lineNumber":29,"author":{"gitId":"Kokseng1"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"Kokseng1"},"content":" tasks \u003d Storage.loadTasks();","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"Kokseng1"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"Kokseng1"},"content":" Ui.print(\"No tasks found in storage, starting new list\");","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"Kokseng1"},"content":" * Prints the list of task in their string format,","lastModifiedDate":"2023-09-09"},{"lineNumber":38,"author":{"gitId":"Kokseng1"},"content":" * each task starts on a new line.","lastModifiedDate":"2023-09-09"},{"lineNumber":39,"author":{"gitId":"Kokseng1"},"content":" * @throws DukeException if there are no tasks in the list.","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"Kokseng1"},"content":" public static String getListAsString() throws DukeException {","lastModifiedDate":"2023-09-08"},{"lineNumber":42,"author":{"gitId":"Kokseng1"},"content":" if (tasks.size() \u003d\u003d 0) {","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"Kokseng1"},"content":" throw new DukeException(\"There are no tasks yet\");","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":46,"author":{"gitId":"Kokseng1"},"content":" StringBuilder stringBuilder \u003d new StringBuilder();","lastModifiedDate":"2023-09-08"},{"lineNumber":47,"author":{"gitId":"Kokseng1"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-09-08"},{"lineNumber":48,"author":{"gitId":"Kokseng1"},"content":" String str \u003d (i + 1) + \".\" + tasks.get(i);","lastModifiedDate":"2023-09-08"},{"lineNumber":49,"author":{"gitId":"Kokseng1"},"content":" stringBuilder.append(str).append(\"\\n\");","lastModifiedDate":"2023-09-08"},{"lineNumber":50,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":51,"author":{"gitId":"Kokseng1"},"content":" return stringBuilder.toString();","lastModifiedDate":"2023-09-08"},{"lineNumber":52,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"Kokseng1"},"content":" * Add a task to the current list.","lastModifiedDate":"2023-09-09"},{"lineNumber":56,"author":{"gitId":"Kokseng1"},"content":" * @param task task to be added.","lastModifiedDate":"2023-09-09"},{"lineNumber":57,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"Kokseng1"},"content":" public static String addTask(Task task) {","lastModifiedDate":"2023-09-08"},{"lineNumber":59,"author":{"gitId":"Kokseng1"},"content":" tasks.add(task);","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"Kokseng1"},"content":" return (\"Got it. I\u0027ve added this task: \\n\" + task + \"\\nnow you have \"","lastModifiedDate":"2023-09-08"},{"lineNumber":61,"author":{"gitId":"Kokseng1"},"content":" + tasks.size() + \" tasks in the list\");","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"Kokseng1"},"content":" * Deletes a task from the list.","lastModifiedDate":"2023-09-09"},{"lineNumber":66,"author":{"gitId":"Kokseng1"},"content":" * @param i index of task which is to be deleted.","lastModifiedDate":"2023-09-09"},{"lineNumber":67,"author":{"gitId":"Kokseng1"},"content":" * @throws DukeException if index is out of range or there are no tasks to delete.","lastModifiedDate":"2023-09-09"},{"lineNumber":68,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":69,"author":{"gitId":"Kokseng1"},"content":" public static String deleteTask(int i) throws DukeException {","lastModifiedDate":"2023-09-08"},{"lineNumber":70,"author":{"gitId":"Kokseng1"},"content":" if (tasks.size() \u003c\u003d 0) {","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"Kokseng1"},"content":" throw new DukeException(\"There are no tasks to delete\");","lastModifiedDate":"2023-09-04"},{"lineNumber":72,"author":{"gitId":"Kokseng1"},"content":" } else if (tasks.size() \u003c i) {","lastModifiedDate":"2023-09-04"},{"lineNumber":73,"author":{"gitId":"Kokseng1"},"content":" throw new DukeException(\"Task.Task index out of range\");","lastModifiedDate":"2023-09-04"},{"lineNumber":74,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":75,"author":{"gitId":"Kokseng1"},"content":" Task deleted \u003d tasks.remove(i);","lastModifiedDate":"2023-09-04"},{"lineNumber":76,"author":{"gitId":"Kokseng1"},"content":" return (\"Noted. I\u0027ve removed this task:\\n\" + deleted + \"\\nNow you have \"","lastModifiedDate":"2023-09-08"},{"lineNumber":77,"author":{"gitId":"Kokseng1"},"content":" + tasks.size() + \" tasks in the list\");","lastModifiedDate":"2023-09-04"},{"lineNumber":78,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":79,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":80,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":81,"author":{"gitId":"Kokseng1"},"content":" * Marks a task at an index as done.","lastModifiedDate":"2023-09-09"},{"lineNumber":82,"author":{"gitId":"Kokseng1"},"content":" * @param i index of task to be marked as done.","lastModifiedDate":"2023-09-09"},{"lineNumber":83,"author":{"gitId":"Kokseng1"},"content":" * @throws DukeException if task is already done.","lastModifiedDate":"2023-09-09"},{"lineNumber":84,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":85,"author":{"gitId":"Kokseng1"},"content":" public static String markTask(int i) throws DukeException {","lastModifiedDate":"2023-09-08"},{"lineNumber":86,"author":{"gitId":"Kokseng1"},"content":" return tasks.get(i).mark();","lastModifiedDate":"2023-09-08"},{"lineNumber":87,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":88,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":89,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":90,"author":{"gitId":"Kokseng1"},"content":" * unmarks task at an index as undone","lastModifiedDate":"2023-09-04"},{"lineNumber":91,"author":{"gitId":"Kokseng1"},"content":" * @param i index of task which is to be marked undone","lastModifiedDate":"2023-09-04"},{"lineNumber":92,"author":{"gitId":"Kokseng1"},"content":" * @throws DukeException if task is still undone","lastModifiedDate":"2023-09-04"},{"lineNumber":93,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":94,"author":{"gitId":"Kokseng1"},"content":" public static String unmarkTask(int i) throws DukeException {","lastModifiedDate":"2023-09-08"},{"lineNumber":95,"author":{"gitId":"Kokseng1"},"content":" return tasks.get(i).unmark();","lastModifiedDate":"2023-09-08"},{"lineNumber":96,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":97,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":98,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":99,"author":{"gitId":"Kokseng1"},"content":" * getter for task from list","lastModifiedDate":"2023-09-05"},{"lineNumber":100,"author":{"gitId":"Kokseng1"},"content":" * @param i index of task to be gotten","lastModifiedDate":"2023-09-05"},{"lineNumber":101,"author":{"gitId":"Kokseng1"},"content":" * @return task at index i","lastModifiedDate":"2023-09-05"},{"lineNumber":102,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":103,"author":{"gitId":"Kokseng1"},"content":" public static Task getTask(int i) {","lastModifiedDate":"2023-09-08"},{"lineNumber":104,"author":{"gitId":"Kokseng1"},"content":" return tasks.get(i);","lastModifiedDate":"2023-09-05"},{"lineNumber":105,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":106,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":107,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":108,"author":{"gitId":"Kokseng1"},"content":" * find tasks containing a certain word","lastModifiedDate":"2023-09-06"},{"lineNumber":109,"author":{"gitId":"Kokseng1"},"content":" * @param word word to look for","lastModifiedDate":"2023-09-06"},{"lineNumber":110,"author":{"gitId":"Kokseng1"},"content":" * @return ArrayList of Tasks containing the word","lastModifiedDate":"2023-09-06"},{"lineNumber":111,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":112,"author":{"gitId":"Kokseng1"},"content":" public static ArrayList\u003cTask\u003e find(String word) {","lastModifiedDate":"2023-09-08"},{"lineNumber":113,"author":{"gitId":"Kokseng1"},"content":" String wordToFind \u003d word.split(\" \")[1];","lastModifiedDate":"2023-09-06"},{"lineNumber":114,"author":{"gitId":"Kokseng1"},"content":" ArrayList\u003cTask\u003e result \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-06"},{"lineNumber":115,"author":{"gitId":"Kokseng1"},"content":" for (Task task : tasks) {","lastModifiedDate":"2023-09-06"},{"lineNumber":116,"author":{"gitId":"Kokseng1"},"content":" if (task.getDescription().contains(wordToFind)) {","lastModifiedDate":"2023-09-06"},{"lineNumber":117,"author":{"gitId":"Kokseng1"},"content":" result.add(task);","lastModifiedDate":"2023-09-06"},{"lineNumber":118,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":119,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":120,"author":{"gitId":"Kokseng1"},"content":" return result;","lastModifiedDate":"2023-09-06"},{"lineNumber":121,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":122,"author":{"gitId":"Kokseng1"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"Kokseng1":122}},{"path":"src/main/java/mainDuke/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kokseng1"},"content":"package mainDuke;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"Kokseng1"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"Kokseng1"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"Kokseng1"},"content":"import mainDuke.exceptions.DukeException;","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"Kokseng1"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"Kokseng1"},"content":" * Responsible for printing messages and receiving commands.","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"Kokseng1"},"content":"public class Ui {","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"Kokseng1"},"content":" * Scanner to read input.","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"Kokseng1"},"content":" private static final Scanner SC \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"Kokseng1"},"content":" * Read and returns command.","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"Kokseng1"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"Kokseng1"},"content":" * @return String of user input.","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"Kokseng1"},"content":" public static String readCommand() {","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"Kokseng1"},"content":" return SC.nextLine();","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"Kokseng1"},"content":" * Prints a message to the user.","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"Kokseng1"},"content":" * @param message String message to be printed.","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"Kokseng1"},"content":" public static void print(String message) {","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"Kokseng1"},"content":" System.out.println(message);","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"Kokseng1"},"content":" * Greeting to be printed at start of program.","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"Kokseng1"},"content":" public static void printGreeting() {","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"Kokseng1"},"content":" String name \u003d \"Chaty\";","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"Kokseng1"},"content":" System.out.println(\"Hello! I\u0027m \" + name + \"\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"Kokseng1"},"content":" + \"What can I do for you?\" + \"\\n\\n\");","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":44,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-07"},{"lineNumber":45,"author":{"gitId":"Kokseng1"},"content":" * Prints an arraylist, a new line for each object in the list.","lastModifiedDate":"2023-09-09"},{"lineNumber":46,"author":{"gitId":"Kokseng1"},"content":" * @param list list of objects to be printed.","lastModifiedDate":"2023-09-09"},{"lineNumber":47,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":48,"author":{"gitId":"Kokseng1"},"content":" public static void printArrayList(ArrayList list) {","lastModifiedDate":"2023-09-06"},{"lineNumber":49,"author":{"gitId":"Kokseng1"},"content":" for (int i \u003d 0; i \u003c list.size(); i++) {","lastModifiedDate":"2023-09-06"},{"lineNumber":50,"author":{"gitId":"Kokseng1"},"content":" Ui.print((i + 1) + \".\" + list.get(i));","lastModifiedDate":"2023-09-06"},{"lineNumber":51,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":52,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":53,"author":{"gitId":"Kokseng1"},"content":" public static String getListAsString(ArrayList list) throws DukeException {","lastModifiedDate":"2023-09-08"},{"lineNumber":54,"author":{"gitId":"Kokseng1"},"content":" if (list.size() \u003d\u003d 0) {","lastModifiedDate":"2023-09-08"},{"lineNumber":55,"author":{"gitId":"Kokseng1"},"content":" throw new DukeException(\"There are no tasks yet\");","lastModifiedDate":"2023-09-08"},{"lineNumber":56,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":57,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":58,"author":{"gitId":"Kokseng1"},"content":" StringBuilder stringBuilder \u003d new StringBuilder();","lastModifiedDate":"2023-09-08"},{"lineNumber":59,"author":{"gitId":"Kokseng1"},"content":" for (Object obj : list) {","lastModifiedDate":"2023-09-08"},{"lineNumber":60,"author":{"gitId":"Kokseng1"},"content":" stringBuilder.append(obj.toString()).append(\"\\n\");","lastModifiedDate":"2023-09-08"},{"lineNumber":61,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":62,"author":{"gitId":"Kokseng1"},"content":" return stringBuilder.toString();","lastModifiedDate":"2023-09-08"},{"lineNumber":63,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":64,"author":{"gitId":"Kokseng1"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"Kokseng1":64}},{"path":"src/main/java/mainDuke/exceptions/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kokseng1"},"content":"package mainDuke.exceptions;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"Kokseng1"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"Kokseng1"},"content":" * Represents a Duke exclusive error, not including parsing between String and Task","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"Kokseng1"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Kokseng1"},"content":" * public onstructor, returns a \u003ccode\u003eDukeException\u003c/code\u003e instance","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"Kokseng1"},"content":" * @param message message that is to be displayed","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"Kokseng1"},"content":" public DukeException(String message) {","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"Kokseng1"},"content":" super(message);","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"Kokseng1"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"Kokseng1":14}},{"path":"src/main/java/mainDuke/exceptions/TaskParseException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kokseng1"},"content":"package mainDuke.exceptions;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"Kokseng1"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"Kokseng1"},"content":" * Represents a parsing error between String and Task","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"Kokseng1"},"content":"public class TaskParseException extends Exception {","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Kokseng1"},"content":" * public onstructor, returns a \u003ccode\u003eTaskParseException\u003c/code\u003e instance","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"Kokseng1"},"content":" * @param message message that is to be displayed","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"Kokseng1"},"content":" public TaskParseException(String message) {","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"Kokseng1"},"content":" super(message);","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"Kokseng1"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"Kokseng1":14}},{"path":"src/main/java/mainDuke/stageStuff/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kokseng1"},"content":"package mainDuke.stageStuff;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":3,"author":{"gitId":"Kokseng1"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"Kokseng1"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"Kokseng1"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"Kokseng1"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"Kokseng1"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"Kokseng1"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"Kokseng1"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"Kokseng1"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"Kokseng1"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"Kokseng1"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"Kokseng1"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"Kokseng1"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"Kokseng1"},"content":"/**","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"Kokseng1"},"content":" * An example of a custom control using FXML.","lastModifiedDate":"2023-09-08"},{"lineNumber":19,"author":{"gitId":"Kokseng1"},"content":" * This control represents a dialog box consisting of an ImageView to represent the speaker\u0027s face and a label","lastModifiedDate":"2023-09-08"},{"lineNumber":20,"author":{"gitId":"Kokseng1"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-08"},{"lineNumber":21,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":22,"author":{"gitId":"Kokseng1"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-08"},{"lineNumber":23,"author":{"gitId":"Kokseng1"},"content":" @FXML","lastModifiedDate":"2023-09-08"},{"lineNumber":24,"author":{"gitId":"Kokseng1"},"content":" private Label dialog;","lastModifiedDate":"2023-09-08"},{"lineNumber":25,"author":{"gitId":"Kokseng1"},"content":" @FXML","lastModifiedDate":"2023-09-08"},{"lineNumber":26,"author":{"gitId":"Kokseng1"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-08"},{"lineNumber":27,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":28,"author":{"gitId":"Kokseng1"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-08"},{"lineNumber":29,"author":{"gitId":"Kokseng1"},"content":" try {","lastModifiedDate":"2023-09-08"},{"lineNumber":30,"author":{"gitId":"Kokseng1"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"Kokseng1"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-08"},{"lineNumber":32,"author":{"gitId":"Kokseng1"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-08"},{"lineNumber":33,"author":{"gitId":"Kokseng1"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-08"},{"lineNumber":34,"author":{"gitId":"Kokseng1"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-08"},{"lineNumber":35,"author":{"gitId":"Kokseng1"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-08"},{"lineNumber":36,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":37,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":38,"author":{"gitId":"Kokseng1"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-08"},{"lineNumber":39,"author":{"gitId":"Kokseng1"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-08"},{"lineNumber":40,"author":{"gitId":"Kokseng1"},"content":" assert displayPicture !\u003d null : \"displayPicture should not be null\";","lastModifiedDate":"2023-09-09"},{"lineNumber":41,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":42,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":43,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":44,"author":{"gitId":"Kokseng1"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-08"},{"lineNumber":45,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":46,"author":{"gitId":"Kokseng1"},"content":" private void flip() {","lastModifiedDate":"2023-09-08"},{"lineNumber":47,"author":{"gitId":"Kokseng1"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-08"},{"lineNumber":48,"author":{"gitId":"Kokseng1"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-08"},{"lineNumber":49,"author":{"gitId":"Kokseng1"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-08"},{"lineNumber":50,"author":{"gitId":"Kokseng1"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-08"},{"lineNumber":51,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":52,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":53,"author":{"gitId":"Kokseng1"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-08"},{"lineNumber":54,"author":{"gitId":"Kokseng1"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-08"},{"lineNumber":55,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":56,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":57,"author":{"gitId":"Kokseng1"},"content":" public static DialogBox getDukeDialog(String text, Image img) {","lastModifiedDate":"2023-09-08"},{"lineNumber":58,"author":{"gitId":"Kokseng1"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-08"},{"lineNumber":59,"author":{"gitId":"Kokseng1"},"content":" db.flip();","lastModifiedDate":"2023-09-08"},{"lineNumber":60,"author":{"gitId":"Kokseng1"},"content":" return db;","lastModifiedDate":"2023-09-08"},{"lineNumber":61,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":62,"author":{"gitId":"Kokseng1"},"content":"}","lastModifiedDate":"2023-09-08"}],"authorContributionMap":{"Kokseng1":62}},{"path":"src/main/java/mainDuke/stageStuff/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kokseng1"},"content":"package mainDuke.stageStuff;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":3,"author":{"gitId":"Kokseng1"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"Kokseng1"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"Kokseng1"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"Kokseng1"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"Kokseng1"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"Kokseng1"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"Kokseng1"},"content":"import mainDuke.Duke;","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"Kokseng1"},"content":"/**","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"Kokseng1"},"content":" * A GUI for Duke using FXML.","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"Kokseng1"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"Kokseng1"},"content":" private Duke duke \u003d new Duke();","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":19,"author":{"gitId":"Kokseng1"},"content":" @Override","lastModifiedDate":"2023-09-08"},{"lineNumber":20,"author":{"gitId":"Kokseng1"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-08"},{"lineNumber":21,"author":{"gitId":"Kokseng1"},"content":" try {","lastModifiedDate":"2023-09-08"},{"lineNumber":22,"author":{"gitId":"Kokseng1"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-08"},{"lineNumber":23,"author":{"gitId":"Kokseng1"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-08"},{"lineNumber":24,"author":{"gitId":"Kokseng1"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-08"},{"lineNumber":25,"author":{"gitId":"Kokseng1"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-08"},{"lineNumber":26,"author":{"gitId":"Kokseng1"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setDuke(duke);","lastModifiedDate":"2023-09-08"},{"lineNumber":27,"author":{"gitId":"Kokseng1"},"content":" stage.show();","lastModifiedDate":"2023-09-08"},{"lineNumber":28,"author":{"gitId":"Kokseng1"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-08"},{"lineNumber":29,"author":{"gitId":"Kokseng1"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-08"},{"lineNumber":30,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":31,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":32,"author":{"gitId":"Kokseng1"},"content":"}","lastModifiedDate":"2023-09-08"},{"lineNumber":33,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-08"}],"authorContributionMap":{"Kokseng1":33}},{"path":"src/main/java/mainDuke/stageStuff/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kokseng1"},"content":"package mainDuke.stageStuff;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":3,"author":{"gitId":"Kokseng1"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"Kokseng1"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"Kokseng1"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"Kokseng1"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"Kokseng1"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"Kokseng1"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"Kokseng1"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"Kokseng1"},"content":"import mainDuke.Duke;","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"Kokseng1"},"content":"/**","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"Kokseng1"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"Kokseng1"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"Kokseng1"},"content":" @FXML","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"Kokseng1"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"Kokseng1"},"content":" @FXML","lastModifiedDate":"2023-09-08"},{"lineNumber":19,"author":{"gitId":"Kokseng1"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-08"},{"lineNumber":20,"author":{"gitId":"Kokseng1"},"content":" @FXML","lastModifiedDate":"2023-09-08"},{"lineNumber":21,"author":{"gitId":"Kokseng1"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-08"},{"lineNumber":22,"author":{"gitId":"Kokseng1"},"content":" @FXML","lastModifiedDate":"2023-09-08"},{"lineNumber":23,"author":{"gitId":"Kokseng1"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-08"},{"lineNumber":24,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":25,"author":{"gitId":"Kokseng1"},"content":" private Duke duke;","lastModifiedDate":"2023-09-08"},{"lineNumber":26,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":27,"author":{"gitId":"Kokseng1"},"content":" private Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaUser.png\"));","lastModifiedDate":"2023-09-08"},{"lineNumber":28,"author":{"gitId":"Kokseng1"},"content":" private Image dukeImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaDuke.png\"));","lastModifiedDate":"2023-09-08"},{"lineNumber":29,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":30,"author":{"gitId":"Kokseng1"},"content":" @FXML","lastModifiedDate":"2023-09-08"},{"lineNumber":31,"author":{"gitId":"Kokseng1"},"content":" public void initialize() {","lastModifiedDate":"2023-09-08"},{"lineNumber":32,"author":{"gitId":"Kokseng1"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-08"},{"lineNumber":33,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":34,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":35,"author":{"gitId":"Kokseng1"},"content":" public void setDuke(Duke d) {","lastModifiedDate":"2023-09-08"},{"lineNumber":36,"author":{"gitId":"Kokseng1"},"content":" duke \u003d d;","lastModifiedDate":"2023-09-08"},{"lineNumber":37,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":38,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":39,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-08"},{"lineNumber":40,"author":{"gitId":"Kokseng1"},"content":" * Creates two dialog boxes, one echoing user input and the other containing Duke\u0027s reply and then appends them to","lastModifiedDate":"2023-09-08"},{"lineNumber":41,"author":{"gitId":"Kokseng1"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-08"},{"lineNumber":42,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-08"},{"lineNumber":43,"author":{"gitId":"Kokseng1"},"content":" @FXML","lastModifiedDate":"2023-09-08"},{"lineNumber":44,"author":{"gitId":"Kokseng1"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-08"},{"lineNumber":45,"author":{"gitId":"Kokseng1"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-09"},{"lineNumber":46,"author":{"gitId":"Kokseng1"},"content":" String response \u003d duke.getResponse(input);","lastModifiedDate":"2023-09-09"},{"lineNumber":47,"author":{"gitId":"Kokseng1"},"content":" assert input !\u003d null : \"input should not be null\";","lastModifiedDate":"2023-09-09"},{"lineNumber":48,"author":{"gitId":"Kokseng1"},"content":" assert response !\u003d null : \"response should not be null\";","lastModifiedDate":"2023-09-09"},{"lineNumber":49,"author":{"gitId":"Kokseng1"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-08"},{"lineNumber":50,"author":{"gitId":"Kokseng1"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-09"},{"lineNumber":51,"author":{"gitId":"Kokseng1"},"content":" DialogBox.getDukeDialog(response, dukeImage)","lastModifiedDate":"2023-09-09"},{"lineNumber":52,"author":{"gitId":"Kokseng1"},"content":" );","lastModifiedDate":"2023-09-08"},{"lineNumber":53,"author":{"gitId":"Kokseng1"},"content":" userInput.clear();","lastModifiedDate":"2023-09-08"},{"lineNumber":54,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":55,"author":{"gitId":"Kokseng1"},"content":"}","lastModifiedDate":"2023-09-08"}],"authorContributionMap":{"Kokseng1":55}},{"path":"src/main/java/mainDuke/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kokseng1"},"content":"package mainDuke.task;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"Kokseng1"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"Kokseng1"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"Kokseng1"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"Kokseng1"},"content":"import mainDuke.exceptions.DukeException;","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"Kokseng1"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"Kokseng1"},"content":" * Represents a Task of Deadline type, has a \u003ccode\u003eby\u003c/code\u003e that indicates when the task should be done","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"Kokseng1"},"content":" * by. \u003ccode\u003eby\u003c/code\u003e is stored in \u003ccode\u003eLocalDate\u003c/code\u003e format.","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"Kokseng1"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"Kokseng1"},"content":" * Indicates when the task should be done.","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"Kokseng1"},"content":" private final LocalDate by;","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"Kokseng1"},"content":" private final DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"dd MMMM yyyy\");","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"Kokseng1"},"content":" * Constructor, returns a \u003ccode\u003eDeadline\u003c/code\u003e instance.","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"Kokseng1"},"content":" * @param done whether the task is done or not","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"Kokseng1"},"content":" * @param desc description or name of the task, and when the task must be done by, in","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"Kokseng1"},"content":" * \"YYYY-MM-DD\" format","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"Kokseng1"},"content":" * @throws DukeException error if incorrect format is used for by date and is unable to be parsed","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"Kokseng1"},"content":" public Deadline(boolean done, String desc) throws DukeException {","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"Kokseng1"},"content":" super(done, desc.substring(9, desc.indexOf(\"/by\")));","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"Kokseng1"},"content":" String byString \u003d desc.substring(desc.indexOf(\"/by\") + 4).replace(\" \", \"\");","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"Kokseng1"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"Kokseng1"},"content":" this.by \u003d LocalDate.parse(byString);","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"Kokseng1"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"Kokseng1"},"content":" throw new DukeException(\"Incorrect date format! Use eg.2019-12-02\");","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"Kokseng1"},"content":" * Getter for \u003ccode\u003eby\u003c/code\u003e.","lastModifiedDate":"2023-09-09"},{"lineNumber":39,"author":{"gitId":"Kokseng1"},"content":" * @return LocalDate by","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"Kokseng1"},"content":" public LocalDate getBy() {","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"Kokseng1"},"content":" return this.by;","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"Kokseng1"},"content":" * String representation of Deadline, including task type, if task is done, by date and task name.","lastModifiedDate":"2023-09-09"},{"lineNumber":47,"author":{"gitId":"Kokseng1"},"content":" * @return String representation of Deadline","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"Kokseng1"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"Kokseng1"},"content":" public String toString() {","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"Kokseng1"},"content":" return \"[D]\" + super.toString() + \"(by: \" + this.by.format(formatter) + \")\";","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"Kokseng1"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"Kokseng1":53}},{"path":"src/main/java/mainDuke/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kokseng1"},"content":"package mainDuke.task;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"Kokseng1"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"Kokseng1"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"Kokseng1"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"Kokseng1"},"content":"import mainDuke.exceptions.DukeException;","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"Kokseng1"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"Kokseng1"},"content":" * Represents a Task of Event type, has a \u003ccode\u003eto\u003c/code\u003e and \u003ccode\u003efrom\u003c/code\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"Kokseng1"},"content":" * \u003ccode\u003eto\u003c/code\u003e and \u003ccode\u003efrom\u003c/code\u003e is stored in \u003ccode\u003eLocalDate\u003c/code\u003e format.","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"Kokseng1"},"content":"public class Event extends Task {","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"Kokseng1"},"content":" * When the event starts.","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"Kokseng1"},"content":" private final LocalDate from;","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"Kokseng1"},"content":" * When the event ends.","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"Kokseng1"},"content":" private final LocalDate to;","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"Kokseng1"},"content":" private final DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"dd MMMM yyyy\");","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"Kokseng1"},"content":" * Constructor for Event, returns an Event.","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"Kokseng1"},"content":" * @param done whether the event is done or over.","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"Kokseng1"},"content":" * @param desc name of the event, when is it from, indicated by /from and when is it to","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"Kokseng1"},"content":" * , indicated by \u003ccode\u003eto\u003c/code\u003e. Both must be in YYYY-MM-DD format.","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"Kokseng1"},"content":" * @throws DukeException throws an error if the date is unable to be parsed, likely due","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"Kokseng1"},"content":" * to wrong format.","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"Kokseng1"},"content":" public Event(boolean done, String desc) throws DukeException {","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"Kokseng1"},"content":" super(done, desc.substring(6, desc.indexOf(\"/from\")));","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"Kokseng1"},"content":" int fromIndex \u003d desc.indexOf(\"/from\");","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"Kokseng1"},"content":" int toIndex \u003d desc.indexOf(\"/to\");","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"Kokseng1"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"Kokseng1"},"content":" String fromString \u003d desc.substring(fromIndex + 6, toIndex).replace(\" \", \"\");","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"Kokseng1"},"content":" String toString \u003d desc.substring(toIndex + 4).replace(\" \", \"\");","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"Kokseng1"},"content":" this.from \u003d LocalDate.parse(fromString);","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"Kokseng1"},"content":" this.to \u003d LocalDate.parse(toString);","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"Kokseng1"},"content":" } catch (StringIndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"Kokseng1"},"content":" throw new DukeException(\"You didn\u0027t enter the event in the correct format!\");","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"Kokseng1"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"Kokseng1"},"content":" throw new DukeException(\"Incorrect date format! Use eg.2019-12-02\");","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"Kokseng1"},"content":" * Getter for from date.","lastModifiedDate":"2023-09-09"},{"lineNumber":52,"author":{"gitId":"Kokseng1"},"content":" * @return LocalDate from.","lastModifiedDate":"2023-09-09"},{"lineNumber":53,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"Kokseng1"},"content":" public LocalDate getFrom() {","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"Kokseng1"},"content":" return this.from;","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"Kokseng1"},"content":" * Getter for to date.","lastModifiedDate":"2023-09-09"},{"lineNumber":59,"author":{"gitId":"Kokseng1"},"content":" * @return LocalDate to.","lastModifiedDate":"2023-09-09"},{"lineNumber":60,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"Kokseng1"},"content":" public LocalDate getTo() {","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"Kokseng1"},"content":" return this.to;","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"Kokseng1"},"content":" * String representation of Event, including task type, if task is done, from and to date, and task name.","lastModifiedDate":"2023-09-09"},{"lineNumber":66,"author":{"gitId":"Kokseng1"},"content":" * @return String representation of Deadline.","lastModifiedDate":"2023-09-09"},{"lineNumber":67,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"Kokseng1"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":69,"author":{"gitId":"Kokseng1"},"content":" public String toString() {","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"Kokseng1"},"content":" return \"[E]\" + super.toString() + \"(from: \" + this.from.format(formatter)","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"Kokseng1"},"content":" + \" to: \" + this.to.format(formatter) + \")\";","lastModifiedDate":"2023-09-04"},{"lineNumber":72,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":73,"author":{"gitId":"Kokseng1"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"Kokseng1":73}},{"path":"src/main/java/mainDuke/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kokseng1"},"content":"package mainDuke.task;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"Kokseng1"},"content":"import mainDuke.exceptions.DukeException;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"Kokseng1"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"Kokseng1"},"content":" * Represents a Task, a supertype of Event, Deadline and Todo.","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"Kokseng1"},"content":" * \u003ccode\u003eisDone\u003c/code\u003e shows whether the task is completed","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"Kokseng1"},"content":"public abstract class Task {","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"Kokseng1"},"content":" * Name of task","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"Kokseng1"},"content":" private final String description;","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"Kokseng1"},"content":" * Whether the task is done.","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"Kokseng1"},"content":" private boolean isDone;","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"Kokseng1"},"content":" * Constructor, should not be used because this is an abstract class. For initialising description","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"Kokseng1"},"content":" * and isDone only.","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"Kokseng1"},"content":" * @param done whether the task is done.","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"Kokseng1"},"content":" * @param description name of task.","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"Kokseng1"},"content":" public Task(boolean done, String description) {","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"Kokseng1"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"Kokseng1"},"content":" this.isDone \u003d done;","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"Kokseng1"},"content":" * Getter for boolean isDone.","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"Kokseng1"},"content":" * @return boolean isDone.","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"Kokseng1"},"content":" public boolean getisDone() {","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"Kokseng1"},"content":" return this.isDone;","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"Kokseng1"},"content":" * Getter for descriptions","lastModifiedDate":"2023-09-09"},{"lineNumber":39,"author":{"gitId":"Kokseng1"},"content":" * @return","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"Kokseng1"},"content":" public String getDescription() {","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"Kokseng1"},"content":" return this.description;","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"Kokseng1"},"content":" * Marks the task as done, if it is undone.","lastModifiedDate":"2023-09-09"},{"lineNumber":47,"author":{"gitId":"Kokseng1"},"content":" * @throws DukeException if task is already done.","lastModifiedDate":"2023-09-09"},{"lineNumber":48,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"Kokseng1"},"content":" public String mark() throws DukeException {","lastModifiedDate":"2023-09-08"},{"lineNumber":50,"author":{"gitId":"Kokseng1"},"content":" if (this.isDone) {","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"Kokseng1"},"content":" throw new DukeException(\"Task already done\");","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"Kokseng1"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"Kokseng1"},"content":" return (\"Nice! I\u0027ve marked this task as done:\\n\" + toString());","lastModifiedDate":"2023-09-08"},{"lineNumber":55,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"Kokseng1"},"content":" * Unmarks the task as undone, if it is done.","lastModifiedDate":"2023-09-09"},{"lineNumber":59,"author":{"gitId":"Kokseng1"},"content":" * @throws DukeException if task is still undone.","lastModifiedDate":"2023-09-09"},{"lineNumber":60,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"Kokseng1"},"content":" public String unmark() throws DukeException {","lastModifiedDate":"2023-09-08"},{"lineNumber":62,"author":{"gitId":"Kokseng1"},"content":" if (!this.isDone) {","lastModifiedDate":"2023-08-28"},{"lineNumber":63,"author":{"gitId":"Kokseng1"},"content":" throw new DukeException(\"Task still undone\");","lastModifiedDate":"2023-08-28"},{"lineNumber":64,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":65,"author":{"gitId":"Kokseng1"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-28"},{"lineNumber":66,"author":{"gitId":"Kokseng1"},"content":" return \"OK, I\u0027ve marked this task as not done yet:\\n\" + toString();","lastModifiedDate":"2023-09-08"},{"lineNumber":67,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":68,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":69,"author":{"gitId":"Kokseng1"},"content":" * Get String representation of whether the task is done.","lastModifiedDate":"2023-09-09"},{"lineNumber":70,"author":{"gitId":"Kokseng1"},"content":" * @return \u003ccode\u003e\"X\"\u003c/code\u003e for done, \" \" for undone.","lastModifiedDate":"2023-09-09"},{"lineNumber":71,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":72,"author":{"gitId":"Kokseng1"},"content":" private String getStatusIcon() {","lastModifiedDate":"2023-08-28"},{"lineNumber":73,"author":{"gitId":"Kokseng1"},"content":" return (isDone ? \"X\" : \" \"); // mark done task with X","lastModifiedDate":"2023-08-28"},{"lineNumber":74,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":75,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":76,"author":{"gitId":"Kokseng1"},"content":" * String representation of task, including whether the task is done.","lastModifiedDate":"2023-09-09"},{"lineNumber":77,"author":{"gitId":"Kokseng1"},"content":" * @return string representation of task.","lastModifiedDate":"2023-09-09"},{"lineNumber":78,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":79,"author":{"gitId":"Kokseng1"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":80,"author":{"gitId":"Kokseng1"},"content":" public String toString() {","lastModifiedDate":"2023-08-28"},{"lineNumber":81,"author":{"gitId":"Kokseng1"},"content":" return (\"[\" + this.getStatusIcon() + \"] \" + this.description);","lastModifiedDate":"2023-08-28"},{"lineNumber":82,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":83,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":84,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":85,"author":{"gitId":"Kokseng1"},"content":" * Converts hard drive\u0027s String format of a task into an actual task item.","lastModifiedDate":"2023-09-09"},{"lineNumber":86,"author":{"gitId":"Kokseng1"},"content":" * @param text String from hard drive.","lastModifiedDate":"2023-09-09"},{"lineNumber":87,"author":{"gitId":"Kokseng1"},"content":" * @return task item.","lastModifiedDate":"2023-09-09"},{"lineNumber":88,"author":{"gitId":"Kokseng1"},"content":" * @throws DukeException if string cannot be recognised and cannot be parsed into a task.","lastModifiedDate":"2023-09-09"},{"lineNumber":89,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":90,"author":{"gitId":"Kokseng1"},"content":" public static Task parse(String text) throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":91,"author":{"gitId":"Kokseng1"},"content":" String[] parts \u003d text.split(\"\\\\|\");","lastModifiedDate":"2023-08-29"},{"lineNumber":92,"author":{"gitId":"Kokseng1"},"content":" String first \u003d parts[0];","lastModifiedDate":"2023-08-29"},{"lineNumber":93,"author":{"gitId":"Kokseng1"},"content":" Task task;","lastModifiedDate":"2023-09-03"},{"lineNumber":94,"author":{"gitId":"Kokseng1"},"content":" assert parts[1].equals(\"1\") | parts[1].equals(\"0\") : \"isDone indicator should be either\"","lastModifiedDate":"2023-09-09"},{"lineNumber":95,"author":{"gitId":"Kokseng1"},"content":" + \"1 or 0\";","lastModifiedDate":"2023-09-09"},{"lineNumber":96,"author":{"gitId":"Kokseng1"},"content":" boolean done \u003d parts[1].equals(\"1\"); // 1 \u003d done, 0 \u003d undone","lastModifiedDate":"2023-09-03"},{"lineNumber":97,"author":{"gitId":"Kokseng1"},"content":" String description \u003d parts[2];","lastModifiedDate":"2023-08-29"},{"lineNumber":98,"author":{"gitId":"Kokseng1"},"content":" switch (first) {","lastModifiedDate":"2023-08-29"},{"lineNumber":99,"author":{"gitId":"Kokseng1"},"content":" case \"T\":","lastModifiedDate":"2023-08-29"},{"lineNumber":100,"author":{"gitId":"Kokseng1"},"content":" task \u003d new Todo(done, \"todo \" + description);","lastModifiedDate":"2023-08-29"},{"lineNumber":101,"author":{"gitId":"Kokseng1"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":102,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":103,"author":{"gitId":"Kokseng1"},"content":" case \"E\":","lastModifiedDate":"2023-08-29"},{"lineNumber":104,"author":{"gitId":"Kokseng1"},"content":" String from \u003d parts[3];","lastModifiedDate":"2023-08-29"},{"lineNumber":105,"author":{"gitId":"Kokseng1"},"content":" String to \u003d parts[4];","lastModifiedDate":"2023-08-29"},{"lineNumber":106,"author":{"gitId":"Kokseng1"},"content":" task \u003d new Event(done, \"event \" + description + \" /from \" + from + \" /to \" + to);","lastModifiedDate":"2023-08-29"},{"lineNumber":107,"author":{"gitId":"Kokseng1"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":108,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":109,"author":{"gitId":"Kokseng1"},"content":" case \"D\":","lastModifiedDate":"2023-08-29"},{"lineNumber":110,"author":{"gitId":"Kokseng1"},"content":" String by \u003d parts[3];","lastModifiedDate":"2023-08-29"},{"lineNumber":111,"author":{"gitId":"Kokseng1"},"content":" task \u003d new Deadline(done, \"deadline \" + description + \" /by \" + by);","lastModifiedDate":"2023-08-29"},{"lineNumber":112,"author":{"gitId":"Kokseng1"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":113,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":114,"author":{"gitId":"Kokseng1"},"content":" default:","lastModifiedDate":"2023-09-03"},{"lineNumber":115,"author":{"gitId":"Kokseng1"},"content":" throw new DukeException(\"Unable to parse from hard drive\");","lastModifiedDate":"2023-09-03"},{"lineNumber":116,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":117,"author":{"gitId":"Kokseng1"},"content":" return task;","lastModifiedDate":"2023-08-29"},{"lineNumber":118,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":119,"author":{"gitId":"Kokseng1"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"Kokseng1":119}},{"path":"src/main/java/mainDuke/task/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kokseng1"},"content":"package mainDuke.task;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"Kokseng1"},"content":"import mainDuke.exceptions.DukeException;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"Kokseng1"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"Kokseng1"},"content":" * Represents a task of Todo type.","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Kokseng1"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"Kokseng1"},"content":" * constructor, returns a todo instance.","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"Kokseng1"},"content":" * @param done whether the task is done.","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"Kokseng1"},"content":" * @param desc name of the task.","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"Kokseng1"},"content":" * @throws DukeException if the user left the task field empty.","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"Kokseng1"},"content":" public Todo(boolean done, String desc) throws DukeException {","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"Kokseng1"},"content":" super(done, desc.substring(5));","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"Kokseng1"},"content":" if (desc.substring(5).isEmpty()) {","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"Kokseng1"},"content":" throw new DukeException(\"You forgot to enter the task!\");","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"Kokseng1"},"content":" * String representation of item, including indication of tasktype (todo).","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"Kokseng1"},"content":" * @return string representation of todo.","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"Kokseng1"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"Kokseng1"},"content":" public String toString() {","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"Kokseng1"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"Kokseng1"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"Kokseng1":30}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"Kokseng1"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":3,"author":{"gitId":"Kokseng1"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"Kokseng1"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"Kokseng1"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"Kokseng1"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"Kokseng1"},"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-08"},{"lineNumber":9,"author":{"gitId":"Kokseng1"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":10,"author":{"gitId":"Kokseng1"},"content":" \u003cLabel fx:id\u003d\"dialog\" text\u003d\"Label\" wrapText\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"Kokseng1"},"content":" \u003cImageView fx:id\u003d\"displayPicture\" fitHeight\u003d\"99.0\" fitWidth\u003d\"99.0\" pickOnBounds\u003d\"true\" preserveRatio\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"Kokseng1"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"Kokseng1"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":14,"author":{"gitId":"Kokseng1"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"Kokseng1"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"Kokseng1"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-08"}],"authorContributionMap":{"Kokseng1":17}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"Kokseng1"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":2,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":3,"author":{"gitId":"Kokseng1"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":4,"author":{"gitId":"Kokseng1"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":5,"author":{"gitId":"Kokseng1"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":6,"author":{"gitId":"Kokseng1"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":7,"author":{"gitId":"Kokseng1"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":8,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":9,"author":{"gitId":"Kokseng1"},"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\"mainDuke.stageStuff.MainWindow\"\u003e","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"Kokseng1"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":11,"author":{"gitId":"Kokseng1"},"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\" /\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":12,"author":{"gitId":"Kokseng1"},"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\" /\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":13,"author":{"gitId":"Kokseng1"},"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-08"},{"lineNumber":14,"author":{"gitId":"Kokseng1"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":15,"author":{"gitId":"Kokseng1"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"552.0\" prefWidth\u003d\"388.0\" /\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":16,"author":{"gitId":"Kokseng1"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":17,"author":{"gitId":"Kokseng1"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":18,"author":{"gitId":"Kokseng1"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-08"},{"lineNumber":19,"author":{"gitId":"Kokseng1"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-08"}],"authorContributionMap":{"Kokseng1":19}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"Kokseng1"},"content":"todo read book","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"Kokseng1"},"content":"todo","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"Kokseng1"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"Kokseng1"},"content":"deadline return book /by Sunday","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"Kokseng1"},"content":"deadline return book /by 2019-12-02","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"Kokseng1"},"content":"deadline return book","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"Kokseng1"},"content":"event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"Kokseng1"},"content":"event project meeting /from 2019-12-02 /to 2019-12-03","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Kokseng1"},"content":"list","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"Kokseng1"},"content":"mark 2","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"Kokseng1"},"content":"mark 2","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"Kokseng1"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"Kokseng1"},"content":"delete 3","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"Kokseng1"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"Kokseng1"},"content":"bye","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"Kokseng1":15}},{"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":"Kokseng1"},"content":"del ACTUAL.TXT","lastModifiedDate":"2023-08-28"},{"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":"Kokseng1"},"content":"javac -cp ..\\src\\main\\java -Xlint:none -d ..\\bin ..\\src\\main\\java*.java","lastModifiedDate":"2023-09-04"},{"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":"-"},"content":"java -classpath ..\\bin Duke \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"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":{"Kokseng1":2,"-":19}}] diff --git a/Kokseng1_ip_master/commits.json b/Kokseng1_ip_master/commits.json index cb498d6a..0d02c268 100644 --- a/Kokseng1_ip_master/commits.json +++ b/Kokseng1_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"Kokseng1":[{"date":"2023-08-23","commitResults":[{"hash":"5437d9a251d312b0c589135871c0925aad4ed482","isMergeCommit":false,"messageTitle":"lvl0","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":6}}},{"hash":"5e8695955e97d167b6ad020761fd92a88503a944","isMergeCommit":false,"messageTitle":"lvl1","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":2}}},{"hash":"5e7db755627af945303b5a36167afa5402cac3f8","isMergeCommit":false,"messageTitle":"lvl2","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":5}}},{"hash":"e6ea6dc8966cda93d1c27acea70d7e3a4296c4e0","isMergeCommit":false,"messageTitle":"lvl3","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":41,"deletions":4}}},{"hash":"b8beb55918337818df99ebb1c29c19480a822b7b","isMergeCommit":false,"messageTitle":"lvl4","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":54,"deletions":4}}},{"hash":"83b988fb28add0a26169e11c33267a66fe644c11","isMergeCommit":false,"messageTitle":"A-TextUiTesting","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":10,"deletions":0}}},{"hash":"ef2a2e6dbb28c8ac310224790069914f7c80748d","isMergeCommit":false,"messageTitle":"A-TextUiTesting","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":40,"deletions":5}}}]},{"date":"2023-08-24","commitResults":[{"hash":"3ee355ea6900f7dbd9e475a6393ff08c54f3b186","isMergeCommit":false,"messageTitle":"lvl6","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"txt":{"insertions":8,"deletions":0},"java":{"insertions":33,"deletions":24}}}]},{"date":"2023-08-28","commitResults":[{"hash":"2bc16fc54b63c437edbe68306a3217788a995eaa","isMergeCommit":false,"messageTitle":"add taskfile","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":174,"deletions":134},"bat":{"insertions":2,"deletions":2}}}]},{"date":"2023-08-29","commitResults":[{"hash":"8b1fd67baa65d3eb7421d9c5d16126331a3af11a","isMergeCommit":false,"messageTitle":"lvl 7","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"java":{"insertions":96,"deletions":24}}},{"hash":"07c02e8afd9cda034bcf72489f7b785cdd91b6f7","isMergeCommit":false,"messageTitle":"change if else statement to switch in Duke","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":73,"deletions":58}}},{"hash":"e199ebc6ec21b2b212ff5631c16d22b49917c780","isMergeCommit":false,"messageTitle":"lvl 8","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":42,"deletions":18}}}]},{"date":"2023-09-03","commitResults":[{"hash":"0a721863d7afb1018a6870f03021a1a8fd4f6cb8","isMergeCommit":false,"messageTitle":"A-MoreOOP","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":10},"java":{"insertions":272,"deletions":130}}}]},{"date":"2023-09-04","commitResults":[{"hash":"9cab895397e0a23e34a0f01843414cbd2ef313cd","isMergeCommit":false,"messageTitle":"A-Packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":457,"deletions":149},"bat":{"insertions":1,"deletions":1}}},{"hash":"bece3551aa2dc04b47d52e5ffd7be5f06b335361","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/add-gradle-support\u0027 into branch-A-Gradle","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"47d8d2d4804d7abc96657add5f6460ff611d3877","isMergeCommit":false,"messageTitle":"A-Gradle","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":0}}}]},{"date":"2023-09-05","commitResults":[{"hash":"d1725d6ac2f1b885d0f2432423a6c4b5547da4a2","isMergeCommit":false,"messageTitle":"A-JUnit","messageBody":"","tags":["A-JavaDoc","A-Jar","A-JUnit","A-CodingStandard"],"fileTypesAndContributionMap":{"gradle":{"insertions":3,"deletions":1},"java":{"insertions":62,"deletions":0}}}]},{"date":"2023-09-06","commitResults":[{"hash":"eb2d8449c97ac45097e4b09eb66244646d960867","isMergeCommit":false,"messageTitle":"Level-9","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"java":{"insertions":46,"deletions":4}}}]},{"date":"2023-09-07","commitResults":[{"hash":"da06974cfe555be812da61c94bf256c2a072b1b2","isMergeCommit":false,"messageTitle":"A-CheckStyle","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":12}}}]},{"date":"2023-09-08","commitResults":[{"hash":"a26bde3e7bfef3399cbeaa56cf3a6afd1686ff81","isMergeCommit":false,"messageTitle":"Level-10","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{"gradle":{"insertions":18,"deletions":0},"fxml":{"insertions":36,"deletions":0},"java":{"insertions":415,"deletions":87}}}]}]},"authorFileTypeContributionMap":{"Kokseng1":{"java":1189,"md":0,"fxml":36,"sh":0,"bat":2,"gradle":22,"txt":15}},"authorContributionVariance":{"Kokseng1":35935.082},"authorDisplayNameMap":{"Kokseng1":"CS2103T-W13-1 NG K..SENG"}} +{"authorDailyContributionsMap":{"Kokseng1":[{"date":"2023-08-23","commitResults":[{"hash":"5437d9a251d312b0c589135871c0925aad4ed482","isMergeCommit":false,"messageTitle":"lvl0","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":6}}},{"hash":"5e8695955e97d167b6ad020761fd92a88503a944","isMergeCommit":false,"messageTitle":"lvl1","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":2}}},{"hash":"5e7db755627af945303b5a36167afa5402cac3f8","isMergeCommit":false,"messageTitle":"lvl2","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":5}}},{"hash":"e6ea6dc8966cda93d1c27acea70d7e3a4296c4e0","isMergeCommit":false,"messageTitle":"lvl3","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":41,"deletions":4}}},{"hash":"b8beb55918337818df99ebb1c29c19480a822b7b","isMergeCommit":false,"messageTitle":"lvl4","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":54,"deletions":4}}},{"hash":"83b988fb28add0a26169e11c33267a66fe644c11","isMergeCommit":false,"messageTitle":"A-TextUiTesting","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":10,"deletions":0}}},{"hash":"ef2a2e6dbb28c8ac310224790069914f7c80748d","isMergeCommit":false,"messageTitle":"A-TextUiTesting","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":40,"deletions":5}}}]},{"date":"2023-08-24","commitResults":[{"hash":"3ee355ea6900f7dbd9e475a6393ff08c54f3b186","isMergeCommit":false,"messageTitle":"lvl6","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"txt":{"insertions":8,"deletions":0},"java":{"insertions":33,"deletions":24}}}]},{"date":"2023-08-28","commitResults":[{"hash":"2bc16fc54b63c437edbe68306a3217788a995eaa","isMergeCommit":false,"messageTitle":"add taskfile","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":174,"deletions":134},"bat":{"insertions":2,"deletions":2}}}]},{"date":"2023-08-29","commitResults":[{"hash":"8b1fd67baa65d3eb7421d9c5d16126331a3af11a","isMergeCommit":false,"messageTitle":"lvl 7","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"java":{"insertions":96,"deletions":24}}},{"hash":"07c02e8afd9cda034bcf72489f7b785cdd91b6f7","isMergeCommit":false,"messageTitle":"change if else statement to switch in Duke","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":73,"deletions":58}}},{"hash":"e199ebc6ec21b2b212ff5631c16d22b49917c780","isMergeCommit":false,"messageTitle":"lvl 8","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":42,"deletions":18}}}]},{"date":"2023-09-03","commitResults":[{"hash":"0a721863d7afb1018a6870f03021a1a8fd4f6cb8","isMergeCommit":false,"messageTitle":"A-MoreOOP","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":10},"java":{"insertions":272,"deletions":130}}}]},{"date":"2023-09-04","commitResults":[{"hash":"9cab895397e0a23e34a0f01843414cbd2ef313cd","isMergeCommit":false,"messageTitle":"A-Packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":457,"deletions":149},"bat":{"insertions":1,"deletions":1}}},{"hash":"bece3551aa2dc04b47d52e5ffd7be5f06b335361","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/add-gradle-support\u0027 into branch-A-Gradle","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"47d8d2d4804d7abc96657add5f6460ff611d3877","isMergeCommit":false,"messageTitle":"A-Gradle","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":0}}}]},{"date":"2023-09-05","commitResults":[{"hash":"d1725d6ac2f1b885d0f2432423a6c4b5547da4a2","isMergeCommit":false,"messageTitle":"A-JUnit","messageBody":"","tags":["A-JavaDoc","A-Jar","A-JUnit","A-CodingStandard"],"fileTypesAndContributionMap":{"gradle":{"insertions":3,"deletions":1},"java":{"insertions":62,"deletions":0}}}]},{"date":"2023-09-06","commitResults":[{"hash":"eb2d8449c97ac45097e4b09eb66244646d960867","isMergeCommit":false,"messageTitle":"Level-9","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"java":{"insertions":46,"deletions":4}}}]},{"date":"2023-09-07","commitResults":[{"hash":"da06974cfe555be812da61c94bf256c2a072b1b2","isMergeCommit":false,"messageTitle":"A-CheckStyle","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":12}}}]},{"date":"2023-09-08","commitResults":[{"hash":"a26bde3e7bfef3399cbeaa56cf3a6afd1686ff81","isMergeCommit":false,"messageTitle":"Level-10","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{"gradle":{"insertions":18,"deletions":0},"fxml":{"insertions":36,"deletions":0},"java":{"insertions":415,"deletions":87}}}]},{"date":"2023-09-09","commitResults":[{"hash":"1a148ab36595bd5b6f27754dd351314210a1982c","isMergeCommit":false,"messageTitle":"A-Assertions","messageBody":"","tags":["A-Assertions"],"fileTypesAndContributionMap":{"gradle":{"insertions":7,"deletions":2},"fxml":{"insertions":1,"deletions":1},"java":{"insertions":158,"deletions":221}}},{"hash":"5241665998dd5c7eb158a6c31a396965b5a0f417","isMergeCommit":false,"messageTitle":"A-CodeQuality","messageBody":"","tags":["A-CodeQuality"],"fileTypesAndContributionMap":{"fxml":{"insertions":1,"deletions":1},"java":{"insertions":8,"deletions":8}}}]}]},"authorFileTypeContributionMap":{"Kokseng1":{"java":1126,"md":0,"fxml":36,"sh":0,"bat":2,"gradle":27,"txt":15}},"authorContributionVariance":{"Kokseng1":37851.613},"authorDisplayNameMap":{"Kokseng1":"CS2103T-W13-1 NG K..SENG"}} diff --git a/LuahJunYang_ip_master/authorship.json b/LuahJunYang_ip_master/authorship.json index ba900a7c..0c2ad606 100644 --- a/LuahJunYang_ip_master/authorship.json +++ b/LuahJunYang_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"src/main/java/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LuahJunYang"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"LuahJunYang"},"content":" String deadline;","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"LuahJunYang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"LuahJunYang"},"content":" //Constructor","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"LuahJunYang"},"content":" public Deadline(String name, String deadline) {","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"LuahJunYang"},"content":" super(name);","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"LuahJunYang"},"content":" this.isCompleted \u003d false;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"LuahJunYang"},"content":" this.deadline \u003d deadline;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"LuahJunYang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"LuahJunYang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"LuahJunYang"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"LuahJunYang"},"content":" public String toString() {","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"LuahJunYang"},"content":" return \"[D]\" + super.toString() + \"(\" + this.deadline + \")\";","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"LuahJunYang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"LuahJunYang"},"content":"}","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"LuahJunYang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"LuahJunYang"},"content":"","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"LuahJunYang":17}},{"path":"src/main/java/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LuahJunYang"},"content":"public class Event extends Task{","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"LuahJunYang"},"content":" String startTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"LuahJunYang"},"content":" String endTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"LuahJunYang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"LuahJunYang"},"content":" public Event(String name, String startTime, String endTime) {","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"LuahJunYang"},"content":" this.task_name \u003d name;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"LuahJunYang"},"content":" this.startTime \u003d startTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"LuahJunYang"},"content":" this.endTime \u003d endTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"LuahJunYang"},"content":" this.isCompleted \u003d false;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"LuahJunYang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"LuahJunYang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"LuahJunYang"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"LuahJunYang"},"content":" public String toString() {","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"LuahJunYang"},"content":" return \"[E]\" + super.toString() + \"(\" + this.startTime + this.endTime + \")\";","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"LuahJunYang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"LuahJunYang"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"LuahJunYang":16}},{"path":"src/main/java/Frenchie.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LuahJunYang"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"LuahJunYang"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"LuahJunYang"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"LuahJunYang"},"content":"public class Frenchie {","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"LuahJunYang"},"content":" public ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"LuahJunYang"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"LuahJunYang"},"content":" //constructor","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"LuahJunYang"},"content":" public Frenchie() {","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"LuahJunYang"},"content":" this.tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"LuahJunYang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"LuahJunYang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"LuahJunYang"},"content":" public void addTask(Task NEW_TASK) {","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"LuahJunYang"},"content":" tasks.add(NEW_TASK);","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"LuahJunYang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"LuahJunYang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"LuahJunYang"},"content":" public void listTasks() {","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"LuahJunYang"},"content":" int counter \u003d 1;","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"LuahJunYang"},"content":" for (Task task : tasks) {","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"LuahJunYang"},"content":" System.out.println(counter + \". \" + task.toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"LuahJunYang"},"content":" counter +\u003d 1;","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"LuahJunYang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"LuahJunYang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"LuahJunYang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"LuahJunYang"},"content":" public void completeTask(int index) {","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"LuahJunYang"},"content":" tasks.get(index).mark_as_completed();","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"LuahJunYang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"LuahJunYang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"LuahJunYang"},"content":" public void uncompleteTask(int index) {","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"LuahJunYang"},"content":" tasks.get(index).mark_as_incomplete();","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"LuahJunYang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"LuahJunYang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"LuahJunYang"},"content":" public int getNumOfTasks() {","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"LuahJunYang"},"content":" return this.tasks.size();","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"LuahJunYang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"LuahJunYang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"LuahJunYang"},"content":" public void deleteTask(int index) {","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"LuahJunYang"},"content":" tasks.remove(index);","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"LuahJunYang"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"LuahJunYang"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-26"},{"lineNumber":40,"author":{"gitId":"LuahJunYang"},"content":" /*String logo \u003d \" ____ _ \\n\"","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"LuahJunYang"},"content":" + \"| _ \\\\ _ _| | _____ \\n\"","lastModifiedDate":"2023-08-26"},{"lineNumber":42,"author":{"gitId":"LuahJunYang"},"content":" + \"| | | | | | | |/ / _ \\\\\\n\"","lastModifiedDate":"2023-08-26"},{"lineNumber":43,"author":{"gitId":"LuahJunYang"},"content":" + \"| |_| | |_| | \u003c __/\\n\"","lastModifiedDate":"2023-08-26"},{"lineNumber":44,"author":{"gitId":"LuahJunYang"},"content":" + \"|____/ \\\\__,_|_|\\\\_\\\\___|\\n\";","lastModifiedDate":"2023-08-26"},{"lineNumber":45,"author":{"gitId":"LuahJunYang"},"content":" System.out.println(\"Hello from\\n\" + logo); */","lastModifiedDate":"2023-08-26"},{"lineNumber":46,"author":{"gitId":"LuahJunYang"},"content":" Frenchie frenchie \u003d new Frenchie();","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"LuahJunYang"},"content":" String skeleton \u003d \"____________________________________________________________\\n\" +","lastModifiedDate":"2023-08-26"},{"lineNumber":48,"author":{"gitId":"LuahJunYang"},"content":" \" Hello! I\u0027m Frenchie\\n\" +","lastModifiedDate":"2023-08-26"},{"lineNumber":49,"author":{"gitId":"LuahJunYang"},"content":" \" What can I do for you?\\n\" +","lastModifiedDate":"2023-08-26"},{"lineNumber":50,"author":{"gitId":"LuahJunYang"},"content":" \"____________________________________________________________\"","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"LuahJunYang"},"content":" /* \" Bye. Hope to see you again soon!\\n\" +","lastModifiedDate":"2023-08-26"},{"lineNumber":52,"author":{"gitId":"LuahJunYang"},"content":" \"____________________________________________________________\\n\" */;","lastModifiedDate":"2023-08-26"},{"lineNumber":53,"author":{"gitId":"LuahJunYang"},"content":" System.out.println(skeleton);","lastModifiedDate":"2023-08-26"},{"lineNumber":54,"author":{"gitId":"LuahJunYang"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":55,"author":{"gitId":"LuahJunYang"},"content":" Scanner scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-26"},{"lineNumber":56,"author":{"gitId":"LuahJunYang"},"content":" while (true) {","lastModifiedDate":"2023-08-26"},{"lineNumber":57,"author":{"gitId":"LuahJunYang"},"content":" String input \u003d scanner.nextLine();","lastModifiedDate":"2023-08-26"},{"lineNumber":58,"author":{"gitId":"LuahJunYang"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"LuahJunYang"},"content":" if (input.equals(\"bye\")) {","lastModifiedDate":"2023-08-26"},{"lineNumber":60,"author":{"gitId":"LuahJunYang"},"content":" System.out.println(\"____________________________________________________________\\n\" +","lastModifiedDate":"2023-08-26"},{"lineNumber":61,"author":{"gitId":"LuahJunYang"},"content":" \" Bye. Hope to see you again soon!\\n\" +","lastModifiedDate":"2023-08-26"},{"lineNumber":62,"author":{"gitId":"LuahJunYang"},"content":" \"____________________________________________________________\");","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"LuahJunYang"},"content":" break;","lastModifiedDate":"2023-08-26"},{"lineNumber":64,"author":{"gitId":"LuahJunYang"},"content":" } else if (input.equals(\"list\")) { //Checking if user is looking to list all tasks","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"LuahJunYang"},"content":" frenchie.listTasks();","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"LuahJunYang"},"content":" } else if (input.contains(\"mark\")) { //Checking if user input is to mark/unmark tasks","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"LuahJunYang"},"content":" String[] parts \u003d input.split(\" \");","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"LuahJunYang"},"content":" int index \u003d Integer.parseInt(parts[1]) - 1;","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"LuahJunYang"},"content":" Task target_task \u003d frenchie.tasks.get(index);","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"LuahJunYang"},"content":" //Checking if user is looking to mark task as done or incomplete","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"LuahJunYang"},"content":" if (parts[0].equals(\"mark\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"LuahJunYang"},"content":" frenchie.completeTask(index);","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"LuahJunYang"},"content":" System.out.println(\"____________________________________________________________\\n\" +","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"LuahJunYang"},"content":" \" Nice! I\u0027ve marked this task as done: \\n\" +","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"LuahJunYang"},"content":" target_task.toString() + \"\\n\" +","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"LuahJunYang"},"content":" \"____________________________________________________________\");","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"LuahJunYang"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"LuahJunYang"},"content":" frenchie.uncompleteTask(index);","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"LuahJunYang"},"content":" System.out.println(\"____________________________________________________________\\n\" +","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"LuahJunYang"},"content":" \" OK, I\u0027ve marked this task as not done yet: \\n\" +","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"LuahJunYang"},"content":" target_task.toString() + \"\\n\" +","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"LuahJunYang"},"content":" \"____________________________________________________________\");","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"LuahJunYang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"LuahJunYang"},"content":" } else if (input.contains(\"delete\")){","lastModifiedDate":"2023-09-04"},{"lineNumber":85,"author":{"gitId":"LuahJunYang"},"content":" String[] parts \u003d input.split(\" \");","lastModifiedDate":"2023-09-04"},{"lineNumber":86,"author":{"gitId":"LuahJunYang"},"content":" int index \u003d Integer.parseInt(parts[1]) - 1;","lastModifiedDate":"2023-09-04"},{"lineNumber":87,"author":{"gitId":"LuahJunYang"},"content":" Task target_task \u003d frenchie.tasks.get(index);","lastModifiedDate":"2023-09-04"},{"lineNumber":88,"author":{"gitId":"LuahJunYang"},"content":" frenchie.deleteTask(index);","lastModifiedDate":"2023-09-04"},{"lineNumber":89,"author":{"gitId":"LuahJunYang"},"content":" System.out.println(\"____________________________________________________________\\n\" +","lastModifiedDate":"2023-09-04"},{"lineNumber":90,"author":{"gitId":"LuahJunYang"},"content":" \"Noted. I\u0027ve removed this task: \\n\" +","lastModifiedDate":"2023-09-04"},{"lineNumber":91,"author":{"gitId":"LuahJunYang"},"content":" target_task.toString() + \"\\n\" +","lastModifiedDate":"2023-09-04"},{"lineNumber":92,"author":{"gitId":"LuahJunYang"},"content":" \"Now you have \" + frenchie.getNumOfTasks() + \" tasks in the list.\\n\" +","lastModifiedDate":"2023-09-04"},{"lineNumber":93,"author":{"gitId":"LuahJunYang"},"content":" \"____________________________________________________________\");","lastModifiedDate":"2023-09-04"},{"lineNumber":94,"author":{"gitId":"LuahJunYang"},"content":" } else if (input.contains(\"event\") || input.contains(\"todo\") || input.contains(\"deadline\")) {","lastModifiedDate":"2023-09-04"},{"lineNumber":95,"author":{"gitId":"LuahJunYang"},"content":" String[] parts \u003d input.split(\" \");","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"LuahJunYang"},"content":" String taskType \u003d parts[0];","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"LuahJunYang"},"content":" if (parts.length \u003c\u003d 1) {","lastModifiedDate":"2023-09-04"},{"lineNumber":98,"author":{"gitId":"LuahJunYang"},"content":" throw new FrenchieException(\"____________________________________________________________\\n\" +","lastModifiedDate":"2023-09-04"},{"lineNumber":99,"author":{"gitId":"LuahJunYang"},"content":" \"OOPS!!! The description of a \" + taskType + \" cannot be empty.\\n\" +","lastModifiedDate":"2023-09-04"},{"lineNumber":100,"author":{"gitId":"LuahJunYang"},"content":" \"____________________________________________________________\");","lastModifiedDate":"2023-09-04"},{"lineNumber":101,"author":{"gitId":"LuahJunYang"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":102,"author":{"gitId":"LuahJunYang"},"content":" if (taskType.equals(\"todo\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"LuahJunYang"},"content":" String taskName \u003d input.split(\"todo\")[1];","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"LuahJunYang"},"content":" ToDo currentTask \u003d new ToDo(taskName);","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"LuahJunYang"},"content":" frenchie.addTask(currentTask);","lastModifiedDate":"2023-08-30"},{"lineNumber":106,"author":{"gitId":"LuahJunYang"},"content":" System.out.println(\"____________________________________________________________\\n\" +","lastModifiedDate":"2023-08-26"},{"lineNumber":107,"author":{"gitId":"LuahJunYang"},"content":" \" Got it! I\u0027ve added this task: \\n\" +","lastModifiedDate":"2023-08-30"},{"lineNumber":108,"author":{"gitId":"LuahJunYang"},"content":" currentTask + \"\\n\" +","lastModifiedDate":"2023-08-30"},{"lineNumber":109,"author":{"gitId":"LuahJunYang"},"content":" \"Now you have \" + frenchie.getNumOfTasks() + \" tasks in the list.\\n\" +","lastModifiedDate":"2023-09-04"},{"lineNumber":110,"author":{"gitId":"LuahJunYang"},"content":" \"____________________________________________________________\");","lastModifiedDate":"2023-09-04"},{"lineNumber":111,"author":{"gitId":"LuahJunYang"},"content":" } else if (taskType.equals(\"deadline\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":112,"author":{"gitId":"LuahJunYang"},"content":" String taskName \u003d input.split(\"/\")[0].split(\"deadline\")[1].trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":113,"author":{"gitId":"LuahJunYang"},"content":" String deadline \u003d input.split(\"/\")[1].replace(\"by \", \"by: \");","lastModifiedDate":"2023-08-30"},{"lineNumber":114,"author":{"gitId":"LuahJunYang"},"content":" Deadline currentTask \u003d new Deadline(taskName, deadline);","lastModifiedDate":"2023-08-30"},{"lineNumber":115,"author":{"gitId":"LuahJunYang"},"content":" frenchie.addTask(currentTask);","lastModifiedDate":"2023-08-30"},{"lineNumber":116,"author":{"gitId":"LuahJunYang"},"content":" System.out.println(\"____________________________________________________________\\n\" +","lastModifiedDate":"2023-08-30"},{"lineNumber":117,"author":{"gitId":"LuahJunYang"},"content":" \" Got it! I\u0027ve added this task: \\n\" +","lastModifiedDate":"2023-08-30"},{"lineNumber":118,"author":{"gitId":"LuahJunYang"},"content":" currentTask + \"\\n\" +","lastModifiedDate":"2023-08-30"},{"lineNumber":119,"author":{"gitId":"LuahJunYang"},"content":" \"Now you have \" + frenchie.getNumOfTasks() + \" tasks in the list.\\n\" +","lastModifiedDate":"2023-09-04"},{"lineNumber":120,"author":{"gitId":"LuahJunYang"},"content":" \"____________________________________________________________\");","lastModifiedDate":"2023-09-04"},{"lineNumber":121,"author":{"gitId":"LuahJunYang"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":122,"author":{"gitId":"LuahJunYang"},"content":" String taskName \u003d input.split(\"/\")[0].split(\"event\")[1].trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":123,"author":{"gitId":"LuahJunYang"},"content":" String startTime \u003d input.split(\"/\")[1].replace(\"from \", \"from: \");","lastModifiedDate":"2023-08-30"},{"lineNumber":124,"author":{"gitId":"LuahJunYang"},"content":" String endTime \u003d input.split(\"/\")[2].replace(\"to \", \"to: \");","lastModifiedDate":"2023-08-30"},{"lineNumber":125,"author":{"gitId":"LuahJunYang"},"content":" Event currentTask \u003d new Event(taskName, startTime, endTime);","lastModifiedDate":"2023-08-30"},{"lineNumber":126,"author":{"gitId":"LuahJunYang"},"content":" frenchie.addTask(currentTask);","lastModifiedDate":"2023-08-30"},{"lineNumber":127,"author":{"gitId":"LuahJunYang"},"content":" System.out.println(\"____________________________________________________________\\n\" +","lastModifiedDate":"2023-08-30"},{"lineNumber":128,"author":{"gitId":"LuahJunYang"},"content":" \" Got it! I\u0027ve added this task: \\n\" +","lastModifiedDate":"2023-08-30"},{"lineNumber":129,"author":{"gitId":"LuahJunYang"},"content":" currentTask + \"\\n\" +","lastModifiedDate":"2023-08-30"},{"lineNumber":130,"author":{"gitId":"LuahJunYang"},"content":" \"Now you have \" + frenchie.getNumOfTasks() + \" tasks in the list.\\n\" +","lastModifiedDate":"2023-09-04"},{"lineNumber":131,"author":{"gitId":"LuahJunYang"},"content":" \"____________________________________________________________\");","lastModifiedDate":"2023-09-04"},{"lineNumber":132,"author":{"gitId":"LuahJunYang"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":133,"author":{"gitId":"LuahJunYang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":134,"author":{"gitId":"LuahJunYang"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":135,"author":{"gitId":"LuahJunYang"},"content":" throw new FrenchieException(\"____________________________________________________________\\n\" +","lastModifiedDate":"2023-09-04"},{"lineNumber":136,"author":{"gitId":"LuahJunYang"},"content":" \"OOPS!!! I\u0027m sorry but I don\u0027t know what that means! :-(\\n\" +","lastModifiedDate":"2023-09-04"},{"lineNumber":137,"author":{"gitId":"LuahJunYang"},"content":" \"____________________________________________________________\");","lastModifiedDate":"2023-09-04"},{"lineNumber":138,"author":{"gitId":"LuahJunYang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":139,"author":{"gitId":"LuahJunYang"},"content":" } catch (FrenchieException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":140,"author":{"gitId":"LuahJunYang"},"content":" System.err.println(e.getMessage());","lastModifiedDate":"2023-09-04"},{"lineNumber":141,"author":{"gitId":"LuahJunYang"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":142,"author":{"gitId":"LuahJunYang"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":143,"author":{"gitId":"LuahJunYang"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":144,"author":{"gitId":"LuahJunYang"},"content":" }","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"LuahJunYang":144}},{"path":"src/main/java/FrenchieException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LuahJunYang"},"content":"public class FrenchieException extends Exception{","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"LuahJunYang"},"content":" public FrenchieException(String message) {","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"LuahJunYang"},"content":" super(message);","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"LuahJunYang"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"LuahJunYang"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"LuahJunYang":5}},{"path":"src/main/java/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LuahJunYang"},"content":"public class Task {","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"LuahJunYang"},"content":" public boolean isCompleted;","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"LuahJunYang"},"content":" public String task_name;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"LuahJunYang"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"LuahJunYang"},"content":" public Task() {","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"LuahJunYang"},"content":" isCompleted \u003d false;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"LuahJunYang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"LuahJunYang"},"content":" //Constructor","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"LuahJunYang"},"content":" public Task(String name) {","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"LuahJunYang"},"content":" this.task_name \u003d name;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"LuahJunYang"},"content":" isCompleted \u003d false;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"LuahJunYang"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"LuahJunYang"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"LuahJunYang"},"content":" public void mark_as_completed() {","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"LuahJunYang"},"content":" isCompleted \u003d true;","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"LuahJunYang"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"LuahJunYang"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"LuahJunYang"},"content":" public void mark_as_incomplete() {","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"LuahJunYang"},"content":" isCompleted \u003d false;","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"LuahJunYang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"LuahJunYang"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"LuahJunYang"},"content":" public String toString() {","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"LuahJunYang"},"content":" String indicator \u003d \" \";","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"LuahJunYang"},"content":" if(isCompleted) {","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"LuahJunYang"},"content":" indicator \u003d \"X\";","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"LuahJunYang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"LuahJunYang"},"content":" return \"[\" + indicator + \"] \" + task_name;","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"LuahJunYang"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"LuahJunYang"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"LuahJunYang":29}},{"path":"src/main/java/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LuahJunYang"},"content":"class ToDo extends Task {","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"LuahJunYang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"LuahJunYang"},"content":" ToDo(String name) {","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"LuahJunYang"},"content":" this.task_name \u003d name;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"LuahJunYang"},"content":" this.isCompleted \u003d false;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"LuahJunYang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"LuahJunYang"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"LuahJunYang"},"content":" public String toString() {","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"LuahJunYang"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"LuahJunYang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"LuahJunYang"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"LuahJunYang":11}}] +[{"path":"src/main/java/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LuahJunYang"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"LuahJunYang"},"content":" String deadline;","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"LuahJunYang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"LuahJunYang"},"content":" //Constructor","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"LuahJunYang"},"content":" public Deadline(String name, String deadline) {","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"LuahJunYang"},"content":" super(name);","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"LuahJunYang"},"content":" this.isCompleted \u003d false;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"LuahJunYang"},"content":" this.deadline \u003d deadline;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"LuahJunYang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"LuahJunYang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"LuahJunYang"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"LuahJunYang"},"content":" public String toString() {","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"LuahJunYang"},"content":" return \"[D]\" + super.toString() + \"(\" + this.deadline + \")\";","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"LuahJunYang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"LuahJunYang"},"content":"}","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"LuahJunYang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"LuahJunYang"},"content":"","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"LuahJunYang":17}},{"path":"src/main/java/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LuahJunYang"},"content":"public class Event extends Task{","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"LuahJunYang"},"content":" String startTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"LuahJunYang"},"content":" String endTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"LuahJunYang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"LuahJunYang"},"content":" public Event(String name, String startTime, String endTime) {","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"LuahJunYang"},"content":" this.task_name \u003d name;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"LuahJunYang"},"content":" this.startTime \u003d startTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"LuahJunYang"},"content":" this.endTime \u003d endTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"LuahJunYang"},"content":" this.isCompleted \u003d false;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"LuahJunYang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"LuahJunYang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"LuahJunYang"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"LuahJunYang"},"content":" public String toString() {","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"LuahJunYang"},"content":" return \"[E]\" + super.toString() + \"(\" + this.startTime + this.endTime + \")\";","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"LuahJunYang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"LuahJunYang"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"LuahJunYang":16}},{"path":"src/main/java/Frenchie.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LuahJunYang"},"content":"import java.io.*;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"LuahJunYang"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"LuahJunYang"},"content":"import java.util.Arrays;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"LuahJunYang"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"LuahJunYang"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"LuahJunYang"},"content":"public class Frenchie {","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"LuahJunYang"},"content":" public ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"LuahJunYang"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"LuahJunYang"},"content":" //constructor","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"LuahJunYang"},"content":" public Frenchie() {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"LuahJunYang"},"content":" this.tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"LuahJunYang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"LuahJunYang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"LuahJunYang"},"content":" public void addTask(Task NEW_TASK) {","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"LuahJunYang"},"content":" tasks.add(NEW_TASK);","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"LuahJunYang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"LuahJunYang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"LuahJunYang"},"content":" public void listTasks() {","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"LuahJunYang"},"content":" int counter \u003d 1;","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"LuahJunYang"},"content":" for (Task task : tasks) {","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"LuahJunYang"},"content":" System.out.println(counter + \". \" + task.toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"LuahJunYang"},"content":" counter +\u003d 1;","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"LuahJunYang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"LuahJunYang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"LuahJunYang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"LuahJunYang"},"content":" public void completeTask(int index) {","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"LuahJunYang"},"content":" tasks.get(index).mark_as_completed();","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"LuahJunYang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"LuahJunYang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"LuahJunYang"},"content":" public void uncompleteTask(int index) {","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"LuahJunYang"},"content":" tasks.get(index).mark_as_incomplete();","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"LuahJunYang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"LuahJunYang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"LuahJunYang"},"content":" public int getNumOfTasks() {","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"LuahJunYang"},"content":" return this.tasks.size();","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"LuahJunYang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"LuahJunYang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"LuahJunYang"},"content":" public void deleteTask(int index) {","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"LuahJunYang"},"content":" tasks.remove(index);","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"LuahJunYang"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"LuahJunYang"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":42,"author":{"gitId":"LuahJunYang"},"content":" public void saveTasksToFile() {","lastModifiedDate":"2023-09-09"},{"lineNumber":43,"author":{"gitId":"LuahJunYang"},"content":" try (PrintWriter writer \u003d new PrintWriter(\"frenchie.txt\")) {","lastModifiedDate":"2023-09-09"},{"lineNumber":44,"author":{"gitId":"LuahJunYang"},"content":" for (Task task : this.tasks) {","lastModifiedDate":"2023-09-09"},{"lineNumber":45,"author":{"gitId":"LuahJunYang"},"content":" writer.println(task.toString());","lastModifiedDate":"2023-09-09"},{"lineNumber":46,"author":{"gitId":"LuahJunYang"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":47,"author":{"gitId":"LuahJunYang"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-09"},{"lineNumber":48,"author":{"gitId":"LuahJunYang"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-09"},{"lineNumber":49,"author":{"gitId":"LuahJunYang"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":50,"author":{"gitId":"LuahJunYang"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":51,"author":{"gitId":"LuahJunYang"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":52,"author":{"gitId":"LuahJunYang"},"content":" public void readTasksFromFile() {","lastModifiedDate":"2023-09-09"},{"lineNumber":53,"author":{"gitId":"LuahJunYang"},"content":" String filepath \u003d \"./frenchie.txt\";","lastModifiedDate":"2023-09-09"},{"lineNumber":54,"author":{"gitId":"LuahJunYang"},"content":" try (BufferedReader reader \u003d new BufferedReader(new FileReader(filepath))) {","lastModifiedDate":"2023-09-09"},{"lineNumber":55,"author":{"gitId":"LuahJunYang"},"content":" String input;","lastModifiedDate":"2023-09-09"},{"lineNumber":56,"author":{"gitId":"LuahJunYang"},"content":" while ((input \u003d reader.readLine()) !\u003d null) {","lastModifiedDate":"2023-09-09"},{"lineNumber":57,"author":{"gitId":"LuahJunYang"},"content":" String taskType \u003d Character.toString(input.charAt(1));","lastModifiedDate":"2023-09-09"},{"lineNumber":58,"author":{"gitId":"LuahJunYang"},"content":" String taskStatus \u003d Character.toString(input.charAt(4));","lastModifiedDate":"2023-09-09"},{"lineNumber":59,"author":{"gitId":"LuahJunYang"},"content":" String taskDetails \u003d input.substring(7);","lastModifiedDate":"2023-09-09"},{"lineNumber":60,"author":{"gitId":"LuahJunYang"},"content":" if (taskType.equals(\"T\")) {","lastModifiedDate":"2023-09-09"},{"lineNumber":61,"author":{"gitId":"LuahJunYang"},"content":" ToDo currentTask \u003d new ToDo(taskDetails);","lastModifiedDate":"2023-09-09"},{"lineNumber":62,"author":{"gitId":"LuahJunYang"},"content":" if (taskStatus.equals(\"X\")) {","lastModifiedDate":"2023-09-09"},{"lineNumber":63,"author":{"gitId":"LuahJunYang"},"content":" currentTask.mark_as_completed();","lastModifiedDate":"2023-09-09"},{"lineNumber":64,"author":{"gitId":"LuahJunYang"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":65,"author":{"gitId":"LuahJunYang"},"content":" this.addTask(currentTask);","lastModifiedDate":"2023-09-09"},{"lineNumber":66,"author":{"gitId":"LuahJunYang"},"content":" } else if (taskType.equals(\"D\")) {","lastModifiedDate":"2023-09-09"},{"lineNumber":67,"author":{"gitId":"LuahJunYang"},"content":" String taskName \u003d taskDetails.split(\"\\\\(\")[0].trim();","lastModifiedDate":"2023-09-09"},{"lineNumber":68,"author":{"gitId":"LuahJunYang"},"content":" String deadline \u003d taskDetails.split(\"\\\\(\")[1].split(\"\\\\)\")[0];","lastModifiedDate":"2023-09-09"},{"lineNumber":69,"author":{"gitId":"LuahJunYang"},"content":" Deadline currentTask \u003d new Deadline(taskName, deadline);","lastModifiedDate":"2023-09-09"},{"lineNumber":70,"author":{"gitId":"LuahJunYang"},"content":" if (taskStatus.equals(\"X\")) {","lastModifiedDate":"2023-09-09"},{"lineNumber":71,"author":{"gitId":"LuahJunYang"},"content":" currentTask.mark_as_completed();","lastModifiedDate":"2023-09-09"},{"lineNumber":72,"author":{"gitId":"LuahJunYang"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":73,"author":{"gitId":"LuahJunYang"},"content":" this.addTask(currentTask);","lastModifiedDate":"2023-09-09"},{"lineNumber":74,"author":{"gitId":"LuahJunYang"},"content":" } else if (taskType.equals(\"E\")) {","lastModifiedDate":"2023-09-09"},{"lineNumber":75,"author":{"gitId":"LuahJunYang"},"content":" String taskName \u003d taskDetails.split(\"\\\\(\")[0].trim();","lastModifiedDate":"2023-09-09"},{"lineNumber":76,"author":{"gitId":"LuahJunYang"},"content":" String startTime \u003d taskDetails.split(\"\\\\(\")[1].split(\"to\")[0].trim();","lastModifiedDate":"2023-09-09"},{"lineNumber":77,"author":{"gitId":"LuahJunYang"},"content":" String endTime \u003d \"to\" + Arrays.toString(taskDetails.split(\"\\\\(\")[1].split(\"to\")[1].split(\"\\\\)\"));","lastModifiedDate":"2023-09-09"},{"lineNumber":78,"author":{"gitId":"LuahJunYang"},"content":" Event currentTask \u003d new Event(taskName, startTime, endTime);","lastModifiedDate":"2023-09-09"},{"lineNumber":79,"author":{"gitId":"LuahJunYang"},"content":" if (taskStatus.equals(\"X\")) {","lastModifiedDate":"2023-09-09"},{"lineNumber":80,"author":{"gitId":"LuahJunYang"},"content":" currentTask.mark_as_completed();","lastModifiedDate":"2023-09-09"},{"lineNumber":81,"author":{"gitId":"LuahJunYang"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":82,"author":{"gitId":"LuahJunYang"},"content":" this.addTask(currentTask);","lastModifiedDate":"2023-09-09"},{"lineNumber":83,"author":{"gitId":"LuahJunYang"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":84,"author":{"gitId":"LuahJunYang"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":85,"author":{"gitId":"LuahJunYang"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-09"},{"lineNumber":86,"author":{"gitId":"LuahJunYang"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-09"},{"lineNumber":87,"author":{"gitId":"LuahJunYang"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":88,"author":{"gitId":"LuahJunYang"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":89,"author":{"gitId":"LuahJunYang"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-26"},{"lineNumber":90,"author":{"gitId":"LuahJunYang"},"content":" /*String logo \u003d \" ____ _ \\n\"","lastModifiedDate":"2023-08-26"},{"lineNumber":91,"author":{"gitId":"LuahJunYang"},"content":" + \"| _ \\\\ _ _| | _____ \\n\"","lastModifiedDate":"2023-08-26"},{"lineNumber":92,"author":{"gitId":"LuahJunYang"},"content":" + \"| | | | | | | |/ / _ \\\\\\n\"","lastModifiedDate":"2023-08-26"},{"lineNumber":93,"author":{"gitId":"LuahJunYang"},"content":" + \"| |_| | |_| | \u003c __/\\n\"","lastModifiedDate":"2023-08-26"},{"lineNumber":94,"author":{"gitId":"LuahJunYang"},"content":" + \"|____/ \\\\__,_|_|\\\\_\\\\___|\\n\";","lastModifiedDate":"2023-08-26"},{"lineNumber":95,"author":{"gitId":"LuahJunYang"},"content":" System.out.println(\"Hello from\\n\" + logo); */","lastModifiedDate":"2023-08-26"},{"lineNumber":96,"author":{"gitId":"LuahJunYang"},"content":" Frenchie frenchie \u003d new Frenchie();","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"LuahJunYang"},"content":" frenchie.readTasksFromFile();","lastModifiedDate":"2023-09-09"},{"lineNumber":98,"author":{"gitId":"LuahJunYang"},"content":" String skeleton \u003d \"____________________________________________________________\\n\" +","lastModifiedDate":"2023-08-26"},{"lineNumber":99,"author":{"gitId":"LuahJunYang"},"content":" \" Hello! I\u0027m Frenchie\\n\" +","lastModifiedDate":"2023-08-26"},{"lineNumber":100,"author":{"gitId":"LuahJunYang"},"content":" \" What can I do for you?\\n\" +","lastModifiedDate":"2023-08-26"},{"lineNumber":101,"author":{"gitId":"LuahJunYang"},"content":" \"____________________________________________________________\"","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"LuahJunYang"},"content":" /* \" Bye. Hope to see you again soon!\\n\" +","lastModifiedDate":"2023-08-26"},{"lineNumber":103,"author":{"gitId":"LuahJunYang"},"content":" \"____________________________________________________________\\n\" */;","lastModifiedDate":"2023-08-26"},{"lineNumber":104,"author":{"gitId":"LuahJunYang"},"content":" System.out.println(skeleton);","lastModifiedDate":"2023-08-26"},{"lineNumber":105,"author":{"gitId":"LuahJunYang"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":106,"author":{"gitId":"LuahJunYang"},"content":" Scanner scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-26"},{"lineNumber":107,"author":{"gitId":"LuahJunYang"},"content":" while (true) {","lastModifiedDate":"2023-08-26"},{"lineNumber":108,"author":{"gitId":"LuahJunYang"},"content":" String input \u003d scanner.nextLine();","lastModifiedDate":"2023-08-26"},{"lineNumber":109,"author":{"gitId":"LuahJunYang"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":110,"author":{"gitId":"LuahJunYang"},"content":" if (input.equals(\"bye\")) {","lastModifiedDate":"2023-08-26"},{"lineNumber":111,"author":{"gitId":"LuahJunYang"},"content":" System.out.println(\"____________________________________________________________\\n\" +","lastModifiedDate":"2023-08-26"},{"lineNumber":112,"author":{"gitId":"LuahJunYang"},"content":" \" Bye. Hope to see you again soon!\\n\" +","lastModifiedDate":"2023-08-26"},{"lineNumber":113,"author":{"gitId":"LuahJunYang"},"content":" \"____________________________________________________________\");","lastModifiedDate":"2023-08-30"},{"lineNumber":114,"author":{"gitId":"LuahJunYang"},"content":" break;","lastModifiedDate":"2023-08-26"},{"lineNumber":115,"author":{"gitId":"LuahJunYang"},"content":" } else if (input.equals(\"list\")) { //Checking if user is looking to list all tasks","lastModifiedDate":"2023-08-30"},{"lineNumber":116,"author":{"gitId":"LuahJunYang"},"content":" frenchie.listTasks();","lastModifiedDate":"2023-08-30"},{"lineNumber":117,"author":{"gitId":"LuahJunYang"},"content":" } else if (input.contains(\"mark\")) { //Checking if user input is to mark/unmark tasks","lastModifiedDate":"2023-08-30"},{"lineNumber":118,"author":{"gitId":"LuahJunYang"},"content":" String[] parts \u003d input.split(\" \");","lastModifiedDate":"2023-08-30"},{"lineNumber":119,"author":{"gitId":"LuahJunYang"},"content":" int index \u003d Integer.parseInt(parts[1]) - 1;","lastModifiedDate":"2023-08-30"},{"lineNumber":120,"author":{"gitId":"LuahJunYang"},"content":" Task target_task \u003d frenchie.tasks.get(index);","lastModifiedDate":"2023-08-30"},{"lineNumber":121,"author":{"gitId":"LuahJunYang"},"content":" //Checking if user is looking to mark task as done or incomplete","lastModifiedDate":"2023-08-30"},{"lineNumber":122,"author":{"gitId":"LuahJunYang"},"content":" if (parts[0].equals(\"mark\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":123,"author":{"gitId":"LuahJunYang"},"content":" frenchie.completeTask(index);","lastModifiedDate":"2023-08-30"},{"lineNumber":124,"author":{"gitId":"LuahJunYang"},"content":" System.out.println(\"____________________________________________________________\\n\" +","lastModifiedDate":"2023-08-30"},{"lineNumber":125,"author":{"gitId":"LuahJunYang"},"content":" \" Nice! I\u0027ve marked this task as done: \\n\" +","lastModifiedDate":"2023-08-30"},{"lineNumber":126,"author":{"gitId":"LuahJunYang"},"content":" target_task.toString() + \"\\n\" +","lastModifiedDate":"2023-08-30"},{"lineNumber":127,"author":{"gitId":"LuahJunYang"},"content":" \"____________________________________________________________\");","lastModifiedDate":"2023-08-30"},{"lineNumber":128,"author":{"gitId":"LuahJunYang"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":129,"author":{"gitId":"LuahJunYang"},"content":" frenchie.uncompleteTask(index);","lastModifiedDate":"2023-08-30"},{"lineNumber":130,"author":{"gitId":"LuahJunYang"},"content":" System.out.println(\"____________________________________________________________\\n\" +","lastModifiedDate":"2023-08-30"},{"lineNumber":131,"author":{"gitId":"LuahJunYang"},"content":" \" OK, I\u0027ve marked this task as not done yet: \\n\" +","lastModifiedDate":"2023-08-30"},{"lineNumber":132,"author":{"gitId":"LuahJunYang"},"content":" target_task.toString() + \"\\n\" +","lastModifiedDate":"2023-08-30"},{"lineNumber":133,"author":{"gitId":"LuahJunYang"},"content":" \"____________________________________________________________\");","lastModifiedDate":"2023-08-30"},{"lineNumber":134,"author":{"gitId":"LuahJunYang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":135,"author":{"gitId":"LuahJunYang"},"content":" } else if (input.contains(\"delete\")){","lastModifiedDate":"2023-09-04"},{"lineNumber":136,"author":{"gitId":"LuahJunYang"},"content":" String[] parts \u003d input.split(\" \");","lastModifiedDate":"2023-09-04"},{"lineNumber":137,"author":{"gitId":"LuahJunYang"},"content":" int index \u003d Integer.parseInt(parts[1]) - 1;","lastModifiedDate":"2023-09-04"},{"lineNumber":138,"author":{"gitId":"LuahJunYang"},"content":" Task target_task \u003d frenchie.tasks.get(index);","lastModifiedDate":"2023-09-04"},{"lineNumber":139,"author":{"gitId":"LuahJunYang"},"content":" frenchie.deleteTask(index);","lastModifiedDate":"2023-09-04"},{"lineNumber":140,"author":{"gitId":"LuahJunYang"},"content":" System.out.println(\"____________________________________________________________\\n\" +","lastModifiedDate":"2023-09-04"},{"lineNumber":141,"author":{"gitId":"LuahJunYang"},"content":" \"Noted. I\u0027ve removed this task: \\n\" +","lastModifiedDate":"2023-09-04"},{"lineNumber":142,"author":{"gitId":"LuahJunYang"},"content":" target_task.toString() + \"\\n\" +","lastModifiedDate":"2023-09-04"},{"lineNumber":143,"author":{"gitId":"LuahJunYang"},"content":" \"Now you have \" + frenchie.getNumOfTasks() + \" tasks in the list.\\n\" +","lastModifiedDate":"2023-09-04"},{"lineNumber":144,"author":{"gitId":"LuahJunYang"},"content":" \"____________________________________________________________\");","lastModifiedDate":"2023-09-04"},{"lineNumber":145,"author":{"gitId":"LuahJunYang"},"content":" } else if (input.contains(\"event\") || input.contains(\"todo\") || input.contains(\"deadline\")) {","lastModifiedDate":"2023-09-04"},{"lineNumber":146,"author":{"gitId":"LuahJunYang"},"content":" String[] parts \u003d input.split(\" \");","lastModifiedDate":"2023-08-30"},{"lineNumber":147,"author":{"gitId":"LuahJunYang"},"content":" String taskType \u003d parts[0];","lastModifiedDate":"2023-08-30"},{"lineNumber":148,"author":{"gitId":"LuahJunYang"},"content":" if (parts.length \u003c\u003d 1) {","lastModifiedDate":"2023-09-04"},{"lineNumber":149,"author":{"gitId":"LuahJunYang"},"content":" throw new FrenchieException(\"____________________________________________________________\\n\" +","lastModifiedDate":"2023-09-04"},{"lineNumber":150,"author":{"gitId":"LuahJunYang"},"content":" \"OOPS!!! The description of a \" + taskType + \" cannot be empty.\\n\" +","lastModifiedDate":"2023-09-04"},{"lineNumber":151,"author":{"gitId":"LuahJunYang"},"content":" \"____________________________________________________________\");","lastModifiedDate":"2023-09-04"},{"lineNumber":152,"author":{"gitId":"LuahJunYang"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":153,"author":{"gitId":"LuahJunYang"},"content":" if (taskType.equals(\"todo\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":154,"author":{"gitId":"LuahJunYang"},"content":" String taskName \u003d input.split(\"todo\")[1].trim();","lastModifiedDate":"2023-09-09"},{"lineNumber":155,"author":{"gitId":"LuahJunYang"},"content":" ToDo currentTask \u003d new ToDo(taskName);","lastModifiedDate":"2023-08-30"},{"lineNumber":156,"author":{"gitId":"LuahJunYang"},"content":" frenchie.addTask(currentTask);","lastModifiedDate":"2023-08-30"},{"lineNumber":157,"author":{"gitId":"LuahJunYang"},"content":" System.out.println(\"____________________________________________________________\\n\" +","lastModifiedDate":"2023-08-26"},{"lineNumber":158,"author":{"gitId":"LuahJunYang"},"content":" \" Got it! I\u0027ve added this task: \\n\" +","lastModifiedDate":"2023-08-30"},{"lineNumber":159,"author":{"gitId":"LuahJunYang"},"content":" currentTask + \"\\n\" +","lastModifiedDate":"2023-08-30"},{"lineNumber":160,"author":{"gitId":"LuahJunYang"},"content":" \"Now you have \" + frenchie.getNumOfTasks() + \" tasks in the list.\\n\" +","lastModifiedDate":"2023-09-04"},{"lineNumber":161,"author":{"gitId":"LuahJunYang"},"content":" \"____________________________________________________________\");","lastModifiedDate":"2023-09-04"},{"lineNumber":162,"author":{"gitId":"LuahJunYang"},"content":" } else if (taskType.equals(\"deadline\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":163,"author":{"gitId":"LuahJunYang"},"content":" String taskName \u003d input.split(\"/\")[0].split(\"deadline\")[1].trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":164,"author":{"gitId":"LuahJunYang"},"content":" String deadline \u003d input.split(\"/\")[1].replace(\"by \", \"by: \");","lastModifiedDate":"2023-08-30"},{"lineNumber":165,"author":{"gitId":"LuahJunYang"},"content":" Deadline currentTask \u003d new Deadline(taskName, deadline);","lastModifiedDate":"2023-08-30"},{"lineNumber":166,"author":{"gitId":"LuahJunYang"},"content":" frenchie.addTask(currentTask);","lastModifiedDate":"2023-08-30"},{"lineNumber":167,"author":{"gitId":"LuahJunYang"},"content":" System.out.println(\"____________________________________________________________\\n\" +","lastModifiedDate":"2023-08-30"},{"lineNumber":168,"author":{"gitId":"LuahJunYang"},"content":" \" Got it! I\u0027ve added this task: \\n\" +","lastModifiedDate":"2023-08-30"},{"lineNumber":169,"author":{"gitId":"LuahJunYang"},"content":" currentTask + \"\\n\" +","lastModifiedDate":"2023-08-30"},{"lineNumber":170,"author":{"gitId":"LuahJunYang"},"content":" \"Now you have \" + frenchie.getNumOfTasks() + \" tasks in the list.\\n\" +","lastModifiedDate":"2023-09-04"},{"lineNumber":171,"author":{"gitId":"LuahJunYang"},"content":" \"____________________________________________________________\");","lastModifiedDate":"2023-09-04"},{"lineNumber":172,"author":{"gitId":"LuahJunYang"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":173,"author":{"gitId":"LuahJunYang"},"content":" String taskName \u003d input.split(\"/\")[0].split(\"event\")[1].trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":174,"author":{"gitId":"LuahJunYang"},"content":" String startTime \u003d input.split(\"/\")[1].replace(\"from \", \"from: \");","lastModifiedDate":"2023-08-30"},{"lineNumber":175,"author":{"gitId":"LuahJunYang"},"content":" String endTime \u003d input.split(\"/\")[2].replace(\"to \", \"to: \");","lastModifiedDate":"2023-08-30"},{"lineNumber":176,"author":{"gitId":"LuahJunYang"},"content":" Event currentTask \u003d new Event(taskName, startTime, endTime);","lastModifiedDate":"2023-08-30"},{"lineNumber":177,"author":{"gitId":"LuahJunYang"},"content":" frenchie.addTask(currentTask);","lastModifiedDate":"2023-08-30"},{"lineNumber":178,"author":{"gitId":"LuahJunYang"},"content":" System.out.println(\"____________________________________________________________\\n\" +","lastModifiedDate":"2023-08-30"},{"lineNumber":179,"author":{"gitId":"LuahJunYang"},"content":" \" Got it! I\u0027ve added this task: \\n\" +","lastModifiedDate":"2023-08-30"},{"lineNumber":180,"author":{"gitId":"LuahJunYang"},"content":" currentTask + \"\\n\" +","lastModifiedDate":"2023-08-30"},{"lineNumber":181,"author":{"gitId":"LuahJunYang"},"content":" \"Now you have \" + frenchie.getNumOfTasks() + \" tasks in the list.\\n\" +","lastModifiedDate":"2023-09-04"},{"lineNumber":182,"author":{"gitId":"LuahJunYang"},"content":" \"____________________________________________________________\");","lastModifiedDate":"2023-09-04"},{"lineNumber":183,"author":{"gitId":"LuahJunYang"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":184,"author":{"gitId":"LuahJunYang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":185,"author":{"gitId":"LuahJunYang"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":186,"author":{"gitId":"LuahJunYang"},"content":" throw new FrenchieException(\"____________________________________________________________\\n\" +","lastModifiedDate":"2023-09-04"},{"lineNumber":187,"author":{"gitId":"LuahJunYang"},"content":" \"OOPS!!! I\u0027m sorry but I don\u0027t know what that means! :-(\\n\" +","lastModifiedDate":"2023-09-04"},{"lineNumber":188,"author":{"gitId":"LuahJunYang"},"content":" \"____________________________________________________________\");","lastModifiedDate":"2023-09-04"},{"lineNumber":189,"author":{"gitId":"LuahJunYang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":190,"author":{"gitId":"LuahJunYang"},"content":" frenchie.saveTasksToFile();","lastModifiedDate":"2023-09-09"},{"lineNumber":191,"author":{"gitId":"LuahJunYang"},"content":" } catch (FrenchieException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":192,"author":{"gitId":"LuahJunYang"},"content":" System.err.println(e.getMessage());","lastModifiedDate":"2023-09-04"},{"lineNumber":193,"author":{"gitId":"LuahJunYang"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":194,"author":{"gitId":"LuahJunYang"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":195,"author":{"gitId":"LuahJunYang"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":196,"author":{"gitId":"LuahJunYang"},"content":" }","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"LuahJunYang":196}},{"path":"src/main/java/FrenchieException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LuahJunYang"},"content":"public class FrenchieException extends Exception{","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"LuahJunYang"},"content":" public FrenchieException(String message) {","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"LuahJunYang"},"content":" super(message);","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"LuahJunYang"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"LuahJunYang"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"LuahJunYang":5}},{"path":"src/main/java/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LuahJunYang"},"content":"public class Task {","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"LuahJunYang"},"content":" public boolean isCompleted;","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"LuahJunYang"},"content":" public String task_name;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"LuahJunYang"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"LuahJunYang"},"content":" public Task() {","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"LuahJunYang"},"content":" isCompleted \u003d false;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"LuahJunYang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"LuahJunYang"},"content":" //Constructor","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"LuahJunYang"},"content":" public Task(String name) {","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"LuahJunYang"},"content":" this.task_name \u003d name;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"LuahJunYang"},"content":" isCompleted \u003d false;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"LuahJunYang"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"LuahJunYang"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"LuahJunYang"},"content":" public void mark_as_completed() {","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"LuahJunYang"},"content":" isCompleted \u003d true;","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"LuahJunYang"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"LuahJunYang"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"LuahJunYang"},"content":" public void mark_as_incomplete() {","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"LuahJunYang"},"content":" isCompleted \u003d false;","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"LuahJunYang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"LuahJunYang"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"LuahJunYang"},"content":" public String toString() {","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"LuahJunYang"},"content":" String indicator \u003d \" \";","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"LuahJunYang"},"content":" if(isCompleted) {","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"LuahJunYang"},"content":" indicator \u003d \"X\";","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"LuahJunYang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"LuahJunYang"},"content":" return \"[\" + indicator + \"] \" + task_name;","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"LuahJunYang"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"LuahJunYang"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"LuahJunYang":29}},{"path":"src/main/java/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LuahJunYang"},"content":"class ToDo extends Task {","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"LuahJunYang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"LuahJunYang"},"content":" ToDo(String name) {","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"LuahJunYang"},"content":" this.task_name \u003d name;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"LuahJunYang"},"content":" this.isCompleted \u003d false;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"LuahJunYang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"LuahJunYang"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"LuahJunYang"},"content":" public String toString() {","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"LuahJunYang"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"LuahJunYang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"LuahJunYang"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"LuahJunYang":11}}] diff --git a/LuahJunYang_ip_master/commits.json b/LuahJunYang_ip_master/commits.json index 1eaadc47..f0b30a8f 100644 --- a/LuahJunYang_ip_master/commits.json +++ b/LuahJunYang_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"LuahJunYang":[{"date":"2023-08-26","commitResults":[{"hash":"8f211eb8e87a26c3760bb2e196978ddb28e49a1b","isMergeCommit":false,"messageTitle":"Level 0","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":2}}},{"hash":"c442a23dac6e168b3f849fee939b3e8f6a801e3d","isMergeCommit":false,"messageTitle":"Finished Level 1, renamed bot to Frenchie","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":36,"deletions":17}}}]},{"date":"2023-08-28","commitResults":[{"hash":"e26ad607487e0c4912cae93e854a7bdc74db8cce","isMergeCommit":false,"messageTitle":"Added functionality to store user input as list and print out all input text when \u0027list\u0027 is input","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":1}}},{"hash":"2826c8ba9b7959c51d17dcd54e8d4a28c4c1442e","isMergeCommit":false,"messageTitle":"Created Task class to be used for Frenchie","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":0}}}]},{"date":"2023-08-30","commitResults":[{"hash":"c163e3fda3294c9ee88eb5dd295e8e3dae9575b2","isMergeCommit":false,"messageTitle":"Added addTask and listTask methods and a constructor to Frenchie.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":36,"deletions":10}}},{"hash":"6880516e595a567b30466e6bcebdbc8f5ed30d95","isMergeCommit":false,"messageTitle":"Added mark as incomplete method to Task.java and complete and uncomplete method to Frenchie.java, level 3 completed","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":31,"deletions":5}}},{"hash":"950238093903e27becc206e067c655bf5e72db58","isMergeCommit":false,"messageTitle":"Created new Task subclasses","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":2}}},{"hash":"6403c3d3ec26297bb870de196486ff8a00bcc35f","isMergeCommit":false,"messageTitle":" Added if-else statements and updated toString() methods for checking for todo, event, deadline. Level 4 Complete.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":107,"deletions":30}}}]},{"date":"2023-09-04","commitResults":[{"hash":"f8faf33712ccd821b29c334ab761a08501de53c8","isMergeCommit":false,"messageTitle":"Created new FrenchieException class to handle basic exceptions for now. Level 5 completed up till basic exceptions.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":71,"deletions":60}}},{"hash":"59151ce9f8347bca060c122d8040fc9380cde53c","isMergeCommit":false,"messageTitle":"Added delete function to frenchie, changed tasks attribute to ArrayList instead of List","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":2}}}]}]},"authorFileTypeContributionMap":{"LuahJunYang":{"java":222,"md":0,"fxml":0,"sh":0,"bat":0,"gradle":0,"txt":0}},"authorContributionVariance":{"LuahJunYang":3709.654},"authorDisplayNameMap":{"LuahJunYang":"CS2103-W14-1 LUAH..YANG"}} +{"authorDailyContributionsMap":{"LuahJunYang":[{"date":"2023-08-26","commitResults":[{"hash":"8f211eb8e87a26c3760bb2e196978ddb28e49a1b","isMergeCommit":false,"messageTitle":"Level 0","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":2}}},{"hash":"c442a23dac6e168b3f849fee939b3e8f6a801e3d","isMergeCommit":false,"messageTitle":"Finished Level 1, renamed bot to Frenchie","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":36,"deletions":17}}}]},{"date":"2023-08-28","commitResults":[{"hash":"e26ad607487e0c4912cae93e854a7bdc74db8cce","isMergeCommit":false,"messageTitle":"Added functionality to store user input as list and print out all input text when \u0027list\u0027 is input","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":1}}},{"hash":"2826c8ba9b7959c51d17dcd54e8d4a28c4c1442e","isMergeCommit":false,"messageTitle":"Created Task class to be used for Frenchie","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":0}}}]},{"date":"2023-08-30","commitResults":[{"hash":"c163e3fda3294c9ee88eb5dd295e8e3dae9575b2","isMergeCommit":false,"messageTitle":"Added addTask and listTask methods and a constructor to Frenchie.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":36,"deletions":10}}},{"hash":"6880516e595a567b30466e6bcebdbc8f5ed30d95","isMergeCommit":false,"messageTitle":"Added mark as incomplete method to Task.java and complete and uncomplete method to Frenchie.java, level 3 completed","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":31,"deletions":5}}},{"hash":"950238093903e27becc206e067c655bf5e72db58","isMergeCommit":false,"messageTitle":"Created new Task subclasses","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":2}}},{"hash":"6403c3d3ec26297bb870de196486ff8a00bcc35f","isMergeCommit":false,"messageTitle":" Added if-else statements and updated toString() methods for checking for todo, event, deadline. Level 4 Complete.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":107,"deletions":30}}}]},{"date":"2023-09-04","commitResults":[{"hash":"f8faf33712ccd821b29c334ab761a08501de53c8","isMergeCommit":false,"messageTitle":"Created new FrenchieException class to handle basic exceptions for now. Level 5 completed up till basic exceptions.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":71,"deletions":60}}},{"hash":"59151ce9f8347bca060c122d8040fc9380cde53c","isMergeCommit":false,"messageTitle":"Added delete function to frenchie, changed tasks attribute to ArrayList instead of List","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":2}}}]},{"date":"2023-09-09","commitResults":[{"hash":"76c74cf2e33f44eb8e18a4fd10c2a8cb4ea5c154","isMergeCommit":false,"messageTitle":"Added functions saveTasksToFile and readTasksFromFile","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":53,"deletions":1}}}]}]},"authorFileTypeContributionMap":{"LuahJunYang":{"java":274,"md":0,"fxml":0,"sh":0,"bat":0,"gradle":0,"txt":0}},"authorContributionVariance":{"LuahJunYang":3044.5176},"authorDisplayNameMap":{"LuahJunYang":"CS2103-W14-1 LUAH..YANG"}} diff --git a/Mahidharah_ip_master/authorship.json b/Mahidharah_ip_master/authorship.json index 61e37870..6da6fb2d 100644 --- a/Mahidharah_ip_master/authorship.json +++ b/Mahidharah_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"src/main/java/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Mahidharah"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Mahidharah"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"Mahidharah"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Mahidharah"},"content":"public class Deadline extends Task{","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"Mahidharah"},"content":" private final LocalDate by;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"Mahidharah"},"content":" public Deadline(String name, String by) throws DukeException {","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"Mahidharah"},"content":" super(name);","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"Mahidharah"},"content":" if (name.trim().isEmpty()) {","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"Mahidharah"},"content":" throw new DukeException(\"☹ OOPS!!! The description of a Deadline cannot be empty.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"Mahidharah"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Mahidharah"},"content":" this.by \u003d LocalDate.parse(by);","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Mahidharah"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Mahidharah"},"content":" throw new DukeException(\"☹ OOPS!!! Follow the format for a Deadline.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"Mahidharah"},"content":" public String dataString() {","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Mahidharah"},"content":" if (this.isdone()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Mahidharah"},"content":" return \"T : 1 : \" + this.getname() + \":\" + this.by;","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Mahidharah"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Mahidharah"},"content":" return \"T : 0 : \" + this.getname() + \":\" + this.by;","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Mahidharah"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"Mahidharah"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"Mahidharah"},"content":" DateTimeFormatter format \u003d DateTimeFormatter.ofPattern(\"MMM d yyyy\");","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Mahidharah"},"content":" return \"[D]\" + super.toString() + \" (by: \" + this.by.format(format) + \")\";","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"Mahidharah"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Mahidharah":32}},{"path":"src/main/java/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Mahidharah"},"content":"import java.io.*;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Mahidharah"},"content":"import java.nio.file.Files;","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"Mahidharah"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Mahidharah"},"content":"import java.nio.file.StandardOpenOption;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Mahidharah"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"Mahidharah"},"content":"import java.util.Objects;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"Mahidharah"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":9,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":10,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":11,"author":{"gitId":"Mahidharah"},"content":" public static void inputChecker(Task task) throws DukeException {","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"Mahidharah"},"content":" if (task.toString().trim().isEmpty()) {","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"Mahidharah"},"content":" throw new DukeException(\"☹ OOPS!!! The description of a \" + task + \" cannot be empty.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":17,"author":{"gitId":"Mahidharah"},"content":" public static void cansplit(String input, String splitter) throws DukeException {","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"Mahidharah"},"content":" if (input.split(splitter).length \u003d\u003d 1) {","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"Mahidharah"},"content":" throw new DukeException(\"☹ OOPS!!!\");","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":23,"author":{"gitId":"Mahidharah"},"content":" public static void runfile(File file, String datainput, ArrayList\u003cTask\u003e list) throws DukeException{","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Mahidharah"},"content":" String regex \u003d \" : \";","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"Mahidharah"},"content":" String[] split \u003d datainput.split(regex);","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"Mahidharah"},"content":" if (split[0].equals(\"T\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Mahidharah"},"content":" ToDo todo \u003d new ToDo(split[2]);","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Mahidharah"},"content":" if (split[1] \u003d\u003d \"1\") {","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Mahidharah"},"content":" todo.setdone();","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Mahidharah"},"content":" list.add(todo);","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Mahidharah"},"content":" } else if (split[0].equals(\"D\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Mahidharah"},"content":" Deadline deadline \u003d new Deadline(split[2], split[3]);","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"Mahidharah"},"content":" if (split[1] \u003d\u003d \"1\") {","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"Mahidharah"},"content":" deadline.setdone();","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"Mahidharah"},"content":" list.add(deadline);","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"Mahidharah"},"content":" } else if (split[0].equals(\"E\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"Mahidharah"},"content":" Event event \u003d new Event(split[2], split[3], split[4]);","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"Mahidharah"},"content":" if (split[1] \u003d\u003d \"1\") {","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"Mahidharah"},"content":" event.setdone();","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"Mahidharah"},"content":" list.add(event);","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"Mahidharah"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"Mahidharah"},"content":" System.out.println(\"error\");","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"Mahidharah"},"content":" public static void run(File file, String userinput, ArrayList\u003cTask\u003e list) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"Mahidharah"},"content":" if (userinput.equalsIgnoreCase(\"list\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":50,"author":{"gitId":"Mahidharah"},"content":" for (int i \u003d 0; i \u003c list.size(); i++) {","lastModifiedDate":"2023-08-23"},{"lineNumber":51,"author":{"gitId":"Mahidharah"},"content":" System.out.println(i + 1 + \".\" + list.get(i));","lastModifiedDate":"2023-08-23"},{"lineNumber":52,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":53,"author":{"gitId":"Mahidharah"},"content":" return;","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":55,"author":{"gitId":"Mahidharah"},"content":" } else if (userinput.length() \u003e\u003d 6 \u0026\u0026 userinput.substring(0, 5).equalsIgnoreCase(\"mark \")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":56,"author":{"gitId":"Mahidharah"},"content":" try {","lastModifiedDate":"2023-08-24"},{"lineNumber":57,"author":{"gitId":"Mahidharah"},"content":" int taskno \u003d Integer.parseInt(userinput.substring(5));","lastModifiedDate":"2023-08-24"},{"lineNumber":58,"author":{"gitId":"Mahidharah"},"content":" if (taskno \u003c\u003d list.size()) {","lastModifiedDate":"2023-08-25"},{"lineNumber":59,"author":{"gitId":"Mahidharah"},"content":" Task task \u003d list.get(taskno - 1);","lastModifiedDate":"2023-08-24"},{"lineNumber":60,"author":{"gitId":"Mahidharah"},"content":" task.setdone();","lastModifiedDate":"2023-08-24"},{"lineNumber":61,"author":{"gitId":"Mahidharah"},"content":" System.out.println(\"Nice! I\u0027ve marked this task as done:\");","lastModifiedDate":"2023-08-24"},{"lineNumber":62,"author":{"gitId":"Mahidharah"},"content":" System.out.println(\" \" + task);","lastModifiedDate":"2023-08-24"},{"lineNumber":63,"author":{"gitId":"Mahidharah"},"content":" } else {","lastModifiedDate":"2023-08-23"},{"lineNumber":64,"author":{"gitId":"Mahidharah"},"content":" System.out.println(\"Enter a valid number to mark\");","lastModifiedDate":"2023-08-24"},{"lineNumber":65,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":66,"author":{"gitId":"Mahidharah"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-24"},{"lineNumber":67,"author":{"gitId":"Mahidharah"},"content":" System.out.println(\"Enter a valid number to mark\");","lastModifiedDate":"2023-08-24"},{"lineNumber":68,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":69,"author":{"gitId":"Mahidharah"},"content":" } else if (userinput.length() \u003e\u003d 4 \u0026\u0026 userinput.substring(0, 4).equalsIgnoreCase(\"todo\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":70,"author":{"gitId":"Mahidharah"},"content":" ToDo todo \u003d new ToDo(userinput.substring(4));","lastModifiedDate":"2023-08-24"},{"lineNumber":71,"author":{"gitId":"Mahidharah"},"content":" list.add(todo);","lastModifiedDate":"2023-08-24"},{"lineNumber":72,"author":{"gitId":"Mahidharah"},"content":" System.out.println(\"Got it. I\u0027ve added this task:\");","lastModifiedDate":"2023-08-24"},{"lineNumber":73,"author":{"gitId":"Mahidharah"},"content":" System.out.println(\" \" + todo);","lastModifiedDate":"2023-08-24"},{"lineNumber":74,"author":{"gitId":"Mahidharah"},"content":" System.out.println(\"Now you have \" + list.size() + \" tasks in the list.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":75,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":76,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":77,"author":{"gitId":"Mahidharah"},"content":" } else if (userinput.length() \u003e\u003d 8 \u0026\u0026 userinput.substring(0, 8).equalsIgnoreCase(\"deadline\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":78,"author":{"gitId":"Mahidharah"},"content":" String[] segments \u003d userinput.split(\" /by \");","lastModifiedDate":"2023-08-24"},{"lineNumber":79,"author":{"gitId":"Mahidharah"},"content":" Deadline deadline \u003d new Deadline(segments[0].substring(8), segments[1]);","lastModifiedDate":"2023-08-24"},{"lineNumber":80,"author":{"gitId":"Mahidharah"},"content":" list.add(deadline);","lastModifiedDate":"2023-08-24"},{"lineNumber":81,"author":{"gitId":"Mahidharah"},"content":" System.out.println(\"Got it. I\u0027ve added this task:\");","lastModifiedDate":"2023-08-24"},{"lineNumber":82,"author":{"gitId":"Mahidharah"},"content":" System.out.println(\" \" + deadline);","lastModifiedDate":"2023-08-24"},{"lineNumber":83,"author":{"gitId":"Mahidharah"},"content":" System.out.println(\"Now you have \" + list.size() + \" tasks in the list.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":84,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":85,"author":{"gitId":"Mahidharah"},"content":" } else if (userinput.length() \u003e\u003d 7 \u0026\u0026 userinput.substring(0, 6).equalsIgnoreCase(\"event \")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":86,"author":{"gitId":"Mahidharah"},"content":" String[] segments1 \u003d userinput.split(\" /from \");","lastModifiedDate":"2023-08-24"},{"lineNumber":87,"author":{"gitId":"Mahidharah"},"content":" String from \u003d segments1[1].split(\" /to \")[0];","lastModifiedDate":"2023-08-24"},{"lineNumber":88,"author":{"gitId":"Mahidharah"},"content":" String[] segments2 \u003d segments1[1].split(\" /to \");","lastModifiedDate":"2023-08-24"},{"lineNumber":89,"author":{"gitId":"Mahidharah"},"content":" Event event \u003d new Event(segments1[0].substring(5), from, segments2[1]);","lastModifiedDate":"2023-08-24"},{"lineNumber":90,"author":{"gitId":"Mahidharah"},"content":" list.add(event);","lastModifiedDate":"2023-08-24"},{"lineNumber":91,"author":{"gitId":"Mahidharah"},"content":" System.out.println(\"Got it. I\u0027ve added this task:\");","lastModifiedDate":"2023-08-24"},{"lineNumber":92,"author":{"gitId":"Mahidharah"},"content":" System.out.println(\" \" + event);","lastModifiedDate":"2023-08-24"},{"lineNumber":93,"author":{"gitId":"Mahidharah"},"content":" System.out.println(\"Now you have \" + list.size() + \" tasks in the list.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":94,"author":{"gitId":"Mahidharah"},"content":" } else if (userinput.length() \u003e\u003d 8 \u0026\u0026 userinput.substring(0, 7).equalsIgnoreCase(\"delete \")) {","lastModifiedDate":"2023-08-25"},{"lineNumber":95,"author":{"gitId":"Mahidharah"},"content":" try {","lastModifiedDate":"2023-08-25"},{"lineNumber":96,"author":{"gitId":"Mahidharah"},"content":" int taskno \u003d Integer.parseInt(userinput.substring(7));","lastModifiedDate":"2023-08-25"},{"lineNumber":97,"author":{"gitId":"Mahidharah"},"content":" if (taskno \u003c\u003d list.size()) {","lastModifiedDate":"2023-08-25"},{"lineNumber":98,"author":{"gitId":"Mahidharah"},"content":" Task task \u003d list.get(taskno - 1);","lastModifiedDate":"2023-08-25"},{"lineNumber":99,"author":{"gitId":"Mahidharah"},"content":" list.remove(taskno - 1);","lastModifiedDate":"2023-08-25"},{"lineNumber":100,"author":{"gitId":"Mahidharah"},"content":" System.out.println(\"Noted. I\u0027ve removed this task:\");","lastModifiedDate":"2023-08-25"},{"lineNumber":101,"author":{"gitId":"Mahidharah"},"content":" System.out.println(\" \" + task);","lastModifiedDate":"2023-08-25"},{"lineNumber":102,"author":{"gitId":"Mahidharah"},"content":" System.out.println(\"Now you have \" + list.size() + \" tasks in the list.\");","lastModifiedDate":"2023-08-25"},{"lineNumber":103,"author":{"gitId":"Mahidharah"},"content":" } else {","lastModifiedDate":"2023-08-25"},{"lineNumber":104,"author":{"gitId":"Mahidharah"},"content":" System.out.println(\"Enter a valid number to mark\");","lastModifiedDate":"2023-08-25"},{"lineNumber":105,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":106,"author":{"gitId":"Mahidharah"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-25"},{"lineNumber":107,"author":{"gitId":"Mahidharah"},"content":" System.out.println(\"Enter a valid number to mark\");","lastModifiedDate":"2023-08-25"},{"lineNumber":108,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":109,"author":{"gitId":"Mahidharah"},"content":" } else {","lastModifiedDate":"2023-08-24"},{"lineNumber":110,"author":{"gitId":"Mahidharah"},"content":" throw new DukeException(\"☹ OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-08-24"},{"lineNumber":111,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":112,"author":{"gitId":"Mahidharah"},"content":" try(FileWriter fw \u003d new FileWriter(file, true);","lastModifiedDate":"2023-08-30"},{"lineNumber":113,"author":{"gitId":"Mahidharah"},"content":" BufferedWriter bw \u003d new BufferedWriter(fw);","lastModifiedDate":"2023-08-30"},{"lineNumber":114,"author":{"gitId":"Mahidharah"},"content":" PrintWriter out \u003d new PrintWriter(bw))","lastModifiedDate":"2023-08-30"},{"lineNumber":115,"author":{"gitId":"Mahidharah"},"content":" {","lastModifiedDate":"2023-08-30"},{"lineNumber":116,"author":{"gitId":"Mahidharah"},"content":" out.println(list.get(list.size() - 1).dataString());","lastModifiedDate":"2023-08-30"},{"lineNumber":117,"author":{"gitId":"Mahidharah"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":118,"author":{"gitId":"Mahidharah"},"content":" System.out.println(\"nothing\");","lastModifiedDate":"2023-08-30"},{"lineNumber":119,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":120,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":121,"author":{"gitId":"-"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-24"},{"lineNumber":122,"author":{"gitId":"Mahidharah"},"content":" System.out.println(\"Hello! I\u0027m IPSVIJAYKUMARAAKOODAIRRUKALAM\");","lastModifiedDate":"2023-08-24"},{"lineNumber":123,"author":{"gitId":"Mahidharah"},"content":" System.out.println(\"What can I do for you?\");","lastModifiedDate":"2023-08-24"},{"lineNumber":124,"author":{"gitId":"Mahidharah"},"content":" String userinput;","lastModifiedDate":"2023-08-24"},{"lineNumber":125,"author":{"gitId":"Mahidharah"},"content":" ArrayList\u003cTask\u003e list \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-24"},{"lineNumber":126,"author":{"gitId":"Mahidharah"},"content":" Scanner scan \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-24"},{"lineNumber":127,"author":{"gitId":"Mahidharah"},"content":" File file;","lastModifiedDate":"2023-08-30"},{"lineNumber":128,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":129,"author":{"gitId":"Mahidharah"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":130,"author":{"gitId":"Mahidharah"},"content":" File openfile \u003d new File(\"data/duke\");","lastModifiedDate":"2023-08-30"},{"lineNumber":131,"author":{"gitId":"Mahidharah"},"content":" file \u003d openfile;","lastModifiedDate":"2023-08-30"},{"lineNumber":132,"author":{"gitId":"Mahidharah"},"content":" Scanner reader \u003d new Scanner(openfile);","lastModifiedDate":"2023-08-30"},{"lineNumber":133,"author":{"gitId":"Mahidharah"},"content":" while (reader.hasNextLine()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":134,"author":{"gitId":"Mahidharah"},"content":" String data \u003d reader.nextLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":135,"author":{"gitId":"Mahidharah"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":136,"author":{"gitId":"Mahidharah"},"content":" runfile(openfile, data,list);","lastModifiedDate":"2023-08-30"},{"lineNumber":137,"author":{"gitId":"Mahidharah"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":138,"author":{"gitId":"Mahidharah"},"content":" System.out.println(e);","lastModifiedDate":"2023-08-30"},{"lineNumber":139,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":140,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":141,"author":{"gitId":"Mahidharah"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":142,"author":{"gitId":"Mahidharah"},"content":" file \u003d new File(\"data/duke\");","lastModifiedDate":"2023-08-30"},{"lineNumber":143,"author":{"gitId":"Mahidharah"},"content":" System.out.println(e);","lastModifiedDate":"2023-08-30"},{"lineNumber":144,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":145,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":146,"author":{"gitId":"Mahidharah"},"content":" userinput \u003d scan.nextLine();","lastModifiedDate":"2023-08-24"},{"lineNumber":147,"author":{"gitId":"Mahidharah"},"content":" while (!userinput.equalsIgnoreCase(\"bye\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":148,"author":{"gitId":"Mahidharah"},"content":" try {","lastModifiedDate":"2023-08-24"},{"lineNumber":149,"author":{"gitId":"Mahidharah"},"content":" run(file, userinput, list);","lastModifiedDate":"2023-08-30"},{"lineNumber":150,"author":{"gitId":"Mahidharah"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-24"},{"lineNumber":151,"author":{"gitId":"Mahidharah"},"content":" System.out.println(e);","lastModifiedDate":"2023-08-24"},{"lineNumber":152,"author":{"gitId":"Mahidharah"},"content":" } finally {","lastModifiedDate":"2023-08-24"},{"lineNumber":153,"author":{"gitId":"Mahidharah"},"content":" userinput \u003d scan.nextLine();","lastModifiedDate":"2023-08-24"},{"lineNumber":154,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":155,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":156,"author":{"gitId":"Mahidharah"},"content":" System.out.println(\"Bye. Hope to see you again soon!\");","lastModifiedDate":"2023-08-22"},{"lineNumber":157,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":158,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"Mahidharah":154,"-":4}},{"path":"src/main/java/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Mahidharah"},"content":"public class DukeException extends Exception{","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"Mahidharah"},"content":" String msg;","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"Mahidharah"},"content":" DukeException(String msg) {","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"Mahidharah"},"content":" this.msg \u003d msg;","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"Mahidharah"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"Mahidharah"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"Mahidharah"},"content":" return this.msg;","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"Mahidharah"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Mahidharah":12}},{"path":"src/main/java/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Mahidharah"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Mahidharah"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"Mahidharah"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Mahidharah"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"Mahidharah"},"content":" private final LocalDate from;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"Mahidharah"},"content":" private final LocalDate to;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Mahidharah"},"content":" public Event(String name, String from, String to) throws DukeException {","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"Mahidharah"},"content":" super(name);","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"Mahidharah"},"content":" if (name.trim().isEmpty()) {","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"Mahidharah"},"content":" throw new DukeException(\"☹ OOPS!!! The description of a Task cannot be empty.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"Mahidharah"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Mahidharah"},"content":" this.from \u003d LocalDate.parse(from);","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Mahidharah"},"content":" this.to \u003d LocalDate.parse(to);","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Mahidharah"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Mahidharah"},"content":" throw new DukeException(\"☹ OOPS!!! Follow the format for an Event.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"Mahidharah"},"content":" public String dataString() {","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Mahidharah"},"content":" if (this.isdone()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Mahidharah"},"content":" return \"T : 1 : \" + this.getname() + \":\" + this.from + \":\" + this.to;","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Mahidharah"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"Mahidharah"},"content":" return \"T : 0 : \" + this.getname() + \":\" + this.from + \":\" + this.to;","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Mahidharah"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"Mahidharah"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"Mahidharah"},"content":" DateTimeFormatter format \u003d DateTimeFormatter.ofPattern(\"MMM d yyyy\");","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Mahidharah"},"content":" return \"[E]\" + super.toString() + \" (from: \" + this.from.format(format) +","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Mahidharah"},"content":" \") (to: \" + this.to.format(format) + \")\";","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"Mahidharah"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Mahidharah":35}},{"path":"src/main/java/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Mahidharah"},"content":"public abstract class Task {","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Mahidharah"},"content":" private boolean done;","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"Mahidharah"},"content":" private final String name;","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"Mahidharah"},"content":" private Task() {","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"Mahidharah"},"content":" this.name \u003d \"\";","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"Mahidharah"},"content":" done \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"Mahidharah"},"content":" public Task(String name) {","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"Mahidharah"},"content":" this.name \u003d name;","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"Mahidharah"},"content":" done \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"Mahidharah"},"content":" public void setdone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"Mahidharah"},"content":" done \u003d true;","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"Mahidharah"},"content":" public boolean isdone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"Mahidharah"},"content":" return this.done;","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"Mahidharah"},"content":" public String getname() {","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Mahidharah"},"content":" return this.name;","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Mahidharah"},"content":" public abstract String dataString();","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Mahidharah"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"Mahidharah"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"Mahidharah"},"content":" String box;","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"Mahidharah"},"content":" if (done) {","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"Mahidharah"},"content":" box \u003d \"[X] \";","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"Mahidharah"},"content":" } else {","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"Mahidharah"},"content":" box \u003d \"[ ] \";","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"Mahidharah"},"content":" return box + name;","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"Mahidharah"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Mahidharah":41}},{"path":"src/main/java/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Mahidharah"},"content":"public class ToDo extends Task{","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"Mahidharah"},"content":" public ToDo(String name) throws DukeException {","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"Mahidharah"},"content":" super(name);","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"Mahidharah"},"content":" if (name.trim().isEmpty()) {","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"Mahidharah"},"content":" throw new DukeException(\"☹ OOPS!!! The description of a todo cannot be empty.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"Mahidharah"},"content":" public String dataString() {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Mahidharah"},"content":" if (this.isdone()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Mahidharah"},"content":" return \"T : 1 : \" + this.getname();","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Mahidharah"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Mahidharah"},"content":" return \"T : 0 : \" + this.getname();","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Mahidharah"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"Mahidharah"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"Mahidharah"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"Mahidharah"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Mahidharah":22}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"Mahidharah"},"content":"todo read book","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"Mahidharah"},"content":"deadline return book /by June 6th","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"Mahidharah"},"content":"event project meeting /from Aug 6th 2pm /to 4pm","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"Mahidharah"},"content":"todo join sports club","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"Mahidharah"},"content":"todo borrow book","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"Mahidharah"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"Mahidharah"},"content":"deadline return book /by Sunday","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"Mahidharah"},"content":"event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Mahidharah":8}}] +[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"Mahidharah"},"content":"# Duke - Thalapathy edition","lastModifiedDate":"2023-09-10"},{"lineNumber":2,"author":{"gitId":"Mahidharah"},"content":"\u003e நா ஒரு தடவ முடிவு பண்ணிட்டேன் , நா என் பேச்சை நானே கேக்க மாட்டேன்","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"Mahidharah"},"content":"\u003e - I have decided once and for all, I will not listen to myself","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"Mahidharah"},"content":"\u003e ~ Thalapathy","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"Mahidharah"},"content":"DukePro frees your mind of having to remember things you need to do. It\u0027s,","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"Mahidharah"},"content":"- text-based","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"Mahidharah"},"content":"- easy to use","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"Mahidharah"},"content":"- ~~fast~~ _SUPER FAST_ to use","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"Mahidharah"},"content":"All you need to do is","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"Mahidharah"},"content":"1. Download it from [here](https://github.com/Mahidharah/ip)","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"Mahidharah"},"content":"2. double-click it.","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"Mahidharah"},"content":"3. add your tasks.","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"Mahidharah"},"content":"4. let it manage your tasks for you 😉","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"Mahidharah"},"content":"And its **FREE**","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"Mahidharah"},"content":"Features:","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"Mahidharah"},"content":"- [x] Todos","lastModifiedDate":"2023-09-10"},{"lineNumber":21,"author":{"gitId":"Mahidharah"},"content":"- [x] Deadlines","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"Mahidharah"},"content":"- [x] Events","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"Mahidharah"},"content":"- [x] delete","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"Mahidharah"},"content":"- [x] list","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"Mahidharah"},"content":"- [x] find","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"Mahidharah"},"content":"- [x] load and update file","lastModifiedDate":"2023-09-10"},{"lineNumber":27,"author":{"gitId":"Mahidharah"},"content":"- [ ] Graphical User Interface (GUI)","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"Mahidharah"},"content":"- [x] Be cool af","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":30,"author":{"gitId":"Mahidharah"},"content":"If you Java programmer, you can use it to practice Java too. Here\u0027s the \u0027main\u0027 method :electron: :","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"Mahidharah"},"content":"```java","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"Mahidharah"},"content":"public class Main {","lastModifiedDate":"2023-09-10"},{"lineNumber":33,"author":{"gitId":"Mahidharah"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-10"},{"lineNumber":34,"author":{"gitId":"Mahidharah"},"content":" Application.launch(MainApp.class, args);","lastModifiedDate":"2023-09-10"},{"lineNumber":35,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":36,"author":{"gitId":"Mahidharah"},"content":"}","lastModifiedDate":"2023-09-10"},{"lineNumber":37,"author":{"gitId":"-"},"content":"```","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":39,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":40,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"Mahidharah":35,"-":5}},{"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 \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"-"},"content":" id \u0027application\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"Mahidharah"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"Mahidharah"},"content":" maven { url \u0027https://oss.sonatype.org/content/repositories/snapshots/\u0027 }","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"Mahidharah"},"content":" implementation \u0027org.testng:testng:7.1.0\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":16,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":17,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"Mahidharah"},"content":" mainClass.set(\"duke.Duke\")","lastModifiedDate":"2023-09-09"},{"lineNumber":35,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"Mahidharah"},"content":" archiveFileName \u003d \u0027duke.jar\u0027","lastModifiedDate":"2023-09-09"},{"lineNumber":39,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":42,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"Mahidharah"},"content":" enableAssertions \u003d true","lastModifiedDate":"2023-09-09"},{"lineNumber":46,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":47,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"Mahidharah":6,"-":41}},{"path":"data/duke.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"Mahidharah"},"content":"T : 1 : read book","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"Mahidharah"},"content":"D : 0 : return book : 2023-06-06","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"Mahidharah"},"content":"E : 0 : project meeting : 2023-08-06 : 2023-08-06","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"Mahidharah"},"content":"T : 1 : join sports club","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"Mahidharah"},"content":"T : 0 : join sports club","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"Mahidharah":5}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Mahidharah"},"content":"package duke;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"Mahidharah"},"content":"import duke.exceptions.DukeException;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"Mahidharah"},"content":"import duke.parsers.Parser;","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"Mahidharah"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"Mahidharah"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":9,"author":{"gitId":"Mahidharah"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"Mahidharah"},"content":" * The chatbot Duke.","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"Mahidharah"},"content":" * Contains a Ui, Storage, TaskList and Parser object.","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"Mahidharah"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":14,"author":{"gitId":"Mahidharah"},"content":" private Ui ui;","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"Mahidharah"},"content":" private Storage storage;","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":17,"author":{"gitId":"Mahidharah"},"content":" private TaskList tasks;","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"Mahidharah"},"content":" private Parser parser;","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":20,"author":{"gitId":"Mahidharah"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"Mahidharah"},"content":" * Instantiates a new Duke object.","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"Mahidharah"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"Mahidharah"},"content":" * @param filePath the file path","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"Mahidharah"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"Mahidharah"},"content":" public Duke(String filePath) {","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"Mahidharah"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"Mahidharah"},"content":" this.storage \u003d new Storage(filePath);","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"Mahidharah"},"content":" try {","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"Mahidharah"},"content":" tasks \u003d new TaskList(storage.load());","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"Mahidharah"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"Mahidharah"},"content":" System.out.println(e);","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"Mahidharah"},"content":" tasks \u003d new TaskList();","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":34,"author":{"gitId":"Mahidharah"},"content":" this.parser \u003d new Parser(ui, storage, tasks);","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":36,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"Mahidharah"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":38,"author":{"gitId":"Mahidharah"},"content":" * Runs the chatbot until \"bye\" is entered.","lastModifiedDate":"2023-09-09"},{"lineNumber":39,"author":{"gitId":"Mahidharah"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"Mahidharah"},"content":" public void run() {","lastModifiedDate":"2023-09-06"},{"lineNumber":41,"author":{"gitId":"Mahidharah"},"content":" ui.introMessage();","lastModifiedDate":"2023-09-09"},{"lineNumber":42,"author":{"gitId":"Mahidharah"},"content":" Scanner scan \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-24"},{"lineNumber":43,"author":{"gitId":"Mahidharah"},"content":" String userinput \u003d scan.nextLine();","lastModifiedDate":"2023-09-06"},{"lineNumber":44,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":45,"author":{"gitId":"Mahidharah"},"content":" while (!userinput.equalsIgnoreCase(\"bye\")) {","lastModifiedDate":"2023-09-06"},{"lineNumber":46,"author":{"gitId":"Mahidharah"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"Mahidharah"},"content":" parser.parse(userinput);","lastModifiedDate":"2023-09-06"},{"lineNumber":48,"author":{"gitId":"Mahidharah"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"Mahidharah"},"content":" System.out.println(e);","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"Mahidharah"},"content":" userinput \u003d scan.nextLine();","lastModifiedDate":"2023-09-06"},{"lineNumber":52,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":54,"author":{"gitId":"Mahidharah"},"content":" ui.byeMessage();","lastModifiedDate":"2023-09-09"},{"lineNumber":55,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":57,"author":{"gitId":"Mahidharah"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":58,"author":{"gitId":"Mahidharah"},"content":" * Checks if a user input can be split.","lastModifiedDate":"2023-09-09"},{"lineNumber":59,"author":{"gitId":"Mahidharah"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":60,"author":{"gitId":"Mahidharah"},"content":" * @param input the input","lastModifiedDate":"2023-09-09"},{"lineNumber":61,"author":{"gitId":"Mahidharah"},"content":" * @param splitter the regex for splitting","lastModifiedDate":"2023-09-09"},{"lineNumber":62,"author":{"gitId":"Mahidharah"},"content":" * @throws DukeException cannot split exception","lastModifiedDate":"2023-09-09"},{"lineNumber":63,"author":{"gitId":"Mahidharah"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":64,"author":{"gitId":"Mahidharah"},"content":" public static void canSplit(String input, String splitter) throws DukeException {","lastModifiedDate":"2023-09-09"},{"lineNumber":65,"author":{"gitId":"Mahidharah"},"content":" if (input.split(splitter).length \u003d\u003d 1) {","lastModifiedDate":"2023-09-06"},{"lineNumber":66,"author":{"gitId":"Mahidharah"},"content":" throw new DukeException(\"☹ OOPS!!!\");","lastModifiedDate":"2023-09-06"},{"lineNumber":67,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":68,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":69,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":70,"author":{"gitId":"Mahidharah"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":71,"author":{"gitId":"Mahidharah"},"content":" * The entry point of application.","lastModifiedDate":"2023-09-09"},{"lineNumber":72,"author":{"gitId":"Mahidharah"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":73,"author":{"gitId":"Mahidharah"},"content":" * @param args the input arguments","lastModifiedDate":"2023-09-09"},{"lineNumber":74,"author":{"gitId":"Mahidharah"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":75,"author":{"gitId":"Mahidharah"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-06"},{"lineNumber":76,"author":{"gitId":"Mahidharah"},"content":" new Duke(\"data/duke.txt\").run();","lastModifiedDate":"2023-09-06"},{"lineNumber":77,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":78,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"Mahidharah":75,"-":3}},{"path":"src/main/java/duke/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Mahidharah"},"content":"package duke;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"Mahidharah"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"Mahidharah"},"content":"import java.io.*;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"Mahidharah"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"Mahidharah"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"Mahidharah"},"content":" * The Storage class that encapsulates the filepath and the file.","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"Mahidharah"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"Mahidharah"},"content":"public class Storage {","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"Mahidharah"},"content":" final private String FILEPATH;","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"Mahidharah"},"content":" private File file;","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"Mahidharah"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"Mahidharah"},"content":" * Instantiates a new Storage.","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"Mahidharah"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"Mahidharah"},"content":" * @param filepath the filepath","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"Mahidharah"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"Mahidharah"},"content":" Storage(String filepath) {","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"Mahidharah"},"content":" this.FILEPATH \u003d filepath;","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"Mahidharah"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"Mahidharah"},"content":" * Loads file and handles the case if the file does not exist or already exists.","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"Mahidharah"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"Mahidharah"},"content":" * @return the file","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"Mahidharah"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"Mahidharah"},"content":" public File load() {","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"Mahidharah"},"content":" File openfile \u003d new File(FILEPATH);","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"Mahidharah"},"content":" try {","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"Mahidharah"},"content":" if (openfile.createNewFile()) {","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"Mahidharah"},"content":" System.out.println(\"New file created\" + openfile.getName());","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"Mahidharah"},"content":" } else {","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"Mahidharah"},"content":" System.out.println(\"File loaded.\");","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"Mahidharah"},"content":" } catch (IOException | NullPointerException e) {","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"Mahidharah"},"content":" System.out.println(\"An error occurred.\");","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":40,"author":{"gitId":"Mahidharah"},"content":" file \u003d openfile;","lastModifiedDate":"2023-09-06"},{"lineNumber":41,"author":{"gitId":"Mahidharah"},"content":" return openfile;","lastModifiedDate":"2023-09-06"},{"lineNumber":42,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":43,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":44,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":45,"author":{"gitId":"Mahidharah"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":46,"author":{"gitId":"Mahidharah"},"content":" * Updates the file given the updated TaskList list.","lastModifiedDate":"2023-09-09"},{"lineNumber":47,"author":{"gitId":"Mahidharah"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":48,"author":{"gitId":"Mahidharah"},"content":" * @param list the list","lastModifiedDate":"2023-09-09"},{"lineNumber":49,"author":{"gitId":"Mahidharah"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":50,"author":{"gitId":"Mahidharah"},"content":" public void updateFile(ArrayList\u003cTask\u003e list) {","lastModifiedDate":"2023-09-09"},{"lineNumber":51,"author":{"gitId":"Mahidharah"},"content":" try(FileWriter fw \u003d new FileWriter(file, true);","lastModifiedDate":"2023-09-06"},{"lineNumber":52,"author":{"gitId":"Mahidharah"},"content":" BufferedWriter bw \u003d new BufferedWriter(fw);","lastModifiedDate":"2023-09-06"},{"lineNumber":53,"author":{"gitId":"Mahidharah"},"content":" PrintWriter out \u003d new PrintWriter(bw))","lastModifiedDate":"2023-09-06"},{"lineNumber":54,"author":{"gitId":"Mahidharah"},"content":" {","lastModifiedDate":"2023-09-06"},{"lineNumber":55,"author":{"gitId":"Mahidharah"},"content":" out.println(list.get(list.size() - 1).dataString());","lastModifiedDate":"2023-09-06"},{"lineNumber":56,"author":{"gitId":"Mahidharah"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-06"},{"lineNumber":57,"author":{"gitId":"Mahidharah"},"content":" System.out.println(\"nothing\");","lastModifiedDate":"2023-09-06"},{"lineNumber":58,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":59,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":60,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":61,"author":{"gitId":"Mahidharah"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":62,"author":{"gitId":"Mahidharah"},"content":" * Returns the file.","lastModifiedDate":"2023-09-09"},{"lineNumber":63,"author":{"gitId":"Mahidharah"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":64,"author":{"gitId":"Mahidharah"},"content":" * @return the file","lastModifiedDate":"2023-09-09"},{"lineNumber":65,"author":{"gitId":"Mahidharah"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":66,"author":{"gitId":"Mahidharah"},"content":" public File openfile() {","lastModifiedDate":"2023-09-06"},{"lineNumber":67,"author":{"gitId":"Mahidharah"},"content":" return file;","lastModifiedDate":"2023-09-06"},{"lineNumber":68,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":69,"author":{"gitId":"Mahidharah"},"content":"}","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"Mahidharah":69}},{"path":"src/main/java/duke/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Mahidharah"},"content":"package duke;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"Mahidharah"},"content":"import duke.exceptions.DukeException;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"Mahidharah"},"content":"import duke.parsers.Parser;","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"Mahidharah"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"Mahidharah"},"content":"import java.io.File;","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"Mahidharah"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"Mahidharah"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"Mahidharah"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"Mahidharah"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"Mahidharah"},"content":" * The type Task list.","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"Mahidharah"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"Mahidharah"},"content":"public class TaskList {","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"Mahidharah"},"content":" private ArrayList\u003cTask\u003e taskList;","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"Mahidharah"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"Mahidharah"},"content":" * Instantiates a new Task list, given a file to read from.","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"Mahidharah"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"Mahidharah"},"content":" * @param file the file","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"Mahidharah"},"content":" * @throws DukeException the duke exception if file is somehow not found","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"Mahidharah"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"Mahidharah"},"content":" TaskList(File file) throws DukeException {","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"Mahidharah"},"content":" this.taskList \u003d new ArrayList\u003cTask\u003e();","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"Mahidharah"},"content":" try {","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"Mahidharah"},"content":" Scanner reader \u003d new Scanner(file);","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"Mahidharah"},"content":" while (reader.hasNextLine()) {","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"Mahidharah"},"content":" String data \u003d reader.nextLine();","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"Mahidharah"},"content":" try {","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"Mahidharah"},"content":" taskList.add(Parser.parseFileInfo(data));","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"Mahidharah"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"Mahidharah"},"content":" System.out.println(e);","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"Mahidharah"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"Mahidharah"},"content":" throw new DukeException(\"FileNotFound Error\");","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":40,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":41,"author":{"gitId":"Mahidharah"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":42,"author":{"gitId":"Mahidharah"},"content":" * Instantiates a new Task list.","lastModifiedDate":"2023-09-09"},{"lineNumber":43,"author":{"gitId":"Mahidharah"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":44,"author":{"gitId":"Mahidharah"},"content":" TaskList() {","lastModifiedDate":"2023-09-06"},{"lineNumber":45,"author":{"gitId":"Mahidharah"},"content":" this.taskList \u003d new ArrayList\u003cTask\u003e();","lastModifiedDate":"2023-09-09"},{"lineNumber":46,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":47,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":48,"author":{"gitId":"Mahidharah"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":49,"author":{"gitId":"Mahidharah"},"content":" * Returns the tasklist.","lastModifiedDate":"2023-09-09"},{"lineNumber":50,"author":{"gitId":"Mahidharah"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":51,"author":{"gitId":"Mahidharah"},"content":" * @return the array list with Tasks.","lastModifiedDate":"2023-09-09"},{"lineNumber":52,"author":{"gitId":"Mahidharah"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":53,"author":{"gitId":"Mahidharah"},"content":" public ArrayList\u003cTask\u003e list() {","lastModifiedDate":"2023-09-06"},{"lineNumber":54,"author":{"gitId":"Mahidharah"},"content":" return taskList;","lastModifiedDate":"2023-09-09"},{"lineNumber":55,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":56,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":57,"author":{"gitId":"Mahidharah"},"content":" public ArrayList\u003cTask\u003e contains(String key) {","lastModifiedDate":"2023-09-09"},{"lineNumber":58,"author":{"gitId":"Mahidharah"},"content":" ArrayList\u003cTask\u003e temp \u003d new ArrayList\u003c\u003e(this.taskList);","lastModifiedDate":"2023-09-09"},{"lineNumber":59,"author":{"gitId":"Mahidharah"},"content":" temp.removeIf(t -\u003e !t.containsStr(key));","lastModifiedDate":"2023-09-09"},{"lineNumber":60,"author":{"gitId":"Mahidharah"},"content":" return temp;","lastModifiedDate":"2023-09-09"},{"lineNumber":61,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":62,"author":{"gitId":"Mahidharah"},"content":"}","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"Mahidharah":62}},{"path":"src/main/java/duke/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Mahidharah"},"content":"package duke;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"Mahidharah"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"Mahidharah"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"Mahidharah"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"Mahidharah"},"content":" * The Ui, aka Userinterface that handles all the outputs shows to user.","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"Mahidharah"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"Mahidharah"},"content":"public class Ui {","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"Mahidharah"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"Mahidharah"},"content":" * Instantiates a new Ui.","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"Mahidharah"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"Mahidharah"},"content":" public Ui() {}","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"Mahidharah"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"Mahidharah"},"content":" * Displays the welcome message.","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"Mahidharah"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"Mahidharah"},"content":" public void introMessage() {","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"Mahidharah"},"content":" System.out.println(\"Hello! I\u0027m IPSVIJAYKUMARAAKOODAIRRUKALAM\");","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"Mahidharah"},"content":" System.out.println(\"What can I do for you?\");","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"Mahidharah"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"Mahidharah"},"content":" * Displays the contents in the TaskList list.","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"Mahidharah"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"Mahidharah"},"content":" * @param list the list","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"Mahidharah"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"Mahidharah"},"content":" public void printList(ArrayList\u003cTask\u003e list) {","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"Mahidharah"},"content":" for (int i \u003d 0; i \u003c list.size(); i++) {","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"Mahidharah"},"content":" System.out.println(i + 1 + \".\" + list.get(i));","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"Mahidharah"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"Mahidharah"},"content":" * Displays the message when a Task is marked as done by user.","lastModifiedDate":"2023-09-09"},{"lineNumber":37,"author":{"gitId":"Mahidharah"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":38,"author":{"gitId":"Mahidharah"},"content":" * @param task the task","lastModifiedDate":"2023-09-09"},{"lineNumber":39,"author":{"gitId":"Mahidharah"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"Mahidharah"},"content":" public void markedMessage(Task task) {","lastModifiedDate":"2023-09-09"},{"lineNumber":41,"author":{"gitId":"Mahidharah"},"content":" System.out.println(\"Nice! I\u0027ve marked this task as done:\");","lastModifiedDate":"2023-09-06"},{"lineNumber":42,"author":{"gitId":"Mahidharah"},"content":" System.out.println(\" \" + task);","lastModifiedDate":"2023-09-06"},{"lineNumber":43,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":44,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":45,"author":{"gitId":"Mahidharah"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":46,"author":{"gitId":"Mahidharah"},"content":" * Displays the message when the user does not type in what Task is to be marked.","lastModifiedDate":"2023-09-09"},{"lineNumber":47,"author":{"gitId":"Mahidharah"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":48,"author":{"gitId":"Mahidharah"},"content":" public void invalidMark() {","lastModifiedDate":"2023-09-09"},{"lineNumber":49,"author":{"gitId":"Mahidharah"},"content":" System.out.println(\"Enter a valid number to mark\");","lastModifiedDate":"2023-09-06"},{"lineNumber":50,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":51,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":52,"author":{"gitId":"Mahidharah"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":53,"author":{"gitId":"Mahidharah"},"content":" * Displays the message when a Task is successfully added to the TaskList list.","lastModifiedDate":"2023-09-09"},{"lineNumber":54,"author":{"gitId":"Mahidharah"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":55,"author":{"gitId":"Mahidharah"},"content":" * @param task the task","lastModifiedDate":"2023-09-09"},{"lineNumber":56,"author":{"gitId":"Mahidharah"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":57,"author":{"gitId":"Mahidharah"},"content":" public void addedMessage(Task task) {","lastModifiedDate":"2023-09-09"},{"lineNumber":58,"author":{"gitId":"Mahidharah"},"content":" System.out.println(\"Got it. I\u0027ve added this task:\");","lastModifiedDate":"2023-09-06"},{"lineNumber":59,"author":{"gitId":"Mahidharah"},"content":" System.out.println(\" \" + task.toString());","lastModifiedDate":"2023-09-06"},{"lineNumber":60,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":61,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":62,"author":{"gitId":"Mahidharah"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":63,"author":{"gitId":"Mahidharah"},"content":" * Displays the number of tasks in the list.","lastModifiedDate":"2023-09-09"},{"lineNumber":64,"author":{"gitId":"Mahidharah"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":65,"author":{"gitId":"Mahidharah"},"content":" * @param list the list","lastModifiedDate":"2023-09-09"},{"lineNumber":66,"author":{"gitId":"Mahidharah"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":67,"author":{"gitId":"Mahidharah"},"content":" public void listMessage(ArrayList\u003cTask\u003e list) {","lastModifiedDate":"2023-09-09"},{"lineNumber":68,"author":{"gitId":"Mahidharah"},"content":" System.out.println(\"Now you have \" + list.size() + \" tasks in the list.\");","lastModifiedDate":"2023-09-06"},{"lineNumber":69,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":70,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":71,"author":{"gitId":"Mahidharah"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":72,"author":{"gitId":"Mahidharah"},"content":" * Displays the message when a Task is successfully removed from the TaskList list.","lastModifiedDate":"2023-09-09"},{"lineNumber":73,"author":{"gitId":"Mahidharah"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":74,"author":{"gitId":"Mahidharah"},"content":" * @param task the task","lastModifiedDate":"2023-09-09"},{"lineNumber":75,"author":{"gitId":"Mahidharah"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":76,"author":{"gitId":"Mahidharah"},"content":" public void removedMessage(Task task) {","lastModifiedDate":"2023-09-09"},{"lineNumber":77,"author":{"gitId":"Mahidharah"},"content":" System.out.println(\"Noted. I\u0027ve removed this task:\");","lastModifiedDate":"2023-09-06"},{"lineNumber":78,"author":{"gitId":"Mahidharah"},"content":" System.out.println(\" \" + task);","lastModifiedDate":"2023-09-06"},{"lineNumber":79,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":80,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":81,"author":{"gitId":"Mahidharah"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":82,"author":{"gitId":"Mahidharah"},"content":" * Displays the message when the user does not type in what Task is to be marked.","lastModifiedDate":"2023-09-09"},{"lineNumber":83,"author":{"gitId":"Mahidharah"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":84,"author":{"gitId":"Mahidharah"},"content":" public void validNumberMessage() {","lastModifiedDate":"2023-09-09"},{"lineNumber":85,"author":{"gitId":"Mahidharah"},"content":" System.out.println(\"Enter a valid number to mark\");","lastModifiedDate":"2023-09-06"},{"lineNumber":86,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":87,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":88,"author":{"gitId":"Mahidharah"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":89,"author":{"gitId":"Mahidharah"},"content":" * Displays the goodbye message when the program is about to terminate expectedly.","lastModifiedDate":"2023-09-09"},{"lineNumber":90,"author":{"gitId":"Mahidharah"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":91,"author":{"gitId":"Mahidharah"},"content":" public void byeMessage() {","lastModifiedDate":"2023-09-09"},{"lineNumber":92,"author":{"gitId":"Mahidharah"},"content":" System.out.println(\"Bye. Hope to see you again soon!\");","lastModifiedDate":"2023-09-06"},{"lineNumber":93,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":94,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":95,"author":{"gitId":"Mahidharah"},"content":" public void findmsg() {","lastModifiedDate":"2023-09-09"},{"lineNumber":96,"author":{"gitId":"Mahidharah"},"content":" System.out.println(\"Here are the matching tasks in your list:\");","lastModifiedDate":"2023-09-09"},{"lineNumber":97,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":98,"author":{"gitId":"Mahidharah"},"content":"}","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"Mahidharah":98}},{"path":"src/main/java/duke/exceptions/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Mahidharah"},"content":"package duke.exceptions;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"Mahidharah"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"Mahidharah"},"content":" * The Duke exception.","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"Mahidharah"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"Mahidharah"},"content":"public class DukeException extends Exception{","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"Mahidharah"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"Mahidharah"},"content":" * The description of the error.","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"Mahidharah"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"Mahidharah"},"content":" private String msg;","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"Mahidharah"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"Mahidharah"},"content":" * Instantiates a new Duke exception.","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"Mahidharah"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"Mahidharah"},"content":" * @param msg the description","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"Mahidharah"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"Mahidharah"},"content":" public DukeException(String msg) {","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"Mahidharah"},"content":" this.msg \u003d msg;","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"Mahidharah"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"Mahidharah"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"Mahidharah"},"content":" return this.msg;","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"Mahidharah"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Mahidharah":25}},{"path":"src/main/java/duke/parsers/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Mahidharah"},"content":"package duke.parsers;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"Mahidharah"},"content":"import duke.Storage;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"Mahidharah"},"content":"import duke.TaskList;","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"Mahidharah"},"content":"import duke.Ui;","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"Mahidharah"},"content":"import duke.exceptions.DukeException;","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"Mahidharah"},"content":"import duke.tasks.Deadline;","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"Mahidharah"},"content":"import duke.tasks.Event;","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"Mahidharah"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"Mahidharah"},"content":"import duke.tasks.ToDo;","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"Mahidharah"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"Mahidharah"},"content":"import java.util.Objects;","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"Mahidharah"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"Mahidharah"},"content":" * The Parser class that makes sense of the user\u0027s input.","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"Mahidharah"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"Mahidharah"},"content":"public class Parser {","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"Mahidharah"},"content":" private Ui ui;","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"Mahidharah"},"content":" private Storage storage;","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"Mahidharah"},"content":" private TaskList tasks;","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"Mahidharah"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"Mahidharah"},"content":" * Instantiates a new Parser.","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"Mahidharah"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"Mahidharah"},"content":" * @param ui the ui","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"Mahidharah"},"content":" * @param storage the storage","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"Mahidharah"},"content":" * @param tasklist the tasklist","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"Mahidharah"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"Mahidharah"},"content":" public Parser(Ui ui, Storage storage, TaskList tasklist) {","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"Mahidharah"},"content":" this.ui \u003d ui;","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"Mahidharah"},"content":" this.storage \u003d storage;","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"Mahidharah"},"content":" this.tasks \u003d tasklist;","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":37,"author":{"gitId":"Mahidharah"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":38,"author":{"gitId":"Mahidharah"},"content":" * Makes sense of file data and creates tasks accordingly.","lastModifiedDate":"2023-09-09"},{"lineNumber":39,"author":{"gitId":"Mahidharah"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"Mahidharah"},"content":" * @param input the String line in the file","lastModifiedDate":"2023-09-09"},{"lineNumber":41,"author":{"gitId":"Mahidharah"},"content":" * @return the corresponding task","lastModifiedDate":"2023-09-09"},{"lineNumber":42,"author":{"gitId":"Mahidharah"},"content":" * @throws DukeException the duke exception if the file data is incorrect or corrupted","lastModifiedDate":"2023-09-09"},{"lineNumber":43,"author":{"gitId":"Mahidharah"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":44,"author":{"gitId":"Mahidharah"},"content":" public static Task parseFileInfo(String input) throws DukeException {","lastModifiedDate":"2023-09-09"},{"lineNumber":45,"author":{"gitId":"Mahidharah"},"content":" String regex \u003d \" : \";","lastModifiedDate":"2023-09-06"},{"lineNumber":46,"author":{"gitId":"Mahidharah"},"content":" String[] split \u003d input.split(regex);","lastModifiedDate":"2023-09-06"},{"lineNumber":47,"author":{"gitId":"Mahidharah"},"content":" if (split[0].equals(\"T\")) {","lastModifiedDate":"2023-09-06"},{"lineNumber":48,"author":{"gitId":"Mahidharah"},"content":" ToDo todo \u003d new ToDo(split[2]);","lastModifiedDate":"2023-09-06"},{"lineNumber":49,"author":{"gitId":"Mahidharah"},"content":" if (Objects.equals(split[1], \"1\")) {","lastModifiedDate":"2023-09-09"},{"lineNumber":50,"author":{"gitId":"Mahidharah"},"content":" todo.setdone();","lastModifiedDate":"2023-09-06"},{"lineNumber":51,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":52,"author":{"gitId":"Mahidharah"},"content":" return todo;","lastModifiedDate":"2023-09-06"},{"lineNumber":53,"author":{"gitId":"Mahidharah"},"content":" } else if (split[0].equals(\"D\")) {","lastModifiedDate":"2023-09-06"},{"lineNumber":54,"author":{"gitId":"Mahidharah"},"content":" Deadline deadline \u003d new Deadline(split[2], split[3]);","lastModifiedDate":"2023-09-06"},{"lineNumber":55,"author":{"gitId":"Mahidharah"},"content":" if (Objects.equals(split[1], \"1\")) {","lastModifiedDate":"2023-09-09"},{"lineNumber":56,"author":{"gitId":"Mahidharah"},"content":" deadline.setdone();","lastModifiedDate":"2023-09-06"},{"lineNumber":57,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":58,"author":{"gitId":"Mahidharah"},"content":" return deadline;","lastModifiedDate":"2023-09-06"},{"lineNumber":59,"author":{"gitId":"Mahidharah"},"content":" } else if (split[0].equals(\"E\")) {","lastModifiedDate":"2023-09-06"},{"lineNumber":60,"author":{"gitId":"Mahidharah"},"content":" Event event \u003d new Event(split[2], split[3], split[4]);","lastModifiedDate":"2023-09-06"},{"lineNumber":61,"author":{"gitId":"Mahidharah"},"content":" if (Objects.equals(split[1], \"1\")) {","lastModifiedDate":"2023-09-09"},{"lineNumber":62,"author":{"gitId":"Mahidharah"},"content":" event.setdone();","lastModifiedDate":"2023-09-06"},{"lineNumber":63,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":64,"author":{"gitId":"Mahidharah"},"content":" return event;","lastModifiedDate":"2023-09-06"},{"lineNumber":65,"author":{"gitId":"Mahidharah"},"content":" } else {","lastModifiedDate":"2023-09-06"},{"lineNumber":66,"author":{"gitId":"Mahidharah"},"content":" throw new DukeException(\"cannot create task\");","lastModifiedDate":"2023-09-06"},{"lineNumber":67,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":68,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":69,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":70,"author":{"gitId":"Mahidharah"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":71,"author":{"gitId":"Mahidharah"},"content":" * Makes sense of user inputs, makes changes to lists and file and outputs messages","lastModifiedDate":"2023-09-09"},{"lineNumber":72,"author":{"gitId":"Mahidharah"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":73,"author":{"gitId":"Mahidharah"},"content":" * @param userinput the user\u0027s input","lastModifiedDate":"2023-09-09"},{"lineNumber":74,"author":{"gitId":"Mahidharah"},"content":" * @throws DukeException the duke exception when the user input is incorrect","lastModifiedDate":"2023-09-09"},{"lineNumber":75,"author":{"gitId":"Mahidharah"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":76,"author":{"gitId":"Mahidharah"},"content":" public void parse(String userinput) throws DukeException {","lastModifiedDate":"2023-09-06"},{"lineNumber":77,"author":{"gitId":"Mahidharah"},"content":" if (userinput.equalsIgnoreCase(\"list\")) {","lastModifiedDate":"2023-09-06"},{"lineNumber":78,"author":{"gitId":"Mahidharah"},"content":" ui.printList(tasks.list());","lastModifiedDate":"2023-09-09"},{"lineNumber":79,"author":{"gitId":"Mahidharah"},"content":" } else if (userinput.length() \u003e\u003d 6 \u0026\u0026 userinput.substring(0, 5).equalsIgnoreCase(\"mark \")) {","lastModifiedDate":"2023-09-06"},{"lineNumber":80,"author":{"gitId":"Mahidharah"},"content":" try {","lastModifiedDate":"2023-09-06"},{"lineNumber":81,"author":{"gitId":"Mahidharah"},"content":" int taskno \u003d Integer.parseInt(userinput.substring(5));","lastModifiedDate":"2023-09-06"},{"lineNumber":82,"author":{"gitId":"Mahidharah"},"content":" if (taskno \u003c\u003d tasks.list().size()) {","lastModifiedDate":"2023-09-06"},{"lineNumber":83,"author":{"gitId":"Mahidharah"},"content":" Task task \u003d tasks.list().get(taskno - 1);","lastModifiedDate":"2023-09-06"},{"lineNumber":84,"author":{"gitId":"Mahidharah"},"content":" task.setdone();","lastModifiedDate":"2023-09-06"},{"lineNumber":85,"author":{"gitId":"Mahidharah"},"content":" ui.markedMessage(task);","lastModifiedDate":"2023-09-09"},{"lineNumber":86,"author":{"gitId":"Mahidharah"},"content":" } else {","lastModifiedDate":"2023-09-06"},{"lineNumber":87,"author":{"gitId":"Mahidharah"},"content":" ui.invalidMark();","lastModifiedDate":"2023-09-09"},{"lineNumber":88,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":89,"author":{"gitId":"Mahidharah"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-06"},{"lineNumber":90,"author":{"gitId":"Mahidharah"},"content":" ui.invalidMark();","lastModifiedDate":"2023-09-09"},{"lineNumber":91,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":92,"author":{"gitId":"Mahidharah"},"content":" } else if (userinput.length() \u003e\u003d 4 \u0026\u0026 userinput.substring(0, 4).equalsIgnoreCase(\"todo\")) {","lastModifiedDate":"2023-09-06"},{"lineNumber":93,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":94,"author":{"gitId":"Mahidharah"},"content":" ToDo todo \u003d new ToDo(userinput.substring(4));","lastModifiedDate":"2023-09-06"},{"lineNumber":95,"author":{"gitId":"Mahidharah"},"content":" tasks.list().add(todo);","lastModifiedDate":"2023-09-06"},{"lineNumber":96,"author":{"gitId":"Mahidharah"},"content":" ui.addedMessage(todo);","lastModifiedDate":"2023-09-09"},{"lineNumber":97,"author":{"gitId":"Mahidharah"},"content":" ui.listMessage(tasks.list());","lastModifiedDate":"2023-09-09"},{"lineNumber":98,"author":{"gitId":"Mahidharah"},"content":" storage.updateFile(tasks.list());","lastModifiedDate":"2023-09-09"},{"lineNumber":99,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":100,"author":{"gitId":"Mahidharah"},"content":" } else if (userinput.length() \u003e\u003d 8 \u0026\u0026 userinput.substring(0, 8).equalsIgnoreCase(\"deadline\")) {","lastModifiedDate":"2023-09-06"},{"lineNumber":101,"author":{"gitId":"Mahidharah"},"content":" String[] segments \u003d userinput.split(\" /by \");","lastModifiedDate":"2023-09-06"},{"lineNumber":102,"author":{"gitId":"Mahidharah"},"content":" Deadline deadline \u003d new Deadline(segments[0].substring(8), segments[1]);","lastModifiedDate":"2023-09-06"},{"lineNumber":103,"author":{"gitId":"Mahidharah"},"content":" tasks.list().add(deadline);","lastModifiedDate":"2023-09-06"},{"lineNumber":104,"author":{"gitId":"Mahidharah"},"content":" ui.addedMessage(deadline);","lastModifiedDate":"2023-09-09"},{"lineNumber":105,"author":{"gitId":"Mahidharah"},"content":" ui.listMessage(tasks.list());","lastModifiedDate":"2023-09-09"},{"lineNumber":106,"author":{"gitId":"Mahidharah"},"content":" storage.updateFile(tasks.list());","lastModifiedDate":"2023-09-09"},{"lineNumber":107,"author":{"gitId":"Mahidharah"},"content":" } else if (userinput.length() \u003e\u003d 7 \u0026\u0026 userinput.substring(0, 6).equalsIgnoreCase(\"event \")) {","lastModifiedDate":"2023-09-06"},{"lineNumber":108,"author":{"gitId":"Mahidharah"},"content":" String[] segments1 \u003d userinput.split(\" /from \");","lastModifiedDate":"2023-09-06"},{"lineNumber":109,"author":{"gitId":"Mahidharah"},"content":" String from \u003d segments1[1].split(\" /to \")[0];","lastModifiedDate":"2023-09-06"},{"lineNumber":110,"author":{"gitId":"Mahidharah"},"content":" String[] segments2 \u003d segments1[1].split(\" /to \");","lastModifiedDate":"2023-09-06"},{"lineNumber":111,"author":{"gitId":"Mahidharah"},"content":" Event event \u003d new Event(segments1[0].substring(5), from, segments2[1]);","lastModifiedDate":"2023-09-06"},{"lineNumber":112,"author":{"gitId":"Mahidharah"},"content":" tasks.list().add(event);","lastModifiedDate":"2023-09-06"},{"lineNumber":113,"author":{"gitId":"Mahidharah"},"content":" ui.addedMessage(event);","lastModifiedDate":"2023-09-09"},{"lineNumber":114,"author":{"gitId":"Mahidharah"},"content":" ui.listMessage(tasks.list());","lastModifiedDate":"2023-09-09"},{"lineNumber":115,"author":{"gitId":"Mahidharah"},"content":" storage.updateFile(tasks.list());","lastModifiedDate":"2023-09-09"},{"lineNumber":116,"author":{"gitId":"Mahidharah"},"content":" } else if (userinput.length() \u003e\u003d 8 \u0026\u0026 userinput.substring(0, 7).equalsIgnoreCase(\"delete \")) {","lastModifiedDate":"2023-09-06"},{"lineNumber":117,"author":{"gitId":"Mahidharah"},"content":" try {","lastModifiedDate":"2023-09-06"},{"lineNumber":118,"author":{"gitId":"Mahidharah"},"content":" int taskno \u003d Integer.parseInt(userinput.substring(7));","lastModifiedDate":"2023-09-06"},{"lineNumber":119,"author":{"gitId":"Mahidharah"},"content":" if (taskno \u003c\u003d tasks.list().size()) {","lastModifiedDate":"2023-09-06"},{"lineNumber":120,"author":{"gitId":"Mahidharah"},"content":" Task task \u003d tasks.list().get(taskno - 1);","lastModifiedDate":"2023-09-06"},{"lineNumber":121,"author":{"gitId":"Mahidharah"},"content":" tasks.list().remove(taskno - 1);","lastModifiedDate":"2023-09-06"},{"lineNumber":122,"author":{"gitId":"Mahidharah"},"content":" ui.removedMessage(task);","lastModifiedDate":"2023-09-09"},{"lineNumber":123,"author":{"gitId":"Mahidharah"},"content":" ui.listMessage(tasks.list());","lastModifiedDate":"2023-09-09"},{"lineNumber":124,"author":{"gitId":"Mahidharah"},"content":" } else {","lastModifiedDate":"2023-09-06"},{"lineNumber":125,"author":{"gitId":"Mahidharah"},"content":" ui.validNumberMessage();","lastModifiedDate":"2023-09-09"},{"lineNumber":126,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":127,"author":{"gitId":"Mahidharah"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-06"},{"lineNumber":128,"author":{"gitId":"Mahidharah"},"content":" ui.validNumberMessage();","lastModifiedDate":"2023-09-09"},{"lineNumber":129,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":130,"author":{"gitId":"Mahidharah"},"content":" } else if (userinput.length() \u003e\u003d 6 \u0026\u0026 userinput.substring(0, 5).equalsIgnoreCase(\"find \")) {","lastModifiedDate":"2023-09-09"},{"lineNumber":131,"author":{"gitId":"Mahidharah"},"content":" ui.findmsg();","lastModifiedDate":"2023-09-09"},{"lineNumber":132,"author":{"gitId":"Mahidharah"},"content":" ui.printList(tasks.contains(userinput.substring(5)));","lastModifiedDate":"2023-09-09"},{"lineNumber":133,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":134,"author":{"gitId":"Mahidharah"},"content":" } else {","lastModifiedDate":"2023-09-06"},{"lineNumber":135,"author":{"gitId":"Mahidharah"},"content":" throw new DukeException(\"☹ OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-09-06"},{"lineNumber":136,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":137,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":138,"author":{"gitId":"Mahidharah"},"content":"}","lastModifiedDate":"2023-09-06"}],"authorContributionMap":{"Mahidharah":138}},{"path":"src/main/java/duke/tasks/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Mahidharah"},"content":"package duke.tasks;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"Mahidharah"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Mahidharah"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Mahidharah"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Mahidharah"},"content":"import duke.exceptions.DukeException;","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Mahidharah"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"Mahidharah"},"content":" * The Deadline class, which is a Task that has a specified due date.","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"Mahidharah"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"Mahidharah"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"Mahidharah"},"content":" private final LocalDate by;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"Mahidharah"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"Mahidharah"},"content":" * Instantiates a new Deadline.","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"Mahidharah"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"Mahidharah"},"content":" * @param name the description of the Deadline","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"Mahidharah"},"content":" * @param by the due date","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"Mahidharah"},"content":" * @throws DukeException the duke exception for when the description is empty or the format is not followed","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"Mahidharah"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"Mahidharah"},"content":" public Deadline(String name, String by) throws DukeException {","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"Mahidharah"},"content":" super(name);","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"Mahidharah"},"content":" if (name.trim().isEmpty()) {","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"Mahidharah"},"content":" throw new DukeException(\"☹ OOPS!!! The description of a deadline cannot be empty.\");","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"Mahidharah"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Mahidharah"},"content":" this.by \u003d LocalDate.parse(by);","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Mahidharah"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Mahidharah"},"content":" throw new DukeException(\"☹ OOPS!!! Follow the format for a deadline.\");","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"Mahidharah"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"Mahidharah"},"content":" * Returns the String description of a task suitable for file storage.","lastModifiedDate":"2023-09-09"},{"lineNumber":35,"author":{"gitId":"Mahidharah"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"Mahidharah"},"content":" * @return the task String","lastModifiedDate":"2023-09-09"},{"lineNumber":37,"author":{"gitId":"Mahidharah"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":38,"author":{"gitId":"Mahidharah"},"content":" public String dataString() {","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"Mahidharah"},"content":" if (this.isdone()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"Mahidharah"},"content":" return \"T : 1 : \" + this.getname() + \":\" + this.by;","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"Mahidharah"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"Mahidharah"},"content":" return \"T : 0 : \" + this.getname() + \":\" + this.by;","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"Mahidharah"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":47,"author":{"gitId":"Mahidharah"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":48,"author":{"gitId":"Mahidharah"},"content":" DateTimeFormatter format \u003d DateTimeFormatter.ofPattern(\"MMM d yyyy\");","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"Mahidharah"},"content":" return \"[D]\" + super.toString() + \" (by: \" + this.by.format(format) + \")\";","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":51,"author":{"gitId":"Mahidharah"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Mahidharah":51}},{"path":"src/main/java/duke/tasks/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Mahidharah"},"content":"package duke.tasks;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"Mahidharah"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Mahidharah"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Mahidharah"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Mahidharah"},"content":"import duke.exceptions.DukeException;","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Mahidharah"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"Mahidharah"},"content":" * The Event class, which is a Task that has a specified start and end date.","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"Mahidharah"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"Mahidharah"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"Mahidharah"},"content":" private final LocalDate from;","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Mahidharah"},"content":" private final LocalDate to;","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"Mahidharah"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"Mahidharah"},"content":" * Instantiates a new Event.","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"Mahidharah"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"Mahidharah"},"content":" * @param name the description of the Event","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"Mahidharah"},"content":" * @param from the start date","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"Mahidharah"},"content":" * @param to the end date","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"Mahidharah"},"content":" * @throws DukeException the duke exception","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"Mahidharah"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"Mahidharah"},"content":" public Event(String name, String from, String to) throws DukeException {","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"Mahidharah"},"content":" super(name);","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"Mahidharah"},"content":" if (name.trim().isEmpty()) {","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"Mahidharah"},"content":" throw new DukeException(\"☹ OOPS!!! The description of an event cannot be empty.\");","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"Mahidharah"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Mahidharah"},"content":" this.from \u003d LocalDate.parse(from);","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Mahidharah"},"content":" this.to \u003d LocalDate.parse(to);","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Mahidharah"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Mahidharah"},"content":" throw new DukeException(\"☹ OOPS!!! Follow the format for an event.\");","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"Mahidharah"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":38,"author":{"gitId":"Mahidharah"},"content":" * Returns the String description of a task suitable for file storage.","lastModifiedDate":"2023-09-09"},{"lineNumber":39,"author":{"gitId":"Mahidharah"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"Mahidharah"},"content":" * @return the task String","lastModifiedDate":"2023-09-09"},{"lineNumber":41,"author":{"gitId":"Mahidharah"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":42,"author":{"gitId":"Mahidharah"},"content":" public String dataString() {","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"Mahidharah"},"content":" if (this.isdone()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"Mahidharah"},"content":" return \"T : 1 : \" + this.getname() + \":\" + this.from + \":\" + this.to;","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"Mahidharah"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"Mahidharah"},"content":" return \"T : 0 : \" + this.getname() + \":\" + this.from + \":\" + this.to;","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"Mahidharah"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":51,"author":{"gitId":"Mahidharah"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":52,"author":{"gitId":"Mahidharah"},"content":" DateTimeFormatter format \u003d DateTimeFormatter.ofPattern(\"MMM d yyyy\");","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"Mahidharah"},"content":" return \"[E]\" + super.toString() + \" (from: \" + this.from.format(format) +","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"Mahidharah"},"content":" \") (to: \" + this.to.format(format) + \")\";","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":56,"author":{"gitId":"Mahidharah"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Mahidharah":56}},{"path":"src/main/java/duke/tasks/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Mahidharah"},"content":"package duke.tasks;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"Mahidharah"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"Mahidharah"},"content":" * The Task that encapsulates its description and its completion state.","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"Mahidharah"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"Mahidharah"},"content":"public abstract class Task {","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"Mahidharah"},"content":" private boolean done;","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"Mahidharah"},"content":" private final String name;","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"Mahidharah"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"Mahidharah"},"content":" * Returns the String description of a task suitable for file storage.","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"Mahidharah"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"Mahidharah"},"content":" * @return the task String","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"Mahidharah"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"Mahidharah"},"content":" public abstract String dataString();","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"Mahidharah"},"content":" private Task() {","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"Mahidharah"},"content":" this.name \u003d \"\";","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"Mahidharah"},"content":" done \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"Mahidharah"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"Mahidharah"},"content":" * Instantiates a new Task.","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"Mahidharah"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"Mahidharah"},"content":" * @param name the description of the Task","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"Mahidharah"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"Mahidharah"},"content":" public Task(String name) {","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"Mahidharah"},"content":" this.name \u003d name;","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"Mahidharah"},"content":" done \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"Mahidharah"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"Mahidharah"},"content":" * Sets the Task as completed.","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"Mahidharah"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":35,"author":{"gitId":"Mahidharah"},"content":" public void setdone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"Mahidharah"},"content":" done \u003d true;","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"Mahidharah"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"Mahidharah"},"content":" * Returns the completions status of the Task.","lastModifiedDate":"2023-09-09"},{"lineNumber":41,"author":{"gitId":"Mahidharah"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":42,"author":{"gitId":"Mahidharah"},"content":" * @return a boolean for completions status","lastModifiedDate":"2023-09-09"},{"lineNumber":43,"author":{"gitId":"Mahidharah"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":44,"author":{"gitId":"Mahidharah"},"content":" public boolean isdone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":45,"author":{"gitId":"Mahidharah"},"content":" return this.done;","lastModifiedDate":"2023-08-24"},{"lineNumber":46,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":47,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":48,"author":{"gitId":"Mahidharah"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":49,"author":{"gitId":"Mahidharah"},"content":" * Return the description of the task.","lastModifiedDate":"2023-09-09"},{"lineNumber":50,"author":{"gitId":"Mahidharah"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":51,"author":{"gitId":"Mahidharah"},"content":" * @return the Task description","lastModifiedDate":"2023-09-09"},{"lineNumber":52,"author":{"gitId":"Mahidharah"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":53,"author":{"gitId":"Mahidharah"},"content":" public String getname() {","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"Mahidharah"},"content":" return this.name;","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"Mahidharah"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":58,"author":{"gitId":"Mahidharah"},"content":" * Checks if a given String key is contained in the description of task","lastModifiedDate":"2023-09-09"},{"lineNumber":59,"author":{"gitId":"Mahidharah"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":60,"author":{"gitId":"Mahidharah"},"content":" * @param str the str","lastModifiedDate":"2023-09-09"},{"lineNumber":61,"author":{"gitId":"Mahidharah"},"content":" * @return the boolean","lastModifiedDate":"2023-09-09"},{"lineNumber":62,"author":{"gitId":"Mahidharah"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":63,"author":{"gitId":"Mahidharah"},"content":" public boolean containsStr(String str) {","lastModifiedDate":"2023-09-09"},{"lineNumber":64,"author":{"gitId":"Mahidharah"},"content":" return name.toLowerCase().contains(str.toLowerCase());","lastModifiedDate":"2023-09-09"},{"lineNumber":65,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":66,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"Mahidharah"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":68,"author":{"gitId":"Mahidharah"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":69,"author":{"gitId":"Mahidharah"},"content":" String box;","lastModifiedDate":"2023-08-24"},{"lineNumber":70,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":71,"author":{"gitId":"Mahidharah"},"content":" if (done) {","lastModifiedDate":"2023-08-24"},{"lineNumber":72,"author":{"gitId":"Mahidharah"},"content":" box \u003d \"[X] \";","lastModifiedDate":"2023-08-24"},{"lineNumber":73,"author":{"gitId":"Mahidharah"},"content":" } else {","lastModifiedDate":"2023-08-24"},{"lineNumber":74,"author":{"gitId":"Mahidharah"},"content":" box \u003d \"[ ] \";","lastModifiedDate":"2023-08-24"},{"lineNumber":75,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":76,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":77,"author":{"gitId":"Mahidharah"},"content":" return box + name;","lastModifiedDate":"2023-08-24"},{"lineNumber":78,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":79,"author":{"gitId":"Mahidharah"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Mahidharah":79}},{"path":"src/main/java/duke/tasks/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Mahidharah"},"content":"package duke.tasks;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"Mahidharah"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"Mahidharah"},"content":"import duke.exceptions.DukeException;","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"Mahidharah"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"Mahidharah"},"content":" * The ToDo class, which is a task to be done.","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"Mahidharah"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"Mahidharah"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"Mahidharah"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"Mahidharah"},"content":" * Instantiates a new ToDo.","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"Mahidharah"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"Mahidharah"},"content":" * @param name the description of the ToDo","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"Mahidharah"},"content":" * @throws DukeException a duke exception for when the description is empty","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"Mahidharah"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"Mahidharah"},"content":" public ToDo(String name) throws DukeException {","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"Mahidharah"},"content":" super(name);","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"Mahidharah"},"content":" if (name.trim().isEmpty()) {","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"Mahidharah"},"content":" throw new DukeException(\"☹ OOPS!!! The description of a todo cannot be empty.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"Mahidharah"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"Mahidharah"},"content":" * Returns the String description of a task suitable for file storage.","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"Mahidharah"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"Mahidharah"},"content":" * @return the task String","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"Mahidharah"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"Mahidharah"},"content":" public String dataString() {","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Mahidharah"},"content":" if (this.isdone()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Mahidharah"},"content":" return \"T : 1 : \" + this.getname();","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Mahidharah"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Mahidharah"},"content":" return \"T : 0 : \" + this.getname();","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"Mahidharah"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"Mahidharah"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"Mahidharah"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"Mahidharah"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Mahidharah":41}},{"path":"src/test/java/duke/tasks/ToDoTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Mahidharah"},"content":"package duke.tasks;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"Mahidharah"},"content":"import duke.tasks.Task;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"Mahidharah"},"content":"import duke.exceptions.DukeException;","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"Mahidharah"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"Mahidharah"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"Mahidharah"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"Mahidharah"},"content":"public class ToDoTest {","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"Mahidharah"},"content":" @Test","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"Mahidharah"},"content":" public void Todo_created_withemptystring_exceptionThrown() {","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"Mahidharah"},"content":" try {","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"Mahidharah"},"content":" assertEquals(\"[T][ ] \", new ToDo(\"\"));","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"Mahidharah"},"content":" fail(); // the test should not reach this line","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"Mahidharah"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"Mahidharah"},"content":" assertEquals(\"☹ OOPS!!! The description of a todo cannot be empty.\", e.toString());","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"Mahidharah"},"content":" @Test","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"Mahidharah"},"content":" public void Todo_created_withhello_success() {","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"Mahidharah"},"content":" try {","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"Mahidharah"},"content":" assertEquals(\"[T][ ] hello\", new ToDo(\"hello\").toString());","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"Mahidharah"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"Mahidharah"},"content":" fail();","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"Mahidharah"},"content":" @Test","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"Mahidharah"},"content":" public void datastring_helloinput_success() {","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"Mahidharah"},"content":" try {","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"Mahidharah"},"content":" assertEquals(\"T : 0 : hello\", new ToDo(\"hello\").dataString());","lastModifiedDate":"2023-09-09"},{"lineNumber":35,"author":{"gitId":"Mahidharah"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"Mahidharah"},"content":" fail();","lastModifiedDate":"2023-09-09"},{"lineNumber":37,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":38,"author":{"gitId":"Mahidharah"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":39,"author":{"gitId":"Mahidharah"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"Mahidharah"},"content":"}","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"Mahidharah":40}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"Mahidharah"},"content":"todo read book","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"Mahidharah"},"content":"deadline return book /by June 6th","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"Mahidharah"},"content":"event project meeting /from Aug 6th 2pm /to 4pm","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"Mahidharah"},"content":"todo join sports club","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"Mahidharah"},"content":"todo borrow book","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"Mahidharah"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"Mahidharah"},"content":"deadline return book /by Sunday","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"Mahidharah"},"content":"event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Mahidharah":8}},{"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":"Mahidharah"},"content":"java -classpath ..\\bin duke.Duke \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-09-06"},{"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":{"Mahidharah":1,"-":20}}] diff --git a/Mahidharah_ip_master/commits.json b/Mahidharah_ip_master/commits.json index 5c41368b..b9b2664a 100644 --- a/Mahidharah_ip_master/commits.json +++ b/Mahidharah_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"Mahidharah":[{"date":"2023-08-22","commitResults":[{"hash":"21b40fe89aeb99435cee300fe25b9af9a08fb76e","isMergeCommit":false,"messageTitle":"1. New chatbot name 2. Chatbot simply greets and exits","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":6}}},{"hash":"e2a46ad83416748e13e91777d1ec096ded9448ea","isMergeCommit":false,"messageTitle":"1. Echos commands entered by the user, and exits when the user types the command bye","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":0}}}]},{"date":"2023-08-23","commitResults":[{"hash":"4e5bac8fba4ecc60d5798eb2ddabdd3f6c40dd4c","isMergeCommit":false,"messageTitle":"1. Store whatever text entered by the user 2. Display them back to the user when requested with \"list\" command","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":2}}}]},{"date":"2023-08-24","commitResults":[{"hash":"e067e846005234b27186106be497a4edfe9a8c66","isMergeCommit":false,"messageTitle":"1. Added the ability to mark tasks as done 2. New class to encapsulate a task and its functions","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":47,"deletions":6}}},{"hash":"e0f547dd7ac0b1932750f753028b49889d0e8c33","isMergeCommit":false,"messageTitle":"Added support for tracking three types of tasks: ToDos, Deadlines and Events","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":73,"deletions":3}}},{"hash":"903ed60ac7a40b4ccf646d750a9ea90594cfa949","isMergeCommit":false,"messageTitle":"Testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":8,"deletions":0}}},{"hash":"0e2f72984063ada66913aa9c6165dcb6641af601","isMergeCommit":false,"messageTitle":"no message","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":69,"deletions":31}}}]},{"date":"2023-08-25","commitResults":[{"hash":"fbfb95bff1463afb4cb4403219a3e2ff38c0dee7","isMergeCommit":false,"messageTitle":"no message","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":44,"deletions":29}}}]},{"date":"2023-08-30","commitResults":[{"hash":"36d57a6fa8197e5970f3658739e34fdd116e6ac9","isMergeCommit":false,"messageTitle":"Enabled saving the tasks in the hard disk automatically whenever the task list changes and loading the data from the hard disk when the chatbot starts up. File name is hardcoded and relative path from the project root e.g., ./data/duke.txt. If corrupted, error msg displayed","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"java":{"insertions":91,"deletions":5}}},{"hash":"d2b3d6d6042d94fae885f5fb865beca87c600013","isMergeCommit":false,"messageTitle":"Enabled storing of deadline and event dates as a java.time.LocalDate in your task objects. Accept dates in a format such as yyyy-mm-dd format (e.g., 2019-10-15) and print in a different format such as MMM dd yyyy e.g., (Oct 15 2019).","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":27,"deletions":8}}},{"hash":"340eaabe0e36fc375a475e1674445dfacba450f4","isMergeCommit":false,"messageTitle":"no message","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}}]}]},"authorFileTypeContributionMap":{"Mahidharah":{"java":296,"md":0,"fxml":0,"sh":0,"bat":0,"gradle":0,"txt":8}},"authorContributionVariance":{"Mahidharah":4811.456},"authorDisplayNameMap":{"Mahidharah":"CS2103T-T09-2 C MA..DRAN"}} +{"authorDailyContributionsMap":{"Mahidharah":[{"date":"2023-08-22","commitResults":[{"hash":"21b40fe89aeb99435cee300fe25b9af9a08fb76e","isMergeCommit":false,"messageTitle":"1. New chatbot name 2. Chatbot simply greets and exits","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":6}}},{"hash":"e2a46ad83416748e13e91777d1ec096ded9448ea","isMergeCommit":false,"messageTitle":"1. Echos commands entered by the user, and exits when the user types the command bye","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":0}}}]},{"date":"2023-08-23","commitResults":[{"hash":"4e5bac8fba4ecc60d5798eb2ddabdd3f6c40dd4c","isMergeCommit":false,"messageTitle":"1. Store whatever text entered by the user 2. Display them back to the user when requested with \"list\" command","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":2}}}]},{"date":"2023-08-24","commitResults":[{"hash":"e067e846005234b27186106be497a4edfe9a8c66","isMergeCommit":false,"messageTitle":"1. Added the ability to mark tasks as done 2. New class to encapsulate a task and its functions","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":47,"deletions":6}}},{"hash":"e0f547dd7ac0b1932750f753028b49889d0e8c33","isMergeCommit":false,"messageTitle":"Added support for tracking three types of tasks: ToDos, Deadlines and Events","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":73,"deletions":3}}},{"hash":"903ed60ac7a40b4ccf646d750a9ea90594cfa949","isMergeCommit":false,"messageTitle":"Testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":8,"deletions":0}}},{"hash":"0e2f72984063ada66913aa9c6165dcb6641af601","isMergeCommit":false,"messageTitle":"no message","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":69,"deletions":31}}}]},{"date":"2023-08-25","commitResults":[{"hash":"fbfb95bff1463afb4cb4403219a3e2ff38c0dee7","isMergeCommit":false,"messageTitle":"no message","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":44,"deletions":29}}}]},{"date":"2023-08-30","commitResults":[{"hash":"36d57a6fa8197e5970f3658739e34fdd116e6ac9","isMergeCommit":false,"messageTitle":"Enabled saving the tasks in the hard disk automatically whenever the task list changes and loading the data from the hard disk when the chatbot starts up. File name is hardcoded and relative path from the project root e.g., ./data/duke.txt. If corrupted, error msg displayed","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"java":{"insertions":91,"deletions":5}}},{"hash":"d2b3d6d6042d94fae885f5fb865beca87c600013","isMergeCommit":false,"messageTitle":"Enabled storing of deadline and event dates as a java.time.LocalDate in your task objects. Accept dates in a format such as yyyy-mm-dd format (e.g., 2019-10-15) and print in a different format such as MMM dd yyyy e.g., (Oct 15 2019).","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":27,"deletions":8}}},{"hash":"340eaabe0e36fc375a475e1674445dfacba450f4","isMergeCommit":false,"messageTitle":"no message","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}}]},{"date":"2023-09-06","commitResults":[{"hash":"27419a5964313cbd4091e8d100b8322dd114bec1","isMergeCommit":false,"messageTitle":"Added OOP to code","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":0},"java":{"insertions":250,"deletions":138}}},{"hash":"d9b307c484e5277fa8f973e61a13229c7148d78a","isMergeCommit":false,"messageTitle":"segmented code into packages","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":49,"deletions":7},"bat":{"insertions":1,"deletions":1}}}]},{"date":"2023-09-07","commitResults":[{"hash":"3d58608bcd3772aad86f866080f81c1f4bd813c0","isMergeCommit":false,"messageTitle":"Added packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":4,"deletions":0}}}]},{"date":"2023-09-08","commitResults":[{"hash":"5d08bc05625357ec6d7843c9cad6dd78e59ca928","isMergeCommit":true,"messageTitle":"Merge commit \u0027ed6d4d25bd4e34461919ffe785a6f10f4c087552\u0027","messageBody":"* commit \u0027ed6d4d25bd4e34461919ffe785a6f10f4c087552\u0027:\n Bump gradle and lib version\n Add Gradle support\n","fileTypesAndContributionMap":{}}]},{"date":"2023-09-09","commitResults":[{"hash":"2e0444184da324f724d941999d83a6aec9ad6c31","isMergeCommit":false,"messageTitle":"failed attempt at JUnit and gradle","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":1},"java":{"insertions":22,"deletions":0}}},{"hash":"f7d3eadb692309d107b862ac68f585ed3c0a2dd5","isMergeCommit":false,"messageTitle":"Gradle fixed and Junit tests for 1 class completed","messageBody":"","tags":["A-JUnit","A-Gradle"],"fileTypesAndContributionMap":{"java":{"insertions":44,"deletions":26}}},{"hash":"3d9f2ee7b1ade3c8c35bd1b98333efcb7cf13a80","isMergeCommit":false,"messageTitle":"Jar?","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":1}}},{"hash":"b2b9e3d7539a65807252a25bc93219ac69f2ee30","isMergeCommit":false,"messageTitle":"Javadocs added","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":205,"deletions":8}}},{"hash":"d040af0e82813ec27b2b2a5dedc9d670cdd5fd33","isMergeCommit":false,"messageTitle":"Added ability to find tasks with keyword","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":25,"deletions":5}}},{"hash":"ac4a414e8329c6f51a110744f65337bb89b8551c","isMergeCommit":false,"messageTitle":"checkedstyle","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":43,"deletions":41}}},{"hash":"a82399686c22e585b22ae072a2f5ad7ba699fd08","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"* branch-A-CodingStandard:\n checkedstyle\n\n# Conflicts:\n#\tsrc/main/java/duke/Duke.java\n#\tsrc/main/java/duke/Storage.java\n#\tsrc/main/java/duke/Ui.java\n#\tsrc/main/java/duke/parsers/Parser.java\n","fileTypesAndContributionMap":{}},{"hash":"1eae007440db9c6de3e275841d2f38221b7d1421","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"* branch-Level-9:\n Added ability to find tasks with keyword\n\n# Conflicts:\n#\tsrc/main/java/duke/parsers/Parser.java\n#\tsrc/main/java/duke/tasks/Task.java\n","fileTypesAndContributionMap":{}},{"hash":"e641f58f1623c7e9922b216004e5726138a1e88b","isMergeCommit":false,"messageTitle":"fixed bugs","messageBody":"","tags":["Level-9","A-JavaDoc","A-CodingStandard"],"fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":2},"java":{"insertions":1,"deletions":1}}}]},{"date":"2023-09-10","commitResults":[{"hash":"d76725f18931975e0fd968cbbd21bfb8310e118a","isMergeCommit":false,"messageTitle":"Updated README.md","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":40,"deletions":24}}},{"hash":"f5e01e5c2d48dd5c31d1e3c9fc83f530c4a08a53","isMergeCommit":false,"messageTitle":"Updated README.md","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":1,"deletions":1}}},{"hash":"2cc448446b39a78354ee178a8177ed2e99bbb755","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":9,"deletions":9}}}]}]},"authorFileTypeContributionMap":{"Mahidharah":{"java":734,"md":35,"fxml":0,"sh":0,"bat":1,"gradle":6,"txt":13}},"authorContributionVariance":{"Mahidharah":16226.577},"authorDisplayNameMap":{"Mahidharah":"CS2103T-T09-2 C MA..DRAN"}} diff --git a/RiyaMehta2211_ip_master/authorship.json b/RiyaMehta2211_ip_master/authorship.json index 18cd3e9c..96478aef 100644 --- a/RiyaMehta2211_ip_master/authorship.json +++ b/RiyaMehta2211_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"RiyaMehta2211"},"content":"# duke.Duke project template","lastModifiedDate":"2023-09-03"},{"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":"RiyaMehta2211"},"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-03"},{"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":{"RiyaMehta2211":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":"-"},"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-09-06"},{"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":"RiyaMehta2211"},"content":" mainClass.set(\"duke.Duke\")","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":38,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"RiyaMehta2211"},"content":" archiveFileName \u003d \u0027Duke.jar\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":40,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"RiyaMehta2211":3,"-":41}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"RiyaMehta2211"},"content":"package duke;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"RiyaMehta2211"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"RiyaMehta2211"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"RiyaMehta2211"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"RiyaMehta2211"},"content":" * The Duke class represents a chatbot that generates a list of tasks based on user input.","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"RiyaMehta2211"},"content":" * These tasks can include deadlines, events, and ToDos. The user input is parsed to extract","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"RiyaMehta2211"},"content":" * dates and times for events and deadlines.","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":13,"author":{"gitId":"-"},"content":" public static void main(String[] args) {","lastModifiedDate":"2019-07-29"},{"lineNumber":14,"author":{"gitId":"RiyaMehta2211"},"content":" Storage storage \u003d new Storage();","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"RiyaMehta2211"},"content":" Ui ui \u003d new Ui();","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"RiyaMehta2211"},"content":" ui.printHello();","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"RiyaMehta2211"},"content":" Scanner scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"RiyaMehta2211"},"content":" String str \u003d scanner.nextLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"RiyaMehta2211"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"RiyaMehta2211"},"content":" TaskList tasks \u003d storage.loadTasks(\"src/data/Duke.txt\");","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"RiyaMehta2211"},"content":" while (!str.equals(\"bye\")) {","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"RiyaMehta2211"},"content":" parser.chat(str, tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"RiyaMehta2211"},"content":" str \u003d scanner.nextLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"RiyaMehta2211"},"content":" } try {","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"RiyaMehta2211"},"content":" storage.saveTasks(\"src/data/Duke.txt\", tasks);","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"RiyaMehta2211"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"RiyaMehta2211"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"RiyaMehta2211"},"content":" scanner.close();","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"RiyaMehta2211"},"content":" ui.printBye();","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"},{"lineNumber":33,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"RiyaMehta2211":30,"-":3}},{"path":"src/main/java/duke/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"RiyaMehta2211"},"content":"package duke;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"RiyaMehta2211"},"content":"import duke.exception.DeadlineCommandUseException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"RiyaMehta2211"},"content":"import duke.exception.EventCommandUseException;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"RiyaMehta2211"},"content":"import duke.exception.InvalidInputException;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"RiyaMehta2211"},"content":"import duke.exception.ToDoCommandUseException;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"RiyaMehta2211"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"RiyaMehta2211"},"content":"import duke.task.Event;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"RiyaMehta2211"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"RiyaMehta2211"},"content":"import duke.task.ToDo;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"RiyaMehta2211"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"RiyaMehta2211"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"RiyaMehta2211"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"RiyaMehta2211"},"content":" * The Parser class is responsible for parsing user input and executing commands to manage tasks.","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"RiyaMehta2211"},"content":" * It handles various command types such as adding ToDos, Deadlines, and Events, marking tasks as done,","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"RiyaMehta2211"},"content":" * deleting tasks, and listing tasks.","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"RiyaMehta2211"},"content":"public class Parser {","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"RiyaMehta2211"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"RiyaMehta2211"},"content":" * Default constructor to initialize the Parser class.","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"RiyaMehta2211"},"content":" public Parser() {","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"RiyaMehta2211"},"content":" //empty constructor to initialize class objects","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"RiyaMehta2211"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"RiyaMehta2211"},"content":" * Parses user input and executes various instructions to manage tasks.","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"RiyaMehta2211"},"content":" * @param str The user input string.","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"RiyaMehta2211"},"content":" * @param tasks The task list to which tasks are added or manipulated.","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"RiyaMehta2211"},"content":" public void chat(String str, TaskList tasks) {","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"RiyaMehta2211"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\");","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"RiyaMehta2211"},"content":" Ui ui \u003d new Ui();","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"RiyaMehta2211"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"RiyaMehta2211"},"content":" if (!str.equals(\"list\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"RiyaMehta2211"},"content":" if (str.startsWith(\"mark \")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"RiyaMehta2211"},"content":" String num \u003d str.substring(5);","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"RiyaMehta2211"},"content":" int number \u003d Integer.valueOf(num);","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"RiyaMehta2211"},"content":" if (number \u003c\u003d 0 || number \u003e tasks.getSize()) {","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"RiyaMehta2211"},"content":" throw new InvalidInputException(str);","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"RiyaMehta2211"},"content":" int index \u003d number - 1; //index for task list","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"RiyaMehta2211"},"content":" tasks.markDone(index);","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"RiyaMehta2211"},"content":" Task done \u003d tasks.getTask(index);","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"RiyaMehta2211"},"content":" ui.printDone(done);","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"RiyaMehta2211"},"content":" } else if (str.startsWith(\"unmark \")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"RiyaMehta2211"},"content":" String num \u003d str.substring(7);","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"RiyaMehta2211"},"content":" int number \u003d Integer.valueOf(num);","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"RiyaMehta2211"},"content":" if (number \u003c\u003d 0 || number \u003e tasks.getSize()) {","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"RiyaMehta2211"},"content":" throw new InvalidInputException(str);","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"RiyaMehta2211"},"content":" int index \u003d number - 1; //index for task list","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"RiyaMehta2211"},"content":" tasks.markNotDone(index);","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"RiyaMehta2211"},"content":" Task notDone \u003d tasks.getTask(index);","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"RiyaMehta2211"},"content":" ui.printNotDone(notDone);","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":59,"author":{"gitId":"RiyaMehta2211"},"content":" } else if (str.startsWith(\"delete \")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"RiyaMehta2211"},"content":" String num \u003d str.substring(7);","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"RiyaMehta2211"},"content":" int number \u003d Integer.valueOf(num);","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"RiyaMehta2211"},"content":" if (number \u003c\u003d 0 || number \u003e tasks.getSize()) {","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"RiyaMehta2211"},"content":" throw new InvalidInputException(str);","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"RiyaMehta2211"},"content":" int index \u003d number - 1;","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"RiyaMehta2211"},"content":" Task toBeDeleted \u003d tasks.removeTask(index);","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"RiyaMehta2211"},"content":" ui.printDelete(toBeDeleted, tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":69,"author":{"gitId":"RiyaMehta2211"},"content":" } else if (str.startsWith(\"find \")) {","lastModifiedDate":"2023-09-06"},{"lineNumber":70,"author":{"gitId":"RiyaMehta2211"},"content":" String keyword \u003d str.substring(5);","lastModifiedDate":"2023-09-06"},{"lineNumber":71,"author":{"gitId":"RiyaMehta2211"},"content":" TaskList matchingTasks \u003d new TaskList();","lastModifiedDate":"2023-09-06"},{"lineNumber":72,"author":{"gitId":"RiyaMehta2211"},"content":" for (int i \u003d 0; i \u003c tasks.getSize(); i++) {","lastModifiedDate":"2023-09-06"},{"lineNumber":73,"author":{"gitId":"RiyaMehta2211"},"content":" if (tasks.getTask(i).getTask().contains(keyword)) {","lastModifiedDate":"2023-09-06"},{"lineNumber":74,"author":{"gitId":"RiyaMehta2211"},"content":" matchingTasks.addTask(tasks.getTask(i));","lastModifiedDate":"2023-09-06"},{"lineNumber":75,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":76,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":77,"author":{"gitId":"RiyaMehta2211"},"content":" ui.printMatchingTasks(matchingTasks);","lastModifiedDate":"2023-09-06"},{"lineNumber":78,"author":{"gitId":"RiyaMehta2211"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"RiyaMehta2211"},"content":" if (str.startsWith(\"todo\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"RiyaMehta2211"},"content":" String todo \u003d str.substring(4);","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"RiyaMehta2211"},"content":" //remove any leading and trailing whitespace characters and","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"RiyaMehta2211"},"content":" //check whether there is a task after the instruction","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"RiyaMehta2211"},"content":" if (todo.trim().isEmpty()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"RiyaMehta2211"},"content":" //this would mean the instruction is incomplete","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"RiyaMehta2211"},"content":" throw new ToDoCommandUseException(str);","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"RiyaMehta2211"},"content":" String string \u003d str.substring(5);","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"RiyaMehta2211"},"content":" Task task \u003d new ToDo(string);","lastModifiedDate":"2023-09-02"},{"lineNumber":89,"author":{"gitId":"RiyaMehta2211"},"content":" tasks.addTask(task);","lastModifiedDate":"2023-09-03"},{"lineNumber":90,"author":{"gitId":"RiyaMehta2211"},"content":" ui.printAddTask(task, tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"RiyaMehta2211"},"content":" } else if (str.startsWith(\"deadline\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"RiyaMehta2211"},"content":" if (!str.contains(\"/by \")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"RiyaMehta2211"},"content":" throw new DeadlineCommandUseException(str); //needs to check for /by","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"RiyaMehta2211"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":95,"author":{"gitId":"RiyaMehta2211"},"content":" String byWhen \u003d \"/by \";","lastModifiedDate":"2023-09-02"},{"lineNumber":96,"author":{"gitId":"RiyaMehta2211"},"content":" int index \u003d str.indexOf(byWhen);","lastModifiedDate":"2023-09-02"},{"lineNumber":97,"author":{"gitId":"RiyaMehta2211"},"content":" String deadline \u003d str.substring(index + 4); //remove /by from the substring","lastModifiedDate":"2023-09-02"},{"lineNumber":98,"author":{"gitId":"RiyaMehta2211"},"content":" if (deadline.trim().isEmpty()) { //needs to check whether there is anything after /by","lastModifiedDate":"2023-09-02"},{"lineNumber":99,"author":{"gitId":"RiyaMehta2211"},"content":" throw new DeadlineCommandUseException(str);","lastModifiedDate":"2023-09-02"},{"lineNumber":100,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":101,"author":{"gitId":"RiyaMehta2211"},"content":" String workToDo \u003d str.substring(9, index - 1);","lastModifiedDate":"2023-09-05"},{"lineNumber":102,"author":{"gitId":"RiyaMehta2211"},"content":" Task task \u003d new Deadline(workToDo, LocalDateTime.parse(deadline, formatter));","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"RiyaMehta2211"},"content":" tasks.addTask(task);","lastModifiedDate":"2023-09-03"},{"lineNumber":104,"author":{"gitId":"RiyaMehta2211"},"content":" ui.printAddTask(task, tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":105,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":106,"author":{"gitId":"RiyaMehta2211"},"content":" } else if (str.startsWith(\"event\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":107,"author":{"gitId":"RiyaMehta2211"},"content":" if (!str.contains(\"/from\")) {","lastModifiedDate":"2023-09-06"},{"lineNumber":108,"author":{"gitId":"RiyaMehta2211"},"content":" throw new EventCommandUseException(str);","lastModifiedDate":"2023-09-02"},{"lineNumber":109,"author":{"gitId":"RiyaMehta2211"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":110,"author":{"gitId":"RiyaMehta2211"},"content":" String fromMarker \u003d \"/from \"; //mark the /from index of the string","lastModifiedDate":"2023-09-02"},{"lineNumber":111,"author":{"gitId":"RiyaMehta2211"},"content":" int firstIndex \u003d str.indexOf(fromMarker);","lastModifiedDate":"2023-09-02"},{"lineNumber":112,"author":{"gitId":"RiyaMehta2211"},"content":" int secondIndex;","lastModifiedDate":"2023-09-02"},{"lineNumber":113,"author":{"gitId":"RiyaMehta2211"},"content":" String fromWhen;","lastModifiedDate":"2023-09-02"},{"lineNumber":114,"author":{"gitId":"RiyaMehta2211"},"content":" String toWhen;","lastModifiedDate":"2023-09-02"},{"lineNumber":115,"author":{"gitId":"RiyaMehta2211"},"content":" String workToDo \u003d str.substring(6, firstIndex - 1);","lastModifiedDate":"2023-09-05"},{"lineNumber":116,"author":{"gitId":"RiyaMehta2211"},"content":" String afterFirstIndex \u003d str.substring(firstIndex + 6);","lastModifiedDate":"2023-09-02"},{"lineNumber":117,"author":{"gitId":"RiyaMehta2211"},"content":" if (!afterFirstIndex.contains(\"/to \")) { //to check the input of /to after /from","lastModifiedDate":"2023-09-02"},{"lineNumber":118,"author":{"gitId":"RiyaMehta2211"},"content":" throw new EventCommandUseException(str);","lastModifiedDate":"2023-09-02"},{"lineNumber":119,"author":{"gitId":"RiyaMehta2211"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":120,"author":{"gitId":"RiyaMehta2211"},"content":" String toMarker \u003d \"/to \"; //mark the /to index of the string","lastModifiedDate":"2023-09-02"},{"lineNumber":121,"author":{"gitId":"RiyaMehta2211"},"content":" secondIndex \u003d afterFirstIndex.indexOf(toMarker); //to make sure we get the /to after the /from","lastModifiedDate":"2023-09-02"},{"lineNumber":122,"author":{"gitId":"RiyaMehta2211"},"content":" fromWhen \u003d afterFirstIndex.substring(0, secondIndex).trim(); //get the from timing","lastModifiedDate":"2023-09-02"},{"lineNumber":123,"author":{"gitId":"RiyaMehta2211"},"content":" toWhen \u003d afterFirstIndex.substring(secondIndex + 3).trim(); //get the to timing","lastModifiedDate":"2023-09-02"},{"lineNumber":124,"author":{"gitId":"RiyaMehta2211"},"content":" if (fromWhen.trim().isEmpty() ||","lastModifiedDate":"2023-09-02"},{"lineNumber":125,"author":{"gitId":"RiyaMehta2211"},"content":" toWhen.trim().isEmpty()) { //needs to check whether there is anything after /by","lastModifiedDate":"2023-09-02"},{"lineNumber":126,"author":{"gitId":"RiyaMehta2211"},"content":" throw new EventCommandUseException(str);","lastModifiedDate":"2023-09-02"},{"lineNumber":127,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":128,"author":{"gitId":"RiyaMehta2211"},"content":" Task task \u003d new Event(workToDo, LocalDateTime.parse(fromWhen, formatter),","lastModifiedDate":"2023-09-02"},{"lineNumber":129,"author":{"gitId":"RiyaMehta2211"},"content":" LocalDateTime.parse(toWhen, formatter));","lastModifiedDate":"2023-09-02"},{"lineNumber":130,"author":{"gitId":"RiyaMehta2211"},"content":" tasks.addTask(task);","lastModifiedDate":"2023-09-03"},{"lineNumber":131,"author":{"gitId":"RiyaMehta2211"},"content":" ui.printAddTask(task, tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":132,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":133,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":134,"author":{"gitId":"RiyaMehta2211"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":135,"author":{"gitId":"RiyaMehta2211"},"content":" throw new InvalidInputException(str);","lastModifiedDate":"2023-09-02"},{"lineNumber":136,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":137,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":138,"author":{"gitId":"RiyaMehta2211"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":139,"author":{"gitId":"RiyaMehta2211"},"content":" ui.listTasks(tasks);","lastModifiedDate":"2023-09-03"},{"lineNumber":140,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":141,"author":{"gitId":"RiyaMehta2211"},"content":" } catch (java.time.format.DateTimeParseException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":142,"author":{"gitId":"RiyaMehta2211"},"content":" //detect inputs that don\u0027t follow the yyyy-MM-dd HHmm format","lastModifiedDate":"2023-09-02"},{"lineNumber":143,"author":{"gitId":"RiyaMehta2211"},"content":" ui.printException();","lastModifiedDate":"2023-09-02"},{"lineNumber":144,"author":{"gitId":"RiyaMehta2211"},"content":" } catch (InvalidInputException | EventCommandUseException","lastModifiedDate":"2023-09-06"},{"lineNumber":145,"author":{"gitId":"RiyaMehta2211"},"content":" | DeadlineCommandUseException | ToDoCommandUseException e) {","lastModifiedDate":"2023-09-06"},{"lineNumber":146,"author":{"gitId":"RiyaMehta2211"},"content":" ui.printException(e.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":147,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":148,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":149,"author":{"gitId":"RiyaMehta2211"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"RiyaMehta2211":149}},{"path":"src/main/java/duke/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"RiyaMehta2211"},"content":"package duke;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"RiyaMehta2211"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"RiyaMehta2211"},"content":"import duke.task.Event;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"RiyaMehta2211"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"RiyaMehta2211"},"content":"import duke.task.ToDo;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"RiyaMehta2211"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"RiyaMehta2211"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"RiyaMehta2211"},"content":"import java.nio.file.FileSystems;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"RiyaMehta2211"},"content":"import java.nio.file.Files;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"RiyaMehta2211"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"RiyaMehta2211"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"RiyaMehta2211"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"RiyaMehta2211"},"content":"import java.io.FileReader;","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"RiyaMehta2211"},"content":"import java.io.BufferedReader;","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"RiyaMehta2211"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"RiyaMehta2211"},"content":" * The Storage class is responsible for reading and writing tasklists","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"RiyaMehta2211"},"content":" * to and from the Duke.txt file.","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"RiyaMehta2211"},"content":"public class Storage{","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"RiyaMehta2211"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"RiyaMehta2211"},"content":" * Saves the tasks in the task list to the specified file path.","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"RiyaMehta2211"},"content":" * @param filePath The path to the file where tasks will be saved.","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"RiyaMehta2211"},"content":" * @param tasks The task list to be saved.","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"RiyaMehta2211"},"content":" * @throws FileNotFoundException If the specified file is not found.","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"RiyaMehta2211"},"content":" public void saveTasks(String filePath, TaskList tasks) throws FileNotFoundException{","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"RiyaMehta2211"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"RiyaMehta2211"},"content":" createDirectoryIfNotExists(filePath);","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"RiyaMehta2211"},"content":" FileWriter fileWriter \u003d new FileWriter(filePath);","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"RiyaMehta2211"},"content":" for (int i \u003d 0; i \u003c tasks.getSize(); i++) {","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"RiyaMehta2211"},"content":" Task task \u003d tasks.getTask(i);","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"RiyaMehta2211"},"content":" String taskData \u003d formatTaskData(task);","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"RiyaMehta2211"},"content":" fileWriter.write(taskData);","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"RiyaMehta2211"},"content":" fileWriter.write(System.lineSeparator());","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"RiyaMehta2211"},"content":" fileWriter.close(); // Don\u0027t forget to close the FileWriter when done.","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"RiyaMehta2211"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"RiyaMehta2211"},"content":" System.out.println(\"Error saving tasks: \" + e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"RiyaMehta2211"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":49,"author":{"gitId":"RiyaMehta2211"},"content":" * Formats a task into a string representation suitable for saving to a file.","lastModifiedDate":"2023-09-06"},{"lineNumber":50,"author":{"gitId":"RiyaMehta2211"},"content":" * @param task The task to be formatted.","lastModifiedDate":"2023-09-06"},{"lineNumber":51,"author":{"gitId":"RiyaMehta2211"},"content":" * @return A formatted string representation of the task.","lastModifiedDate":"2023-09-06"},{"lineNumber":52,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":53,"author":{"gitId":"RiyaMehta2211"},"content":" String formatTaskData(Task task) {","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"RiyaMehta2211"},"content":" // Customize this method based on your Task class structure.","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"RiyaMehta2211"},"content":" String str \u003d task.saveTaskString();","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"RiyaMehta2211"},"content":" return str;","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"RiyaMehta2211"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":59,"author":{"gitId":"RiyaMehta2211"},"content":" * Loads tasks from the specified file path and returns them as a TaskList.","lastModifiedDate":"2023-09-06"},{"lineNumber":60,"author":{"gitId":"RiyaMehta2211"},"content":" * @param filePath The path to the file from which tasks will be loaded.","lastModifiedDate":"2023-09-06"},{"lineNumber":61,"author":{"gitId":"RiyaMehta2211"},"content":" * @return A TaskList containing the loaded tasks.","lastModifiedDate":"2023-09-06"},{"lineNumber":62,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":63,"author":{"gitId":"RiyaMehta2211"},"content":" public TaskList loadTasks(String filePath) {","lastModifiedDate":"2023-09-05"},{"lineNumber":64,"author":{"gitId":"RiyaMehta2211"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"RiyaMehta2211"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"RiyaMehta2211"},"content":" createDirectoryIfNotExists(filePath);","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"RiyaMehta2211"},"content":" BufferedReader reader \u003d new BufferedReader(new FileReader(filePath));","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"RiyaMehta2211"},"content":" String line;","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"RiyaMehta2211"},"content":" while ((line \u003d reader.readLine()) !\u003d null) {","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"RiyaMehta2211"},"content":" String[] components \u003d line.split(\"\\\\|\");","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"RiyaMehta2211"},"content":" String taskType \u003d components[0];","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"RiyaMehta2211"},"content":" boolean isDone \u003d components[1].equals(\"1\");","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"RiyaMehta2211"},"content":" String description \u003d components[2];","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"RiyaMehta2211"},"content":" switch (taskType) {","lastModifiedDate":"2023-09-05"},{"lineNumber":75,"author":{"gitId":"RiyaMehta2211"},"content":" case \"T\":","lastModifiedDate":"2023-09-05"},{"lineNumber":76,"author":{"gitId":"RiyaMehta2211"},"content":" taskList.addTask(new ToDo(description, isDone));","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"RiyaMehta2211"},"content":" break;","lastModifiedDate":"2023-09-05"},{"lineNumber":78,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":79,"author":{"gitId":"RiyaMehta2211"},"content":" case \"D\":","lastModifiedDate":"2023-09-05"},{"lineNumber":80,"author":{"gitId":"RiyaMehta2211"},"content":" LocalDateTime by \u003d LocalDateTime.parse(components[3]);","lastModifiedDate":"2023-09-03"},{"lineNumber":81,"author":{"gitId":"RiyaMehta2211"},"content":" taskList.addTask(new Deadline(description, isDone, by));","lastModifiedDate":"2023-09-03"},{"lineNumber":82,"author":{"gitId":"RiyaMehta2211"},"content":" break;","lastModifiedDate":"2023-09-05"},{"lineNumber":83,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":84,"author":{"gitId":"RiyaMehta2211"},"content":" case \"E\":","lastModifiedDate":"2023-09-05"},{"lineNumber":85,"author":{"gitId":"RiyaMehta2211"},"content":" LocalDateTime from \u003d LocalDateTime.parse(components[3]);","lastModifiedDate":"2023-09-03"},{"lineNumber":86,"author":{"gitId":"RiyaMehta2211"},"content":" LocalDateTime to \u003d LocalDateTime.parse(components[4]);","lastModifiedDate":"2023-09-03"},{"lineNumber":87,"author":{"gitId":"RiyaMehta2211"},"content":" taskList.addTask(new Event(description, isDone, from, to));","lastModifiedDate":"2023-09-03"},{"lineNumber":88,"author":{"gitId":"RiyaMehta2211"},"content":" break;","lastModifiedDate":"2023-09-05"},{"lineNumber":89,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":90,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":91,"author":{"gitId":"RiyaMehta2211"},"content":" reader.close(); // Close the reader when done.","lastModifiedDate":"2023-09-03"},{"lineNumber":92,"author":{"gitId":"RiyaMehta2211"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":93,"author":{"gitId":"RiyaMehta2211"},"content":" System.out.println(\"File not found: \" + e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":94,"author":{"gitId":"RiyaMehta2211"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":95,"author":{"gitId":"RiyaMehta2211"},"content":" System.out.println(\"Error loading tasks: \" + e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":96,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":97,"author":{"gitId":"RiyaMehta2211"},"content":" return taskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":98,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":99,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":100,"author":{"gitId":"RiyaMehta2211"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":101,"author":{"gitId":"RiyaMehta2211"},"content":" * Creates the necessary directory and file if they do not exist.","lastModifiedDate":"2023-09-06"},{"lineNumber":102,"author":{"gitId":"RiyaMehta2211"},"content":" * @param filePath The path to the file to be created.","lastModifiedDate":"2023-09-06"},{"lineNumber":103,"author":{"gitId":"RiyaMehta2211"},"content":" * @throws IOException If an error occurs during directory or file creation.","lastModifiedDate":"2023-09-06"},{"lineNumber":104,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":105,"author":{"gitId":"RiyaMehta2211"},"content":" private void createDirectoryIfNotExists(String filePath) throws IOException {","lastModifiedDate":"2023-09-03"},{"lineNumber":106,"author":{"gitId":"RiyaMehta2211"},"content":" Path path \u003d FileSystems.getDefault().getPath(filePath);","lastModifiedDate":"2023-09-03"},{"lineNumber":107,"author":{"gitId":"RiyaMehta2211"},"content":" Path parentDir \u003d path.getParent();","lastModifiedDate":"2023-09-05"},{"lineNumber":108,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":109,"author":{"gitId":"RiyaMehta2211"},"content":" if (parentDir !\u003d null) {","lastModifiedDate":"2023-09-05"},{"lineNumber":110,"author":{"gitId":"RiyaMehta2211"},"content":" if (!Files.exists(parentDir)) {","lastModifiedDate":"2023-09-05"},{"lineNumber":111,"author":{"gitId":"RiyaMehta2211"},"content":" Files.createDirectories(parentDir);","lastModifiedDate":"2023-09-05"},{"lineNumber":112,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":113,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":114,"author":{"gitId":"RiyaMehta2211"},"content":" if (!Files.exists(path)) {","lastModifiedDate":"2023-09-05"},{"lineNumber":115,"author":{"gitId":"RiyaMehta2211"},"content":" Files.createFile(path);","lastModifiedDate":"2023-09-05"},{"lineNumber":116,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":117,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":118,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":119,"author":{"gitId":"RiyaMehta2211"},"content":"}","lastModifiedDate":"2023-09-05"},{"lineNumber":120,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":121,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":122,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"RiyaMehta2211":122}},{"path":"src/main/java/duke/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"RiyaMehta2211"},"content":"package duke;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"RiyaMehta2211"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"RiyaMehta2211"},"content":"import java.util.List;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"RiyaMehta2211"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"RiyaMehta2211"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"RiyaMehta2211"},"content":" * The TaskList class represents a list of tasks in Duke.","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"RiyaMehta2211"},"content":" * It provides methods for adding, removing, and retrieving tasks from the list.","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"RiyaMehta2211"},"content":"public class TaskList{","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"RiyaMehta2211"},"content":" private List\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"RiyaMehta2211"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"RiyaMehta2211"},"content":" * Default constructor to initialize an empty TaskList.","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"RiyaMehta2211"},"content":" public TaskList() {","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"RiyaMehta2211"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"RiyaMehta2211"},"content":" * Adds a task to the task list.","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"RiyaMehta2211"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"RiyaMehta2211"},"content":" * @param task The task to be added.","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"RiyaMehta2211"},"content":" public void addTask(Task task){","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"RiyaMehta2211"},"content":" this.tasks.add(task);","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"RiyaMehta2211"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"RiyaMehta2211"},"content":" * Removes a task from the task list at the specified index.","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"RiyaMehta2211"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"RiyaMehta2211"},"content":" * @param index The index of the task to be removed.","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"RiyaMehta2211"},"content":" * @return The removed task.","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"RiyaMehta2211"},"content":" public Task removeTask(int index){","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"RiyaMehta2211"},"content":" return this.tasks.remove(index);","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"RiyaMehta2211"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"RiyaMehta2211"},"content":" * Retrieves a task from the task list at the specified index.","lastModifiedDate":"2023-09-06"},{"lineNumber":40,"author":{"gitId":"RiyaMehta2211"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":41,"author":{"gitId":"RiyaMehta2211"},"content":" * @param index The index of the task to be retrieved.","lastModifiedDate":"2023-09-06"},{"lineNumber":42,"author":{"gitId":"RiyaMehta2211"},"content":" * @return The retrieved task.","lastModifiedDate":"2023-09-06"},{"lineNumber":43,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":44,"author":{"gitId":"RiyaMehta2211"},"content":" public Task getTask(int index){","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"RiyaMehta2211"},"content":" return this.tasks.get(index);","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"RiyaMehta2211"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":49,"author":{"gitId":"RiyaMehta2211"},"content":" * Marks a task in the task list as done.","lastModifiedDate":"2023-09-06"},{"lineNumber":50,"author":{"gitId":"RiyaMehta2211"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":51,"author":{"gitId":"RiyaMehta2211"},"content":" * @param index The index of the task to be marked as done.","lastModifiedDate":"2023-09-06"},{"lineNumber":52,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":53,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":54,"author":{"gitId":"RiyaMehta2211"},"content":" public void markDone(int index){","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"RiyaMehta2211"},"content":" this.tasks.get(index).markAsDone();","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":58,"author":{"gitId":"RiyaMehta2211"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":59,"author":{"gitId":"RiyaMehta2211"},"content":" * Marks a task in the task list as not done.","lastModifiedDate":"2023-09-06"},{"lineNumber":60,"author":{"gitId":"RiyaMehta2211"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":61,"author":{"gitId":"RiyaMehta2211"},"content":" * @param index The index of the task to be marked as not done.","lastModifiedDate":"2023-09-06"},{"lineNumber":62,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":63,"author":{"gitId":"RiyaMehta2211"},"content":" public void markNotDone(int index){","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"RiyaMehta2211"},"content":" this.tasks.get(index).markAsNotDone();","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":67,"author":{"gitId":"RiyaMehta2211"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":68,"author":{"gitId":"RiyaMehta2211"},"content":" * Returns the size of the task list.","lastModifiedDate":"2023-09-06"},{"lineNumber":69,"author":{"gitId":"RiyaMehta2211"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":70,"author":{"gitId":"RiyaMehta2211"},"content":" * @return The number of tasks in the task list.","lastModifiedDate":"2023-09-06"},{"lineNumber":71,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":72,"author":{"gitId":"RiyaMehta2211"},"content":" public int getSize() {","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"RiyaMehta2211"},"content":" return tasks.size();","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"RiyaMehta2211"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"RiyaMehta2211":76}},{"path":"src/main/java/duke/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"RiyaMehta2211"},"content":"package duke;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"RiyaMehta2211"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"RiyaMehta2211"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"RiyaMehta2211"},"content":" * The Ui class is responsible for user interaction and displaying messages to the user.","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"RiyaMehta2211"},"content":"public class Ui{","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"RiyaMehta2211"},"content":" String name \u003d \"Harry Potter\";","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"RiyaMehta2211"},"content":" String question \u003d \"Introducing the Wizarding World Organizer: Your Trusted Guide\" +","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"RiyaMehta2211"},"content":" \" to Efficient \u0026 Effective Magical Planning\";","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"RiyaMehta2211"},"content":" String hello \u003d \"Hello muggle! I\u0027m \" + name + \"\\n\" + question;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"RiyaMehta2211"},"content":" String bye \u003d \"\\t\" + \"Expelliarmus! Hope to see you again muggle! :D\";","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"RiyaMehta2211"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"RiyaMehta2211"},"content":" * Default constructor to initialize the Ui class.","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"RiyaMehta2211"},"content":" public Ui() {","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"RiyaMehta2211"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"RiyaMehta2211"},"content":" * Displays a welcome message to the user.","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"RiyaMehta2211"},"content":" public void printHello() {","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"RiyaMehta2211"},"content":" System.out.println(hello);","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"RiyaMehta2211"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"RiyaMehta2211"},"content":" * Displays a goodbye essage to the user.","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"RiyaMehta2211"},"content":" public void printBye() {","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"RiyaMehta2211"},"content":" System.out.println(bye);","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"RiyaMehta2211"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"RiyaMehta2211"},"content":" * Prints a message when a task is marked as done.","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"RiyaMehta2211"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"RiyaMehta2211"},"content":" * @param done The task that was marked as done.","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":40,"author":{"gitId":"RiyaMehta2211"},"content":" public void printDone(Task done) {","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"RiyaMehta2211"},"content":" System.out.println(\"\\t\" + \"Nice! I\u0027ve marked this task \" +","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"RiyaMehta2211"},"content":" \"as done:\" + \"\\n\" +","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"RiyaMehta2211"},"content":" \"\\t \" + done.taskString());","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"RiyaMehta2211"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":47,"author":{"gitId":"RiyaMehta2211"},"content":" * Prints a message when a task is marked as not done.","lastModifiedDate":"2023-09-06"},{"lineNumber":48,"author":{"gitId":"RiyaMehta2211"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":49,"author":{"gitId":"RiyaMehta2211"},"content":" * @param notDone The task that was marked as not done.","lastModifiedDate":"2023-09-06"},{"lineNumber":50,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":51,"author":{"gitId":"RiyaMehta2211"},"content":" public void printNotDone(Task notDone) {","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"RiyaMehta2211"},"content":" System.out.println(\"\\t\" + \"OK, I\u0027ve marked this task \" +","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"RiyaMehta2211"},"content":" \"as not done yet:\" + \"\\n\" + \"\\t\" + \" \" +","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"RiyaMehta2211"},"content":" notDone.taskString());","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"RiyaMehta2211"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":58,"author":{"gitId":"RiyaMehta2211"},"content":" * Prints a message when a task is deleted from the list.","lastModifiedDate":"2023-09-06"},{"lineNumber":59,"author":{"gitId":"RiyaMehta2211"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":60,"author":{"gitId":"RiyaMehta2211"},"content":" * @param toBeDeleted The task that was deleted.","lastModifiedDate":"2023-09-06"},{"lineNumber":61,"author":{"gitId":"RiyaMehta2211"},"content":" * @param tasks The task list.","lastModifiedDate":"2023-09-06"},{"lineNumber":62,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":63,"author":{"gitId":"RiyaMehta2211"},"content":" public void printDelete(Task toBeDeleted, TaskList tasks) {","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"RiyaMehta2211"},"content":" System.out.println(\"\\tNoted. I\u0027ve removed this task:\\n\\t \" + toBeDeleted.taskString()","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"RiyaMehta2211"},"content":" + \"\\n\\tNow you have \" + tasks.getSize() + \" tasks in the list.\");","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"RiyaMehta2211"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":69,"author":{"gitId":"RiyaMehta2211"},"content":" * Prints a message when a task is added to the list.","lastModifiedDate":"2023-09-06"},{"lineNumber":70,"author":{"gitId":"RiyaMehta2211"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":71,"author":{"gitId":"RiyaMehta2211"},"content":" * @param task The task that was added.","lastModifiedDate":"2023-09-06"},{"lineNumber":72,"author":{"gitId":"RiyaMehta2211"},"content":" * @param tasks The task list.","lastModifiedDate":"2023-09-06"},{"lineNumber":73,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":74,"author":{"gitId":"RiyaMehta2211"},"content":" public void printAddTask(Task task, TaskList tasks) {","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"RiyaMehta2211"},"content":" int len \u003d tasks.getSize();","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"RiyaMehta2211"},"content":" String output \u003d \"\\tGot it. I\u0027ve added this task:\\n\\t\\t\"","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"RiyaMehta2211"},"content":" + task.taskString();","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"RiyaMehta2211"},"content":" String listLength \u003d len \u003d\u003d 1 ? \"Now you have \" + len + \" task in the list.\" :","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"RiyaMehta2211"},"content":" \"Now you have \" + len + \" tasks in the list.\";","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"RiyaMehta2211"},"content":" System.out.println(output","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"RiyaMehta2211"},"content":" + \"\\n\\t\" + listLength);","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":84,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":85,"author":{"gitId":"RiyaMehta2211"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":86,"author":{"gitId":"RiyaMehta2211"},"content":" * Prints a custom message for an exception.","lastModifiedDate":"2023-09-06"},{"lineNumber":87,"author":{"gitId":"RiyaMehta2211"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":88,"author":{"gitId":"RiyaMehta2211"},"content":" * @param message The custom exception message.","lastModifiedDate":"2023-09-06"},{"lineNumber":89,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":90,"author":{"gitId":"RiyaMehta2211"},"content":" public void printException(String message) {","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"RiyaMehta2211"},"content":" System.out.println(message);","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":94,"author":{"gitId":"RiyaMehta2211"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":95,"author":{"gitId":"RiyaMehta2211"},"content":" * Prints a default exception message for EventDateTime Exception.","lastModifiedDate":"2023-09-06"},{"lineNumber":96,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":97,"author":{"gitId":"RiyaMehta2211"},"content":" public void printException() {","lastModifiedDate":"2023-09-02"},{"lineNumber":98,"author":{"gitId":"RiyaMehta2211"},"content":" System.out.println(\"Accio error! I don\u0027t understand what the input means D:\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":99,"author":{"gitId":"RiyaMehta2211"},"content":" \" Please input a valid date in the format yyyy-MM-dd HHmm \" +","lastModifiedDate":"2023-09-02"},{"lineNumber":100,"author":{"gitId":"RiyaMehta2211"},"content":" \"(the time in the 24-hour format).\");","lastModifiedDate":"2023-09-02"},{"lineNumber":101,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":103,"author":{"gitId":"RiyaMehta2211"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":104,"author":{"gitId":"RiyaMehta2211"},"content":" * Lists the tasks in the task list.","lastModifiedDate":"2023-09-06"},{"lineNumber":105,"author":{"gitId":"RiyaMehta2211"},"content":" * @param tasks The task list to be printed.","lastModifiedDate":"2023-09-06"},{"lineNumber":106,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":107,"author":{"gitId":"RiyaMehta2211"},"content":" public void listTasks(TaskList tasks) {","lastModifiedDate":"2023-09-03"},{"lineNumber":108,"author":{"gitId":"RiyaMehta2211"},"content":" int i \u003d 1;","lastModifiedDate":"2023-09-03"},{"lineNumber":109,"author":{"gitId":"RiyaMehta2211"},"content":" System.out.print(\"\\tHere are the tasks in your list:\");","lastModifiedDate":"2023-09-03"},{"lineNumber":110,"author":{"gitId":"RiyaMehta2211"},"content":" for (int j \u003d 0; j \u003c tasks.getSize(); j++) {","lastModifiedDate":"2023-09-03"},{"lineNumber":111,"author":{"gitId":"RiyaMehta2211"},"content":" System.out.println();","lastModifiedDate":"2023-09-03"},{"lineNumber":112,"author":{"gitId":"RiyaMehta2211"},"content":" System.out.print(\"\\t\" + i + \".\" + tasks.getTask(j).taskString());","lastModifiedDate":"2023-09-03"},{"lineNumber":113,"author":{"gitId":"RiyaMehta2211"},"content":" i++;","lastModifiedDate":"2023-09-03"},{"lineNumber":114,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":115,"author":{"gitId":"RiyaMehta2211"},"content":" System.out.println();","lastModifiedDate":"2023-09-03"},{"lineNumber":116,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":117,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":118,"author":{"gitId":"RiyaMehta2211"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":119,"author":{"gitId":"RiyaMehta2211"},"content":" * Lists the tasks in the task list","lastModifiedDate":"2023-09-06"},{"lineNumber":120,"author":{"gitId":"RiyaMehta2211"},"content":" * containing tasks with matching keywords","lastModifiedDate":"2023-09-06"},{"lineNumber":121,"author":{"gitId":"RiyaMehta2211"},"content":" * @param tasks The task list to be printed.","lastModifiedDate":"2023-09-06"},{"lineNumber":122,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":123,"author":{"gitId":"RiyaMehta2211"},"content":" public void printMatchingTasks(TaskList tasks){","lastModifiedDate":"2023-09-06"},{"lineNumber":124,"author":{"gitId":"RiyaMehta2211"},"content":" int i \u003d 1;","lastModifiedDate":"2023-09-06"},{"lineNumber":125,"author":{"gitId":"RiyaMehta2211"},"content":" System.out.print(\"\\tHere are the tasks in your list:\");","lastModifiedDate":"2023-09-06"},{"lineNumber":126,"author":{"gitId":"RiyaMehta2211"},"content":" for (int j \u003d 0; j \u003c tasks.getSize(); j++) {","lastModifiedDate":"2023-09-06"},{"lineNumber":127,"author":{"gitId":"RiyaMehta2211"},"content":" System.out.println();","lastModifiedDate":"2023-09-06"},{"lineNumber":128,"author":{"gitId":"RiyaMehta2211"},"content":" System.out.print(\"\\t\" + i + \".\" + tasks.getTask(j).taskString());","lastModifiedDate":"2023-09-06"},{"lineNumber":129,"author":{"gitId":"RiyaMehta2211"},"content":" i++;","lastModifiedDate":"2023-09-06"},{"lineNumber":130,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":131,"author":{"gitId":"RiyaMehta2211"},"content":" System.out.println();","lastModifiedDate":"2023-09-06"},{"lineNumber":132,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":133,"author":{"gitId":"RiyaMehta2211"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"RiyaMehta2211":133}},{"path":"src/main/java/duke/exception/DeadlineCommandUseException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"RiyaMehta2211"},"content":"package duke.exception;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"RiyaMehta2211"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"RiyaMehta2211"},"content":" * Represents an exception that occurs when the user input for a deadline command is invalid.","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"RiyaMehta2211"},"content":" * This exception is thrown when the \u0027/by\u0027 part of the deadline command is missing or not followed","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"RiyaMehta2211"},"content":" * by a valid date and time.","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"RiyaMehta2211"},"content":"public class DeadlineCommandUseException extends Exception {","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"RiyaMehta2211"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"RiyaMehta2211"},"content":" * Constructs a DeadlineCommandUseException with a custom error message.","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"RiyaMehta2211"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"RiyaMehta2211"},"content":" * @param message The error message indicating the issue with the deadline command input.","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"RiyaMehta2211"},"content":" public DeadlineCommandUseException(String message) {","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"RiyaMehta2211"},"content":" super(message + \":\" + \" Accio error! deadline must be followed by a task to be added to the list \" +","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"RiyaMehta2211"},"content":" \"and a time specified after \u0027/by\u0027 \");","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"RiyaMehta2211"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"RiyaMehta2211":19}},{"path":"src/main/java/duke/exception/EventCommandUseException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"RiyaMehta2211"},"content":"package duke.exception;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"RiyaMehta2211"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"RiyaMehta2211"},"content":" * Represents an exception that occurs when the user input for an event command is invalid.","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"RiyaMehta2211"},"content":" * This exception is thrown when the \u0027/from\u0027 or \u0027/to\u0027 parts of the event command are missing or","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"RiyaMehta2211"},"content":" * not followed by valid date and time.","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"RiyaMehta2211"},"content":"public class EventCommandUseException extends Exception {","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"RiyaMehta2211"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"RiyaMehta2211"},"content":" * Constructs an EventCommandUseException with a custom error message.","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"RiyaMehta2211"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"RiyaMehta2211"},"content":" * @param message The error message indicating the issue with the event command input.","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"RiyaMehta2211"},"content":" public EventCommandUseException(String message) {","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"RiyaMehta2211"},"content":" super(message + \":\" + \" Accio error! Invalid input as when the event starts \" +","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"RiyaMehta2211"},"content":" \"must be specified after \u0027/from\u0027. When the event ends must also be specified after \u0027/to\u0027.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"RiyaMehta2211"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"RiyaMehta2211":19}},{"path":"src/main/java/duke/exception/InvalidInputException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"RiyaMehta2211"},"content":"package duke.exception;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"RiyaMehta2211"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"RiyaMehta2211"},"content":" * Represents an exception that occurs when the user input is invalid or not recognized.","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"RiyaMehta2211"},"content":" * This exception is thrown when the user provides an input that does not match any of the valid instructions.","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"RiyaMehta2211"},"content":"public class InvalidInputException extends Exception {","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"RiyaMehta2211"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"RiyaMehta2211"},"content":" * Constructs an InvalidInputException with a custom error message.","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"RiyaMehta2211"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"RiyaMehta2211"},"content":" * @param message The error message indicating that the input provided is invalid.","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"RiyaMehta2211"},"content":" public InvalidInputException(String message) {","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"RiyaMehta2211"},"content":" super(message + \":\" + \"\\n\\tAccio error! I don\u0027t know what the input means D: \" +","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"RiyaMehta2211"},"content":" \"Please enter valid inputs. \" +","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"RiyaMehta2211"},"content":" \"Below are the valid\" + \" inputs I can take\\n\" +","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"RiyaMehta2211"},"content":" \"\\t1. list \\n\\t2. todo \\n\\t3. deadline \" +","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"RiyaMehta2211"},"content":" \"\\n\\t4. event \\n\\t5. mark \\n\\t6. unmark \\n\\t7. find \\n\\t8. bye\");","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"RiyaMehta2211"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"RiyaMehta2211":22}},{"path":"src/main/java/duke/exception/ToDoCommandUseException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"RiyaMehta2211"},"content":"package duke.exception;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"RiyaMehta2211"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"RiyaMehta2211"},"content":" * Represents an exception that occurs when the user input for a todo instruction is invalid.","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"RiyaMehta2211"},"content":" * This exception is thrown when the todo command is not followed by a task description to be added to the list.","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"RiyaMehta2211"},"content":"public class ToDoCommandUseException extends Exception{","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"RiyaMehta2211"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"RiyaMehta2211"},"content":" * Constructs a ToDoCommandUseException with a custom error message.","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"RiyaMehta2211"},"content":" * @param message The error message indicating the issue with the todo command input.","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"RiyaMehta2211"},"content":" public ToDoCommandUseException(String message) {","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"RiyaMehta2211"},"content":" super(message + \":\" + \" Accio error! todo must be followed by a task to be added to the list\");","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"RiyaMehta2211"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"RiyaMehta2211":15}},{"path":"src/main/java/duke/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"RiyaMehta2211"},"content":"package duke.task;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"RiyaMehta2211"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"RiyaMehta2211"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"RiyaMehta2211"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"RiyaMehta2211"},"content":" * This class inherits from the Task class and represents a Deadline task type","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"RiyaMehta2211"},"content":" * with a description, a deadline and completion status","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"RiyaMehta2211"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"RiyaMehta2211"},"content":" protected LocalDateTime date;","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"RiyaMehta2211"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"RiyaMehta2211"},"content":" * Constructor to build a Deadline Task Object with the task description and date","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"RiyaMehta2211"},"content":" * @param description The description of the Deadline Task","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"RiyaMehta2211"},"content":" * @param date The deadline by which the Deadline Task is due","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"RiyaMehta2211"},"content":" public Deadline(String description, LocalDateTime date) {","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"RiyaMehta2211"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"RiyaMehta2211"},"content":" this.date \u003d date;","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"RiyaMehta2211"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"RiyaMehta2211"},"content":" * Overloaded constructor to build a Deadline Task Object read from the tasks","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"RiyaMehta2211"},"content":" * saved in the txt file with the task description, completion status and date","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"RiyaMehta2211"},"content":" * @param description The description of the Deadline Task","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"RiyaMehta2211"},"content":" * @param isDone represents the completion status of the task","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"RiyaMehta2211"},"content":" * @param date The deadline by which the Deadline Task is due","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"RiyaMehta2211"},"content":" public Deadline(String description, boolean isDone, LocalDateTime date) {","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"RiyaMehta2211"},"content":" super(description, isDone);","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"RiyaMehta2211"},"content":" this.date \u003d date;","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"RiyaMehta2211"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"RiyaMehta2211"},"content":" * Returns a formatted string representation of the Deadline Task, including","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"RiyaMehta2211"},"content":" * its type, completion status, description, and due date/time.","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"RiyaMehta2211"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"RiyaMehta2211"},"content":" * @return A string representing the Deadline Task.","lastModifiedDate":"2023-09-06"},{"lineNumber":40,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":41,"author":{"gitId":"RiyaMehta2211"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":42,"author":{"gitId":"RiyaMehta2211"},"content":" public String taskString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":43,"author":{"gitId":"RiyaMehta2211"},"content":" return \"[D]\" + super.taskString() + \" (by: \" +","lastModifiedDate":"2023-09-06"},{"lineNumber":44,"author":{"gitId":"RiyaMehta2211"},"content":" date.format(DateTimeFormatter.ofPattern(\"MMM d yyyy HHmm\")) + \")\";","lastModifiedDate":"2023-09-06"},{"lineNumber":45,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":46,"author":{"gitId":"RiyaMehta2211"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":47,"author":{"gitId":"RiyaMehta2211"},"content":" * Returns a string representation of the Deadline Task that can be used for","lastModifiedDate":"2023-09-06"},{"lineNumber":48,"author":{"gitId":"RiyaMehta2211"},"content":" * saving the deadline tasks to a txt file, including its type, completion status,","lastModifiedDate":"2023-09-06"},{"lineNumber":49,"author":{"gitId":"RiyaMehta2211"},"content":" * description, and due date.","lastModifiedDate":"2023-09-06"},{"lineNumber":50,"author":{"gitId":"RiyaMehta2211"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":51,"author":{"gitId":"RiyaMehta2211"},"content":" * @return A string suitable for saving the Deadline Task to a text file.","lastModifiedDate":"2023-09-06"},{"lineNumber":52,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":53,"author":{"gitId":"RiyaMehta2211"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"RiyaMehta2211"},"content":" public String saveTaskString() {","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"RiyaMehta2211"},"content":" String status \u003d (this.isDone ? \"1\" : \"0\");","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"RiyaMehta2211"},"content":" return \"D\" + \"|\" + status + \"|\" + this.description","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"RiyaMehta2211"},"content":" + \"|\" + this.date;","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"RiyaMehta2211"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"RiyaMehta2211":59}},{"path":"src/main/java/duke/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"RiyaMehta2211"},"content":"package duke.task;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"RiyaMehta2211"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"RiyaMehta2211"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"RiyaMehta2211"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"RiyaMehta2211"},"content":" * This class inherits from the Task class and represents an Event task type","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"RiyaMehta2211"},"content":" * with a description, a start and end date \u0026 time and completion status","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"RiyaMehta2211"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"RiyaMehta2211"},"content":" LocalDateTime startDate;","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"RiyaMehta2211"},"content":" LocalDateTime endDate;","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"RiyaMehta2211"},"content":" //Introducing LocalDateTime to parse the string inputs given by the user","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"RiyaMehta2211"},"content":" //for the relevant date and time","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"RiyaMehta2211"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"RiyaMehta2211"},"content":" * Constructor to build an Event Task Object with the task description,","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"RiyaMehta2211"},"content":" * start date, and end date \u0026 time.","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"RiyaMehta2211"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"RiyaMehta2211"},"content":" * @param description The description of the Event Task.","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"RiyaMehta2211"},"content":" * @param startDate The start date and time of the Event.","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"RiyaMehta2211"},"content":" * @param endDate The end date and time of the Event.","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"RiyaMehta2211"},"content":" public Event(String description, LocalDateTime startDate, LocalDateTime endDate) {","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"RiyaMehta2211"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"RiyaMehta2211"},"content":" this.startDate \u003d startDate;","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"RiyaMehta2211"},"content":" this.endDate \u003d endDate;","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"RiyaMehta2211"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"RiyaMehta2211"},"content":" * Overloaded constructor to build an Event Task Object read from the tasks","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"RiyaMehta2211"},"content":" * saved in the txt file with the task description, completion status,","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"RiyaMehta2211"},"content":" * start date and end date \u0026 time.","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"RiyaMehta2211"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"RiyaMehta2211"},"content":" * @param description The description of the Event Task.","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"RiyaMehta2211"},"content":" * @param isDone Represents the completion status of the task.","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"RiyaMehta2211"},"content":" * @param startDate The start date and time of the Event.","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"RiyaMehta2211"},"content":" * @param endDate The end date and time of the Event.","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"RiyaMehta2211"},"content":" public Event(String description, boolean isDone, LocalDateTime startDate, LocalDateTime endDate) {","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"RiyaMehta2211"},"content":" super(description, isDone);","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"RiyaMehta2211"},"content":" this.startDate \u003d startDate;","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"RiyaMehta2211"},"content":" this.endDate \u003d endDate;","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"RiyaMehta2211"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":45,"author":{"gitId":"RiyaMehta2211"},"content":" * Returns a formatted string representation of the Event Task, including","lastModifiedDate":"2023-09-06"},{"lineNumber":46,"author":{"gitId":"RiyaMehta2211"},"content":" * its type, description, start date, and end date \u0026 time.","lastModifiedDate":"2023-09-06"},{"lineNumber":47,"author":{"gitId":"RiyaMehta2211"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":48,"author":{"gitId":"RiyaMehta2211"},"content":" * @return A string representing the Event Task.","lastModifiedDate":"2023-09-06"},{"lineNumber":49,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":50,"author":{"gitId":"RiyaMehta2211"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":51,"author":{"gitId":"RiyaMehta2211"},"content":" public String taskString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":52,"author":{"gitId":"RiyaMehta2211"},"content":" return \"[E]\" + super.taskString() + \" (from: \" +","lastModifiedDate":"2023-09-06"},{"lineNumber":53,"author":{"gitId":"RiyaMehta2211"},"content":" startDate.format(DateTimeFormatter.ofPattern(\"MMM d yyyy HHmm\")) +","lastModifiedDate":"2023-09-06"},{"lineNumber":54,"author":{"gitId":"RiyaMehta2211"},"content":" \" to: \" + endDate.format(DateTimeFormatter.ofPattern(\"MMM d yyyy HHmm\")) + \")\";","lastModifiedDate":"2023-09-06"},{"lineNumber":55,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":56,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":57,"author":{"gitId":"RiyaMehta2211"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":58,"author":{"gitId":"RiyaMehta2211"},"content":" * Returns a string representation of the Event Task that can be used for","lastModifiedDate":"2023-09-06"},{"lineNumber":59,"author":{"gitId":"RiyaMehta2211"},"content":" * saving the event tasks to a txt file, including its type, completion status,","lastModifiedDate":"2023-09-06"},{"lineNumber":60,"author":{"gitId":"RiyaMehta2211"},"content":" * description, start date, and end date \u0026 time.","lastModifiedDate":"2023-09-06"},{"lineNumber":61,"author":{"gitId":"RiyaMehta2211"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":62,"author":{"gitId":"RiyaMehta2211"},"content":" * @return A string suitable for saving the Event Task to a text file.","lastModifiedDate":"2023-09-06"},{"lineNumber":63,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":64,"author":{"gitId":"RiyaMehta2211"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"RiyaMehta2211"},"content":" public String saveTaskString() {","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"RiyaMehta2211"},"content":" String status \u003d (this.isDone ? \"1\" : \"0\");","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"RiyaMehta2211"},"content":" return \"E\" + \"|\" + status + \"|\" + this.description","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"RiyaMehta2211"},"content":" + \"|\" + this.startDate + \"|\" + this.endDate;","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"RiyaMehta2211"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"RiyaMehta2211":70}},{"path":"src/main/java/duke/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"RiyaMehta2211"},"content":"package duke.task;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"RiyaMehta2211"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"RiyaMehta2211"},"content":" * The Task class is the base class for creating task objects in Duke. Task objects","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"RiyaMehta2211"},"content":" * can be of different types, including ToDos, Deadlines, and Events.","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"RiyaMehta2211"},"content":"public abstract class Task{","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"RiyaMehta2211"},"content":" protected String description;","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"RiyaMehta2211"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"RiyaMehta2211"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"RiyaMehta2211"},"content":" * Constructor to build a Task Object with the task description.","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"RiyaMehta2211"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"RiyaMehta2211"},"content":" * @param description The description of the Task.","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"RiyaMehta2211"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"RiyaMehta2211"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"RiyaMehta2211"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"RiyaMehta2211"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"RiyaMehta2211"},"content":" * Overloaded constructor to build a Task Object with the task description and completion status.","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"RiyaMehta2211"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"RiyaMehta2211"},"content":" * @param description The description of the Task.","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"RiyaMehta2211"},"content":" * @param isDone Represents the completion status of the task.","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"RiyaMehta2211"},"content":" public Task(String description, boolean isDone) {","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"RiyaMehta2211"},"content":" this.description \u003d description;","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"RiyaMehta2211"},"content":" this.isDone \u003d isDone;","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"RiyaMehta2211"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"RiyaMehta2211"},"content":" * Marks the task as done by setting the completion status to true.","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"RiyaMehta2211"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"RiyaMehta2211"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"RiyaMehta2211"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"RiyaMehta2211"},"content":" * Marks the task as not done by setting the completion status to false.","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"RiyaMehta2211"},"content":" public void markAsNotDone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"RiyaMehta2211"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":42,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":43,"author":{"gitId":"RiyaMehta2211"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":44,"author":{"gitId":"RiyaMehta2211"},"content":" * Gets the description of the task.","lastModifiedDate":"2023-09-06"},{"lineNumber":45,"author":{"gitId":"RiyaMehta2211"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":46,"author":{"gitId":"RiyaMehta2211"},"content":" * @return The description of the task.","lastModifiedDate":"2023-09-06"},{"lineNumber":47,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":48,"author":{"gitId":"RiyaMehta2211"},"content":" public String getTask() {","lastModifiedDate":"2023-08-24"},{"lineNumber":49,"author":{"gitId":"RiyaMehta2211"},"content":" return this.description;","lastModifiedDate":"2023-08-24"},{"lineNumber":50,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":51,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":52,"author":{"gitId":"RiyaMehta2211"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":53,"author":{"gitId":"RiyaMehta2211"},"content":" * Returns a formatted string representation of the Task, including its completion","lastModifiedDate":"2023-09-06"},{"lineNumber":54,"author":{"gitId":"RiyaMehta2211"},"content":" * status and description.","lastModifiedDate":"2023-09-06"},{"lineNumber":55,"author":{"gitId":"RiyaMehta2211"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":56,"author":{"gitId":"RiyaMehta2211"},"content":" * @return A string representing the Task.","lastModifiedDate":"2023-09-06"},{"lineNumber":57,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":58,"author":{"gitId":"RiyaMehta2211"},"content":" public String taskString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":59,"author":{"gitId":"RiyaMehta2211"},"content":" String str \u003d this.isDone ? \"[X] \" : \"[ ] \";","lastModifiedDate":"2023-08-24"},{"lineNumber":60,"author":{"gitId":"RiyaMehta2211"},"content":" String output \u003d str + this.description;","lastModifiedDate":"2023-08-24"},{"lineNumber":61,"author":{"gitId":"RiyaMehta2211"},"content":" return output;","lastModifiedDate":"2023-08-24"},{"lineNumber":62,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":63,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"RiyaMehta2211"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":65,"author":{"gitId":"RiyaMehta2211"},"content":" * Abstract method for saving the task to a text file. Subclasses will override","lastModifiedDate":"2023-09-06"},{"lineNumber":66,"author":{"gitId":"RiyaMehta2211"},"content":" * and implement this method.","lastModifiedDate":"2023-09-06"},{"lineNumber":67,"author":{"gitId":"RiyaMehta2211"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":68,"author":{"gitId":"RiyaMehta2211"},"content":" * @return A string suitable for saving the Task to a text file.","lastModifiedDate":"2023-09-06"},{"lineNumber":69,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":70,"author":{"gitId":"RiyaMehta2211"},"content":" public abstract String saveTaskString();","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"RiyaMehta2211"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"RiyaMehta2211":71}},{"path":"src/main/java/duke/task/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"RiyaMehta2211"},"content":"package duke.task;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"RiyaMehta2211"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"RiyaMehta2211"},"content":" * This class inherits from the Task class and represents a ToDo task type","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"RiyaMehta2211"},"content":" * with a description and completion status","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"RiyaMehta2211"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"RiyaMehta2211"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"RiyaMehta2211"},"content":" * Constructor to build a ToDo Task Object with the task description.","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"RiyaMehta2211"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"RiyaMehta2211"},"content":" * @param todo The description of the ToDo Task.","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"RiyaMehta2211"},"content":" public ToDo(String todo) {","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"RiyaMehta2211"},"content":" super(todo);","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"RiyaMehta2211"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"RiyaMehta2211"},"content":" * Overloaded constructor to build a ToDo Task Object read from the tasks","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"RiyaMehta2211"},"content":" * saved in the txt file with the task description and completion status.","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"RiyaMehta2211"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"RiyaMehta2211"},"content":" * @param todo The description of the ToDo Task.","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"RiyaMehta2211"},"content":" * @param isDone Represents the completion status of the task.","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"RiyaMehta2211"},"content":" public ToDo(String todo, boolean isDone) {","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"RiyaMehta2211"},"content":" super(todo, isDone);","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"RiyaMehta2211"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"RiyaMehta2211"},"content":" * Returns a formatted string representation of the ToDo Task, including","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"RiyaMehta2211"},"content":" * its type and description.","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"RiyaMehta2211"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"RiyaMehta2211"},"content":" * @return A string representing the ToDo Task.","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"RiyaMehta2211"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"RiyaMehta2211"},"content":" public String taskString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"RiyaMehta2211"},"content":" String output \u003d \"[T]\" + super.taskString();","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"RiyaMehta2211"},"content":" return output;","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"RiyaMehta2211"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":42,"author":{"gitId":"RiyaMehta2211"},"content":" * Returns a string representation of the ToDo Task that can be used for","lastModifiedDate":"2023-09-06"},{"lineNumber":43,"author":{"gitId":"RiyaMehta2211"},"content":" * saving the task to a txt file, including its type, completion status,","lastModifiedDate":"2023-09-06"},{"lineNumber":44,"author":{"gitId":"RiyaMehta2211"},"content":" * and description.","lastModifiedDate":"2023-09-06"},{"lineNumber":45,"author":{"gitId":"RiyaMehta2211"},"content":" * @return A string suitable for saving the ToDo Task to a text file.","lastModifiedDate":"2023-09-06"},{"lineNumber":46,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":47,"author":{"gitId":"RiyaMehta2211"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"RiyaMehta2211"},"content":" public String saveTaskString() {","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"RiyaMehta2211"},"content":" String status \u003d (this.isDone ? \"1\" : \"0\");","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"RiyaMehta2211"},"content":" return \"T\" + \"|\" + status + \"|\" + this.description;","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"RiyaMehta2211"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"RiyaMehta2211":53}},{"path":"src/test/java/duke/StorageTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"RiyaMehta2211"},"content":"package duke;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"RiyaMehta2211"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"RiyaMehta2211"},"content":"import duke.task.ToDo;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"RiyaMehta2211"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"RiyaMehta2211"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"RiyaMehta2211"},"content":" * This class contains JUnit test cases to verify the functionality of the Storage class.","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"RiyaMehta2211"},"content":" * It tests the saving and loading of tasks to and from a txt file.","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"RiyaMehta2211"},"content":"public class StorageTest {","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"RiyaMehta2211"},"content":" Storage storage \u003d new Storage();","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"RiyaMehta2211"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"RiyaMehta2211"},"content":" void testSaveAndLoadTasks() {","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"RiyaMehta2211"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"RiyaMehta2211"},"content":" tasks.addTask(new ToDo(\"go on a holiday\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"RiyaMehta2211"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"RiyaMehta2211"},"content":" storage.saveTasks(\"src/data/newFile.txt\", tasks);","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"RiyaMehta2211"},"content":" TaskList loadedTasks \u003d storage.loadTasks(\"src/data/newFile.txt\");","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"RiyaMehta2211"},"content":" for (int i \u003d 0; i \u003c tasks.getSize(); i++) {","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"RiyaMehta2211"},"content":" assert loadedTasks.getTask(i).taskString()","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"RiyaMehta2211"},"content":" .equals(tasks.getTask(i).taskString());","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"RiyaMehta2211"},"content":" //assert storage.loadTasks(\"src/data/newFile.txt\").equals(tasks);","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"RiyaMehta2211"},"content":" } catch(FileNotFoundException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"RiyaMehta2211"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"RiyaMehta2211"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"RiyaMehta2211":31}},{"path":"src/test/java/duke/TaskListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"RiyaMehta2211"},"content":"package duke;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"RiyaMehta2211"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"RiyaMehta2211"},"content":"import duke.task.ToDo;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"RiyaMehta2211"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"RiyaMehta2211"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"RiyaMehta2211"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"RiyaMehta2211"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"RiyaMehta2211"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"RiyaMehta2211"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"RiyaMehta2211"},"content":" * This class contains JUnit test cases to verify the functionality of the TaskList class.","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"RiyaMehta2211"},"content":" * It tests various methods of the TaskList class, such as adding, removing,","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"RiyaMehta2211"},"content":" * and marking tasks from the list of tasks.","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"RiyaMehta2211"},"content":"public class TaskListTest {","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"RiyaMehta2211"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"RiyaMehta2211"},"content":" Task todo \u003d new ToDo(\"todo go on a hike\");","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"RiyaMehta2211"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\");","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"RiyaMehta2211"},"content":" Task deadline \u003d new Deadline(\"assignment submission\",","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"RiyaMehta2211"},"content":" LocalDateTime.parse(\"2023-09-11 2359\", formatter));","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"RiyaMehta2211"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"RiyaMehta2211"},"content":" public void testGetTask(){","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"RiyaMehta2211"},"content":" this.tasks.addTask(todo);","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"RiyaMehta2211"},"content":" int initialLen \u003d tasks.getSize();","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"RiyaMehta2211"},"content":" assert this.tasks.getTask(tasks.getSize() - 1).taskString()","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"RiyaMehta2211"},"content":" .equals(todo.taskString());","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"RiyaMehta2211"},"content":" //to check that the length of the list is not changes by the get method","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"RiyaMehta2211"},"content":" assertEquals(initialLen, this.tasks.getSize());","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"RiyaMehta2211"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"RiyaMehta2211"},"content":" public void testAddTask() {","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"RiyaMehta2211"},"content":" int initialLen \u003d tasks.getSize();","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"RiyaMehta2211"},"content":" this.tasks.addTask(deadline);","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"RiyaMehta2211"},"content":" assertEquals(initialLen + 1, this.tasks.getSize());","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"RiyaMehta2211"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"RiyaMehta2211"},"content":" public void testRemoveTask() {","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"RiyaMehta2211"},"content":" this.tasks.addTask(deadline);","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"RiyaMehta2211"},"content":" int initialLen \u003d tasks.getSize();","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"RiyaMehta2211"},"content":" this.tasks.removeTask(tasks.getSize() - 1);","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"RiyaMehta2211"},"content":" assertEquals(initialLen - 1, this.tasks.getSize());","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"RiyaMehta2211"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"RiyaMehta2211"},"content":" public void testMarkDone() {","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"RiyaMehta2211"},"content":" this.tasks.addTask(deadline);","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"RiyaMehta2211"},"content":" this.tasks.getTask(tasks.getSize() - 1).markAsDone();","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"RiyaMehta2211"},"content":" assert this.tasks.getTask(tasks.getSize() - 1).taskString()","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"RiyaMehta2211"},"content":" .equals(deadline.taskString());","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"RiyaMehta2211"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"RiyaMehta2211"},"content":" public void testNotMarkDone() {","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"RiyaMehta2211"},"content":" deadline.markAsDone();","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"RiyaMehta2211"},"content":" this.tasks.addTask(deadline);","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"RiyaMehta2211"},"content":" this.tasks.getTask(tasks.getSize() - 1).markAsNotDone();","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"RiyaMehta2211"},"content":" assert this.tasks.getTask(tasks.getSize() - 1).taskString()","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"RiyaMehta2211"},"content":" .equals(deadline.taskString());","lastModifiedDate":"2023-09-05"},{"lineNumber":62,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":63,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":64,"author":{"gitId":"RiyaMehta2211"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":65,"author":{"gitId":"RiyaMehta2211"},"content":" public void testGetTaskSize() {","lastModifiedDate":"2023-09-05"},{"lineNumber":66,"author":{"gitId":"RiyaMehta2211"},"content":" int initialLen \u003d tasks.getSize();","lastModifiedDate":"2023-09-05"},{"lineNumber":67,"author":{"gitId":"RiyaMehta2211"},"content":" tasks.addTask(todo);","lastModifiedDate":"2023-09-05"},{"lineNumber":68,"author":{"gitId":"RiyaMehta2211"},"content":" tasks.addTask(deadline);","lastModifiedDate":"2023-09-05"},{"lineNumber":69,"author":{"gitId":"RiyaMehta2211"},"content":" assertEquals(initialLen + 2, tasks.getSize());","lastModifiedDate":"2023-09-05"},{"lineNumber":70,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":71,"author":{"gitId":"RiyaMehta2211"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"RiyaMehta2211":71}},{"path":"src/test/java/duke/task/DeadlineTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"RiyaMehta2211"},"content":"package duke.task;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"RiyaMehta2211"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"RiyaMehta2211"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"RiyaMehta2211"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"RiyaMehta2211"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"RiyaMehta2211"},"content":" * This class contains JUnit test cases to verify the functionality of the Deadline class.","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"RiyaMehta2211"},"content":" * It tests various methods of the Deadline class, such as taskString(), markAsDone(), markAsNotDone(),","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"RiyaMehta2211"},"content":" * and getTask().","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"RiyaMehta2211"},"content":"public class DeadlineTest {","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"RiyaMehta2211"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\");","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"RiyaMehta2211"},"content":" Deadline test \u003d new Deadline(\"assignment submission\", LocalDateTime.parse(\"2023-09-11 2359\", formatter));","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"RiyaMehta2211"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"RiyaMehta2211"},"content":" void testTaskString() {","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"RiyaMehta2211"},"content":" assert test.taskString().equals(\"[D][ ] assignment submission (by: Sep 11 2023 2359)\");","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"RiyaMehta2211"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"RiyaMehta2211"},"content":" void testMarkAsDone() {","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"RiyaMehta2211"},"content":" test.markAsDone();","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"RiyaMehta2211"},"content":" assert test.taskString().equals(\"[D][X] assignment submission (by: Sep 11 2023 2359)\");","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"RiyaMehta2211"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"RiyaMehta2211"},"content":" void testNotMarkAsDone() {","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"RiyaMehta2211"},"content":" test.markAsNotDone();","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"RiyaMehta2211"},"content":" assert test.taskString().equals(\"[D][ ] assignment submission (by: Sep 11 2023 2359)\");","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"RiyaMehta2211"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"RiyaMehta2211"},"content":" void testGetTask() {","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"RiyaMehta2211"},"content":" assert test.getTask().equals(\"assignment submission\");","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"RiyaMehta2211"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"RiyaMehta2211":36}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"RiyaMehta2211"},"content":"todo go to Mount Everest","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"RiyaMehta2211"},"content":"deadline 2103T Assignment /by tonight","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"RiyaMehta2211"},"content":"deadline 2100 Lab /by next week\u0027s lab","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"RiyaMehta2211"},"content":"todo apply for internships on TalentConnect","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"RiyaMehta2211"},"content":"event CCA Tryouts /from tomorrow 7.30pm /to tomorrow 9.30pm","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"RiyaMehta2211"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"RiyaMehta2211"},"content":"mark 2","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"RiyaMehta2211"},"content":"deadline CS2105 Assignment 1 /by week 4","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"RiyaMehta2211"},"content":"event presentation rehearsal /from tonight 10pm /to tonight 11.15pm","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"RiyaMehta2211"},"content":"mark 3","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"RiyaMehta2211"},"content":"mark 7","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"RiyaMehta2211"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"RiyaMehta2211"},"content":"unmark 7","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"RiyaMehta2211"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"RiyaMehta2211"},"content":"bye","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"RiyaMehta2211":15}},{"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":"RiyaMehta2211"},"content":"java -classpath ..\\bin duke.Duke \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-09-03"},{"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":{"RiyaMehta2211":1,"-":20}}] +[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"RiyaMehta2211"},"content":"# duke.Duke project template","lastModifiedDate":"2023-09-03"},{"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":"RiyaMehta2211"},"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-03"},{"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":{"RiyaMehta2211":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":"-"},"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":"RiyaMehta2211"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"RiyaMehta2211"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"RiyaMehta2211"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"RiyaMehta2211"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"RiyaMehta2211"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"RiyaMehta2211"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"RiyaMehta2211"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"RiyaMehta2211"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-10"},{"lineNumber":21,"author":{"gitId":"RiyaMehta2211"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"RiyaMehta2211"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"RiyaMehta2211"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"RiyaMehta2211"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"RiyaMehta2211"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"RiyaMehta2211"},"content":" implementation \u0027org.junit.jupiter:junit-jupiter:5.10.0\u0027","lastModifiedDate":"2023-09-10"},{"lineNumber":27,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"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":"RiyaMehta2211"},"content":" mainClass.set(\"duke.Launcher\")","lastModifiedDate":"2023-09-10"},{"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":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":51,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":52,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":53,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":54,"author":{"gitId":"RiyaMehta2211"},"content":" archiveFileName \u003d \u0027Duke.jar\u0027","lastModifiedDate":"2023-09-06"},{"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":{"RiyaMehta2211":18,"-":41}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"RiyaMehta2211"},"content":"package duke;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"RiyaMehta2211"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"RiyaMehta2211"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"RiyaMehta2211"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"RiyaMehta2211"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"RiyaMehta2211"},"content":" * The Duke class represents a chatbot that generates a list of tasks based on user input.","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"RiyaMehta2211"},"content":" * These tasks can include deadlines, events, and ToDos. The user input is parsed to extract","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"RiyaMehta2211"},"content":" * dates and times for events and deadlines.","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"-"},"content":"public class Duke{","lastModifiedDate":"2019-07-29"},{"lineNumber":15,"author":{"gitId":"RiyaMehta2211"},"content":" TaskList tasks \u003d Storage.loadTasks(\"src/data/Duke.txt\");","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"RiyaMehta2211"},"content":" public void dukeInteraction() {","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"RiyaMehta2211"},"content":" Ui.printHello();","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"RiyaMehta2211"},"content":" Scanner scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"RiyaMehta2211"},"content":" String str \u003d scanner.nextLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"RiyaMehta2211"},"content":" while (!str.equals(\"bye\")) {","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"RiyaMehta2211"},"content":" Parser.chat(str, tasks);","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"RiyaMehta2211"},"content":" str \u003d scanner.nextLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"RiyaMehta2211"},"content":" } try {","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"RiyaMehta2211"},"content":" Storage.saveTasks(\"src/data/Duke.txt\", tasks);","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"RiyaMehta2211"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"RiyaMehta2211"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"RiyaMehta2211"},"content":" scanner.close();","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"RiyaMehta2211"},"content":" Ui.printBye();","lastModifiedDate":"2023-09-10"},{"lineNumber":30,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"RiyaMehta2211"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"RiyaMehta2211"},"content":" Duke duke \u003d new Duke();","lastModifiedDate":"2023-09-10"},{"lineNumber":33,"author":{"gitId":"RiyaMehta2211"},"content":" duke.dukeInteraction();","lastModifiedDate":"2023-09-10"},{"lineNumber":34,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":35,"author":{"gitId":"RiyaMehta2211"},"content":" public String getResponse(String input) {","lastModifiedDate":"2023-09-10"},{"lineNumber":36,"author":{"gitId":"RiyaMehta2211"},"content":" return Parser.chat(input, tasks);","lastModifiedDate":"2023-09-10"},{"lineNumber":37,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"},{"lineNumber":39,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"RiyaMehta2211":37,"-":2}},{"path":"src/main/java/duke/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"RiyaMehta2211"},"content":"package duke;","lastModifiedDate":"2023-09-10"},{"lineNumber":2,"author":{"gitId":"RiyaMehta2211"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"RiyaMehta2211"},"content":"public class Launcher {","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"RiyaMehta2211"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"RiyaMehta2211"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"RiyaMehta2211"},"content":"}","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"RiyaMehta2211":8}},{"path":"src/main/java/duke/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"RiyaMehta2211"},"content":"package duke;","lastModifiedDate":"2023-09-10"},{"lineNumber":2,"author":{"gitId":"RiyaMehta2211"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"RiyaMehta2211"},"content":"import duke.ui.MainWindow;","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"RiyaMehta2211"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"RiyaMehta2211"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"RiyaMehta2211"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"RiyaMehta2211"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"RiyaMehta2211"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"RiyaMehta2211"},"content":"/**","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"RiyaMehta2211"},"content":" * A GUI for Duke using FXML.","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"RiyaMehta2211"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"RiyaMehta2211"},"content":" private Duke duke \u003d new Duke();","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"RiyaMehta2211"},"content":" @Override","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"RiyaMehta2211"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"RiyaMehta2211"},"content":" try {","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"RiyaMehta2211"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-10"},{"lineNumber":21,"author":{"gitId":"RiyaMehta2211"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"RiyaMehta2211"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"RiyaMehta2211"},"content":" stage.setTitle(\"Wizarding World Organizer\");","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"RiyaMehta2211"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"RiyaMehta2211"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setDuke(duke);","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"RiyaMehta2211"},"content":" stage.show();","lastModifiedDate":"2023-09-10"},{"lineNumber":27,"author":{"gitId":"RiyaMehta2211"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"RiyaMehta2211"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":30,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"RiyaMehta2211"},"content":"}","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"RiyaMehta2211":32}},{"path":"src/main/java/duke/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"RiyaMehta2211"},"content":"package duke;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"RiyaMehta2211"},"content":"import duke.exception.DeadlineCommandUseException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"RiyaMehta2211"},"content":"import duke.exception.EventCommandUseException;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"RiyaMehta2211"},"content":"import duke.exception.InvalidInputException;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"RiyaMehta2211"},"content":"import duke.exception.ToDoCommandUseException;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"RiyaMehta2211"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"RiyaMehta2211"},"content":"import duke.task.ToDo;","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"RiyaMehta2211"},"content":"import duke.task.Event;","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"RiyaMehta2211"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"RiyaMehta2211"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"RiyaMehta2211"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"RiyaMehta2211"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"RiyaMehta2211"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"RiyaMehta2211"},"content":" * The Parser class is responsible for parsing user input and executing commands to manage tasks.","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"RiyaMehta2211"},"content":" * It handles various command types such as adding ToDos, Deadlines, and Events, marking tasks as done,","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"RiyaMehta2211"},"content":" * deleting tasks, and listing tasks.","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"RiyaMehta2211"},"content":"public class Parser {","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"RiyaMehta2211"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"RiyaMehta2211"},"content":" * Default constructor to initialize the Parser class.","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"RiyaMehta2211"},"content":" public Parser() {","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"RiyaMehta2211"},"content":" //empty constructor to initialize class objects","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"RiyaMehta2211"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"RiyaMehta2211"},"content":" * Parses user input and executes various instructions to manage tasks.","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"RiyaMehta2211"},"content":" * @param str The user input string.","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"RiyaMehta2211"},"content":" * @param tasks The task list to which tasks are added or manipulated.","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"RiyaMehta2211"},"content":" public static String chat(String str, TaskList tasks) {","lastModifiedDate":"2023-09-10"},{"lineNumber":36,"author":{"gitId":"RiyaMehta2211"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\");","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"RiyaMehta2211"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"RiyaMehta2211"},"content":" if (str.equals(\"bye\")) {","lastModifiedDate":"2023-09-10"},{"lineNumber":39,"author":{"gitId":"RiyaMehta2211"},"content":" return Ui.printBye();","lastModifiedDate":"2023-09-10"},{"lineNumber":40,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":41,"author":{"gitId":"RiyaMehta2211"},"content":" if (!str.equals(\"list\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"RiyaMehta2211"},"content":" if (str.startsWith(\"mark \")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"RiyaMehta2211"},"content":" String num \u003d str.substring(5);","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"RiyaMehta2211"},"content":" int number \u003d Integer.valueOf(num);","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"RiyaMehta2211"},"content":" if (number \u003c\u003d 0 || number \u003e tasks.getSize()) {","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"RiyaMehta2211"},"content":" throw new InvalidInputException(str);","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"RiyaMehta2211"},"content":" int index \u003d number - 1; //index for task list","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"RiyaMehta2211"},"content":" tasks.markDone(index);","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"RiyaMehta2211"},"content":" Task done \u003d tasks.getTask(index);","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"RiyaMehta2211"},"content":" return Ui.printDone(done);","lastModifiedDate":"2023-09-10"},{"lineNumber":52,"author":{"gitId":"RiyaMehta2211"},"content":" } else if (str.startsWith(\"unmark \")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"RiyaMehta2211"},"content":" String num \u003d str.substring(7);","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"RiyaMehta2211"},"content":" int number \u003d Integer.valueOf(num);","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"RiyaMehta2211"},"content":" if (number \u003c\u003d 0 || number \u003e tasks.getSize()) {","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"RiyaMehta2211"},"content":" throw new InvalidInputException(str);","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"RiyaMehta2211"},"content":" int index \u003d number - 1; //index for task list","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"RiyaMehta2211"},"content":" tasks.markNotDone(index);","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"RiyaMehta2211"},"content":" Task notDone \u003d tasks.getTask(index);","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"RiyaMehta2211"},"content":" return Ui.printNotDone(notDone);","lastModifiedDate":"2023-09-10"},{"lineNumber":62,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":63,"author":{"gitId":"RiyaMehta2211"},"content":" } else if (str.startsWith(\"delete \")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"RiyaMehta2211"},"content":" String num \u003d str.substring(7);","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"RiyaMehta2211"},"content":" int number \u003d Integer.valueOf(num);","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"RiyaMehta2211"},"content":" if (number \u003c\u003d 0 || number \u003e tasks.getSize()) {","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"RiyaMehta2211"},"content":" throw new InvalidInputException(str);","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"RiyaMehta2211"},"content":" int index \u003d number - 1;","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"RiyaMehta2211"},"content":" Task toBeDeleted \u003d tasks.removeTask(index);","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"RiyaMehta2211"},"content":" return Ui.printDelete(toBeDeleted, tasks);","lastModifiedDate":"2023-09-10"},{"lineNumber":72,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":73,"author":{"gitId":"RiyaMehta2211"},"content":" } else if (str.startsWith(\"find \")) {","lastModifiedDate":"2023-09-06"},{"lineNumber":74,"author":{"gitId":"RiyaMehta2211"},"content":" String keyword \u003d str.substring(5);","lastModifiedDate":"2023-09-06"},{"lineNumber":75,"author":{"gitId":"RiyaMehta2211"},"content":" TaskList matchingTasks \u003d new TaskList();","lastModifiedDate":"2023-09-06"},{"lineNumber":76,"author":{"gitId":"RiyaMehta2211"},"content":" for (int i \u003d 0; i \u003c tasks.getSize(); i++) {","lastModifiedDate":"2023-09-06"},{"lineNumber":77,"author":{"gitId":"RiyaMehta2211"},"content":" if (tasks.getTask(i).getTask().contains(keyword)) {","lastModifiedDate":"2023-09-06"},{"lineNumber":78,"author":{"gitId":"RiyaMehta2211"},"content":" matchingTasks.addTask(tasks.getTask(i));","lastModifiedDate":"2023-09-06"},{"lineNumber":79,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":80,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":81,"author":{"gitId":"RiyaMehta2211"},"content":" return Ui.printMatchingTasks(matchingTasks);","lastModifiedDate":"2023-09-10"},{"lineNumber":82,"author":{"gitId":"RiyaMehta2211"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"RiyaMehta2211"},"content":" if (str.startsWith(\"todo\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"RiyaMehta2211"},"content":" String todo \u003d str.substring(4);","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"RiyaMehta2211"},"content":" //remove any leading and trailing whitespace characters and","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"RiyaMehta2211"},"content":" //check whether there is a task after the instruction","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"RiyaMehta2211"},"content":" if (todo.trim().isEmpty()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"RiyaMehta2211"},"content":" //this would mean the instruction is incomplete","lastModifiedDate":"2023-09-02"},{"lineNumber":89,"author":{"gitId":"RiyaMehta2211"},"content":" throw new ToDoCommandUseException(str);","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"RiyaMehta2211"},"content":" String string \u003d str.substring(5);","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"RiyaMehta2211"},"content":" Task task \u003d new ToDo(string);","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"RiyaMehta2211"},"content":" tasks.addTask(task);","lastModifiedDate":"2023-09-03"},{"lineNumber":94,"author":{"gitId":"RiyaMehta2211"},"content":" return Ui.printAddTask(task, tasks);","lastModifiedDate":"2023-09-10"},{"lineNumber":95,"author":{"gitId":"RiyaMehta2211"},"content":" } else if (str.startsWith(\"deadline\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":96,"author":{"gitId":"RiyaMehta2211"},"content":" if (!str.contains(\"/by \")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":97,"author":{"gitId":"RiyaMehta2211"},"content":" throw new DeadlineCommandUseException(str); //needs to check for /by","lastModifiedDate":"2023-09-02"},{"lineNumber":98,"author":{"gitId":"RiyaMehta2211"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":99,"author":{"gitId":"RiyaMehta2211"},"content":" String byWhen \u003d \"/by \";","lastModifiedDate":"2023-09-02"},{"lineNumber":100,"author":{"gitId":"RiyaMehta2211"},"content":" int index \u003d str.indexOf(byWhen);","lastModifiedDate":"2023-09-02"},{"lineNumber":101,"author":{"gitId":"RiyaMehta2211"},"content":" String deadline \u003d str.substring(index + 4); //remove /by from the substring","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"RiyaMehta2211"},"content":" if (deadline.trim().isEmpty()) { //needs to check whether there is anything after /by","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"RiyaMehta2211"},"content":" throw new DeadlineCommandUseException(str);","lastModifiedDate":"2023-09-02"},{"lineNumber":104,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":105,"author":{"gitId":"RiyaMehta2211"},"content":" String workToDo \u003d str.substring(9, index - 1);","lastModifiedDate":"2023-09-05"},{"lineNumber":106,"author":{"gitId":"RiyaMehta2211"},"content":" Task task \u003d new Deadline(workToDo, LocalDateTime.parse(deadline, formatter));","lastModifiedDate":"2023-09-02"},{"lineNumber":107,"author":{"gitId":"RiyaMehta2211"},"content":" tasks.addTask(task);","lastModifiedDate":"2023-09-03"},{"lineNumber":108,"author":{"gitId":"RiyaMehta2211"},"content":" return Ui.printAddTask(task, tasks);","lastModifiedDate":"2023-09-10"},{"lineNumber":109,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":110,"author":{"gitId":"RiyaMehta2211"},"content":" } else if (str.startsWith(\"event\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":111,"author":{"gitId":"RiyaMehta2211"},"content":" if (!str.contains(\"/from\")) {","lastModifiedDate":"2023-09-06"},{"lineNumber":112,"author":{"gitId":"RiyaMehta2211"},"content":" throw new EventCommandUseException(str);","lastModifiedDate":"2023-09-02"},{"lineNumber":113,"author":{"gitId":"RiyaMehta2211"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":114,"author":{"gitId":"RiyaMehta2211"},"content":" String fromMarker \u003d \"/from \"; //mark the /from index of the string","lastModifiedDate":"2023-09-02"},{"lineNumber":115,"author":{"gitId":"RiyaMehta2211"},"content":" int firstIndex \u003d str.indexOf(fromMarker);","lastModifiedDate":"2023-09-02"},{"lineNumber":116,"author":{"gitId":"RiyaMehta2211"},"content":" int secondIndex;","lastModifiedDate":"2023-09-02"},{"lineNumber":117,"author":{"gitId":"RiyaMehta2211"},"content":" String fromWhen;","lastModifiedDate":"2023-09-02"},{"lineNumber":118,"author":{"gitId":"RiyaMehta2211"},"content":" String toWhen;","lastModifiedDate":"2023-09-02"},{"lineNumber":119,"author":{"gitId":"RiyaMehta2211"},"content":" String workToDo \u003d str.substring(6, firstIndex - 1);","lastModifiedDate":"2023-09-05"},{"lineNumber":120,"author":{"gitId":"RiyaMehta2211"},"content":" String afterFirstIndex \u003d str.substring(firstIndex + 6);","lastModifiedDate":"2023-09-02"},{"lineNumber":121,"author":{"gitId":"RiyaMehta2211"},"content":" if (!afterFirstIndex.contains(\"/to \")) { //to check the input of /to after /from","lastModifiedDate":"2023-09-02"},{"lineNumber":122,"author":{"gitId":"RiyaMehta2211"},"content":" throw new EventCommandUseException(str);","lastModifiedDate":"2023-09-02"},{"lineNumber":123,"author":{"gitId":"RiyaMehta2211"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":124,"author":{"gitId":"RiyaMehta2211"},"content":" String toMarker \u003d \"/to \"; //mark the /to index of the string","lastModifiedDate":"2023-09-02"},{"lineNumber":125,"author":{"gitId":"RiyaMehta2211"},"content":" secondIndex \u003d afterFirstIndex.indexOf(toMarker); //to make sure we get the /to after the /from","lastModifiedDate":"2023-09-02"},{"lineNumber":126,"author":{"gitId":"RiyaMehta2211"},"content":" fromWhen \u003d afterFirstIndex.substring(0, secondIndex).trim(); //get the from timing","lastModifiedDate":"2023-09-02"},{"lineNumber":127,"author":{"gitId":"RiyaMehta2211"},"content":" toWhen \u003d afterFirstIndex.substring(secondIndex + 3).trim(); //get the to timing","lastModifiedDate":"2023-09-02"},{"lineNumber":128,"author":{"gitId":"RiyaMehta2211"},"content":" if (fromWhen.trim().isEmpty() ||","lastModifiedDate":"2023-09-02"},{"lineNumber":129,"author":{"gitId":"RiyaMehta2211"},"content":" toWhen.trim().isEmpty()) { //needs to check whether there is anything after /by","lastModifiedDate":"2023-09-02"},{"lineNumber":130,"author":{"gitId":"RiyaMehta2211"},"content":" throw new EventCommandUseException(str);","lastModifiedDate":"2023-09-02"},{"lineNumber":131,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":132,"author":{"gitId":"RiyaMehta2211"},"content":" Task task \u003d new Event(workToDo, LocalDateTime.parse(fromWhen, formatter),","lastModifiedDate":"2023-09-02"},{"lineNumber":133,"author":{"gitId":"RiyaMehta2211"},"content":" LocalDateTime.parse(toWhen, formatter));","lastModifiedDate":"2023-09-02"},{"lineNumber":134,"author":{"gitId":"RiyaMehta2211"},"content":" tasks.addTask(task);","lastModifiedDate":"2023-09-03"},{"lineNumber":135,"author":{"gitId":"RiyaMehta2211"},"content":" return Ui.printAddTask(task, tasks);","lastModifiedDate":"2023-09-10"},{"lineNumber":136,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":137,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":138,"author":{"gitId":"RiyaMehta2211"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":139,"author":{"gitId":"RiyaMehta2211"},"content":" throw new InvalidInputException(str);","lastModifiedDate":"2023-09-02"},{"lineNumber":140,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":141,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":142,"author":{"gitId":"RiyaMehta2211"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":143,"author":{"gitId":"RiyaMehta2211"},"content":" return Ui.listTasks(tasks);","lastModifiedDate":"2023-09-10"},{"lineNumber":144,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":145,"author":{"gitId":"RiyaMehta2211"},"content":" } catch (java.time.format.DateTimeParseException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":146,"author":{"gitId":"RiyaMehta2211"},"content":" //detect inputs that don\u0027t follow the yyyy-MM-dd HHmm format","lastModifiedDate":"2023-09-02"},{"lineNumber":147,"author":{"gitId":"RiyaMehta2211"},"content":" return Ui.printException();","lastModifiedDate":"2023-09-10"},{"lineNumber":148,"author":{"gitId":"RiyaMehta2211"},"content":" } catch (InvalidInputException | EventCommandUseException |","lastModifiedDate":"2023-09-02"},{"lineNumber":149,"author":{"gitId":"RiyaMehta2211"},"content":" DeadlineCommandUseException | ToDoCommandUseException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":150,"author":{"gitId":"RiyaMehta2211"},"content":" return Ui.printException(e.getMessage());","lastModifiedDate":"2023-09-10"},{"lineNumber":151,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":152,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":153,"author":{"gitId":"RiyaMehta2211"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"RiyaMehta2211":153}},{"path":"src/main/java/duke/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"RiyaMehta2211"},"content":"package duke;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"RiyaMehta2211"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"RiyaMehta2211"},"content":"import duke.task.Event;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"RiyaMehta2211"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"RiyaMehta2211"},"content":"import duke.task.ToDo;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"RiyaMehta2211"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"RiyaMehta2211"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"RiyaMehta2211"},"content":"import java.nio.file.FileSystems;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"RiyaMehta2211"},"content":"import java.nio.file.Files;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"RiyaMehta2211"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"RiyaMehta2211"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"RiyaMehta2211"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"RiyaMehta2211"},"content":"import java.io.FileReader;","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"RiyaMehta2211"},"content":"import java.io.BufferedReader;","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"RiyaMehta2211"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"RiyaMehta2211"},"content":" * The Storage class is responsible for reading and writing tasklists","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"RiyaMehta2211"},"content":" * to and from the Duke.txt file.","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"RiyaMehta2211"},"content":"public class Storage{","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"RiyaMehta2211"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"RiyaMehta2211"},"content":" * Saves the tasks in the task list to the specified file path.","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"RiyaMehta2211"},"content":" * @param filePath The path to the file where tasks will be saved.","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"RiyaMehta2211"},"content":" * @param tasks The task list to be saved.","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"RiyaMehta2211"},"content":" * @throws FileNotFoundException If the specified file is not found.","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"RiyaMehta2211"},"content":" public static void saveTasks(String filePath, TaskList tasks) throws FileNotFoundException{","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"RiyaMehta2211"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"RiyaMehta2211"},"content":" createDirectoryIfNotExists(filePath);","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"RiyaMehta2211"},"content":" FileWriter fileWriter \u003d new FileWriter(filePath);","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"RiyaMehta2211"},"content":" for (int i \u003d 0; i \u003c tasks.getSize(); i++) {","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"RiyaMehta2211"},"content":" Task task \u003d tasks.getTask(i);","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"RiyaMehta2211"},"content":" String taskData \u003d formatTaskData(task);","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"RiyaMehta2211"},"content":" fileWriter.write(taskData);","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"RiyaMehta2211"},"content":" fileWriter.write(System.lineSeparator());","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"RiyaMehta2211"},"content":" fileWriter.close(); // Don\u0027t forget to close the FileWriter when done.","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"RiyaMehta2211"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"RiyaMehta2211"},"content":" System.out.println(\"Error saving tasks: \" + e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"RiyaMehta2211"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":49,"author":{"gitId":"RiyaMehta2211"},"content":" * Formats a task into a string representation suitable for saving to a file.","lastModifiedDate":"2023-09-06"},{"lineNumber":50,"author":{"gitId":"RiyaMehta2211"},"content":" * @param task The task to be formatted.","lastModifiedDate":"2023-09-06"},{"lineNumber":51,"author":{"gitId":"RiyaMehta2211"},"content":" * @return A formatted string representation of the task.","lastModifiedDate":"2023-09-06"},{"lineNumber":52,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":53,"author":{"gitId":"RiyaMehta2211"},"content":" static String formatTaskData(Task task) {","lastModifiedDate":"2023-09-10"},{"lineNumber":54,"author":{"gitId":"RiyaMehta2211"},"content":" // Customize this method based on your Task class structure.","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"RiyaMehta2211"},"content":" String str \u003d task.saveTaskString();","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"RiyaMehta2211"},"content":" return str;","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"RiyaMehta2211"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":59,"author":{"gitId":"RiyaMehta2211"},"content":" * Loads tasks from the specified file path and returns them as a TaskList.","lastModifiedDate":"2023-09-06"},{"lineNumber":60,"author":{"gitId":"RiyaMehta2211"},"content":" * @param filePath The path to the file from which tasks will be loaded.","lastModifiedDate":"2023-09-06"},{"lineNumber":61,"author":{"gitId":"RiyaMehta2211"},"content":" * @return A TaskList containing the loaded tasks.","lastModifiedDate":"2023-09-06"},{"lineNumber":62,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":63,"author":{"gitId":"RiyaMehta2211"},"content":" public static TaskList loadTasks(String filePath) {","lastModifiedDate":"2023-09-10"},{"lineNumber":64,"author":{"gitId":"RiyaMehta2211"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"RiyaMehta2211"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"RiyaMehta2211"},"content":" createDirectoryIfNotExists(filePath);","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"RiyaMehta2211"},"content":" BufferedReader reader \u003d new BufferedReader(new FileReader(filePath));","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"RiyaMehta2211"},"content":" String line;","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"RiyaMehta2211"},"content":" while ((line \u003d reader.readLine()) !\u003d null) {","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"RiyaMehta2211"},"content":" String[] components \u003d line.split(\"\\\\|\");","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"RiyaMehta2211"},"content":" String taskType \u003d components[0];","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"RiyaMehta2211"},"content":" boolean isDone \u003d components[1].equals(\"1\");","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"RiyaMehta2211"},"content":" String description \u003d components[2];","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"RiyaMehta2211"},"content":" switch (taskType) {","lastModifiedDate":"2023-09-05"},{"lineNumber":75,"author":{"gitId":"RiyaMehta2211"},"content":" case \"T\":","lastModifiedDate":"2023-09-05"},{"lineNumber":76,"author":{"gitId":"RiyaMehta2211"},"content":" taskList.addTask(new ToDo(description, isDone));","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"RiyaMehta2211"},"content":" break;","lastModifiedDate":"2023-09-05"},{"lineNumber":78,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":79,"author":{"gitId":"RiyaMehta2211"},"content":" case \"D\":","lastModifiedDate":"2023-09-05"},{"lineNumber":80,"author":{"gitId":"RiyaMehta2211"},"content":" LocalDateTime by \u003d LocalDateTime.parse(components[3]);","lastModifiedDate":"2023-09-03"},{"lineNumber":81,"author":{"gitId":"RiyaMehta2211"},"content":" taskList.addTask(new Deadline(description, isDone, by));","lastModifiedDate":"2023-09-03"},{"lineNumber":82,"author":{"gitId":"RiyaMehta2211"},"content":" break;","lastModifiedDate":"2023-09-05"},{"lineNumber":83,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":84,"author":{"gitId":"RiyaMehta2211"},"content":" case \"E\":","lastModifiedDate":"2023-09-05"},{"lineNumber":85,"author":{"gitId":"RiyaMehta2211"},"content":" LocalDateTime from \u003d LocalDateTime.parse(components[3]);","lastModifiedDate":"2023-09-03"},{"lineNumber":86,"author":{"gitId":"RiyaMehta2211"},"content":" LocalDateTime to \u003d LocalDateTime.parse(components[4]);","lastModifiedDate":"2023-09-03"},{"lineNumber":87,"author":{"gitId":"RiyaMehta2211"},"content":" taskList.addTask(new Event(description, isDone, from, to));","lastModifiedDate":"2023-09-03"},{"lineNumber":88,"author":{"gitId":"RiyaMehta2211"},"content":" break;","lastModifiedDate":"2023-09-05"},{"lineNumber":89,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":90,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":91,"author":{"gitId":"RiyaMehta2211"},"content":" reader.close(); // Close the reader when done.","lastModifiedDate":"2023-09-03"},{"lineNumber":92,"author":{"gitId":"RiyaMehta2211"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":93,"author":{"gitId":"RiyaMehta2211"},"content":" System.out.println(\"File not found: \" + e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":94,"author":{"gitId":"RiyaMehta2211"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":95,"author":{"gitId":"RiyaMehta2211"},"content":" System.out.println(\"Error loading tasks: \" + e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":96,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":97,"author":{"gitId":"RiyaMehta2211"},"content":" return taskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":98,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":99,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":100,"author":{"gitId":"RiyaMehta2211"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":101,"author":{"gitId":"RiyaMehta2211"},"content":" * Creates the necessary directory and file if they do not exist.","lastModifiedDate":"2023-09-06"},{"lineNumber":102,"author":{"gitId":"RiyaMehta2211"},"content":" * @param filePath The path to the file to be created.","lastModifiedDate":"2023-09-06"},{"lineNumber":103,"author":{"gitId":"RiyaMehta2211"},"content":" * @throws IOException If an error occurs during directory or file creation.","lastModifiedDate":"2023-09-06"},{"lineNumber":104,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":105,"author":{"gitId":"RiyaMehta2211"},"content":" private static void createDirectoryIfNotExists(String filePath) throws IOException {","lastModifiedDate":"2023-09-10"},{"lineNumber":106,"author":{"gitId":"RiyaMehta2211"},"content":" Path path \u003d FileSystems.getDefault().getPath(filePath);","lastModifiedDate":"2023-09-03"},{"lineNumber":107,"author":{"gitId":"RiyaMehta2211"},"content":" Path parentDir \u003d path.getParent();","lastModifiedDate":"2023-09-05"},{"lineNumber":108,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":109,"author":{"gitId":"RiyaMehta2211"},"content":" if (parentDir !\u003d null) {","lastModifiedDate":"2023-09-05"},{"lineNumber":110,"author":{"gitId":"RiyaMehta2211"},"content":" if (!Files.exists(parentDir)) {","lastModifiedDate":"2023-09-05"},{"lineNumber":111,"author":{"gitId":"RiyaMehta2211"},"content":" Files.createDirectories(parentDir);","lastModifiedDate":"2023-09-05"},{"lineNumber":112,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":113,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":114,"author":{"gitId":"RiyaMehta2211"},"content":" if (!Files.exists(path)) {","lastModifiedDate":"2023-09-05"},{"lineNumber":115,"author":{"gitId":"RiyaMehta2211"},"content":" Files.createFile(path);","lastModifiedDate":"2023-09-05"},{"lineNumber":116,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":117,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":118,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":119,"author":{"gitId":"RiyaMehta2211"},"content":"}","lastModifiedDate":"2023-09-05"},{"lineNumber":120,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":121,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":122,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"RiyaMehta2211":122}},{"path":"src/main/java/duke/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"RiyaMehta2211"},"content":"package duke;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"RiyaMehta2211"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"RiyaMehta2211"},"content":"import java.util.List;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"RiyaMehta2211"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"RiyaMehta2211"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"RiyaMehta2211"},"content":" * The TaskList class represents a list of tasks in Duke.","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"RiyaMehta2211"},"content":" * It provides methods for adding, removing, and retrieving tasks from the list.","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"RiyaMehta2211"},"content":"public class TaskList{","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"RiyaMehta2211"},"content":" private List\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"RiyaMehta2211"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"RiyaMehta2211"},"content":" * Default constructor to initialize an empty TaskList.","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"RiyaMehta2211"},"content":" public TaskList() {","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"RiyaMehta2211"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"RiyaMehta2211"},"content":" * Adds a task to the task list.","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"RiyaMehta2211"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"RiyaMehta2211"},"content":" * @param task The task to be added.","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"RiyaMehta2211"},"content":" public void addTask(Task task){","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"RiyaMehta2211"},"content":" this.tasks.add(task);","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"RiyaMehta2211"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"RiyaMehta2211"},"content":" * Removes a task from the task list at the specified index.","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"RiyaMehta2211"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"RiyaMehta2211"},"content":" * @param index The index of the task to be removed.","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"RiyaMehta2211"},"content":" * @return The removed task.","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"RiyaMehta2211"},"content":" public Task removeTask(int index){","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"RiyaMehta2211"},"content":" return this.tasks.remove(index);","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"RiyaMehta2211"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"RiyaMehta2211"},"content":" * Retrieves a task from the task list at the specified index.","lastModifiedDate":"2023-09-06"},{"lineNumber":40,"author":{"gitId":"RiyaMehta2211"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":41,"author":{"gitId":"RiyaMehta2211"},"content":" * @param index The index of the task to be retrieved.","lastModifiedDate":"2023-09-06"},{"lineNumber":42,"author":{"gitId":"RiyaMehta2211"},"content":" * @return The retrieved task.","lastModifiedDate":"2023-09-06"},{"lineNumber":43,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":44,"author":{"gitId":"RiyaMehta2211"},"content":" public Task getTask(int index){","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"RiyaMehta2211"},"content":" return this.tasks.get(index);","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"RiyaMehta2211"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":49,"author":{"gitId":"RiyaMehta2211"},"content":" * Marks a task in the task list as done.","lastModifiedDate":"2023-09-06"},{"lineNumber":50,"author":{"gitId":"RiyaMehta2211"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":51,"author":{"gitId":"RiyaMehta2211"},"content":" * @param index The index of the task to be marked as done.","lastModifiedDate":"2023-09-06"},{"lineNumber":52,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":53,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":54,"author":{"gitId":"RiyaMehta2211"},"content":" public void markDone(int index){","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"RiyaMehta2211"},"content":" this.tasks.get(index).markAsDone();","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":58,"author":{"gitId":"RiyaMehta2211"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":59,"author":{"gitId":"RiyaMehta2211"},"content":" * Marks a task in the task list as not done.","lastModifiedDate":"2023-09-06"},{"lineNumber":60,"author":{"gitId":"RiyaMehta2211"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":61,"author":{"gitId":"RiyaMehta2211"},"content":" * @param index The index of the task to be marked as not done.","lastModifiedDate":"2023-09-06"},{"lineNumber":62,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":63,"author":{"gitId":"RiyaMehta2211"},"content":" public void markNotDone(int index){","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"RiyaMehta2211"},"content":" this.tasks.get(index).markAsNotDone();","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":67,"author":{"gitId":"RiyaMehta2211"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":68,"author":{"gitId":"RiyaMehta2211"},"content":" * Returns the size of the task list.","lastModifiedDate":"2023-09-06"},{"lineNumber":69,"author":{"gitId":"RiyaMehta2211"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":70,"author":{"gitId":"RiyaMehta2211"},"content":" * @return The number of tasks in the task list.","lastModifiedDate":"2023-09-06"},{"lineNumber":71,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":72,"author":{"gitId":"RiyaMehta2211"},"content":" public int getSize() {","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"RiyaMehta2211"},"content":" return tasks.size();","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"RiyaMehta2211"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"RiyaMehta2211":76}},{"path":"src/main/java/duke/exception/DeadlineCommandUseException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"RiyaMehta2211"},"content":"package duke.exception;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"RiyaMehta2211"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"RiyaMehta2211"},"content":" * Represents an exception that occurs when the user input for a deadline command is invalid.","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"RiyaMehta2211"},"content":" * This exception is thrown when the \u0027/by\u0027 part of the deadline command is missing or not followed","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"RiyaMehta2211"},"content":" * by a valid date and time.","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"RiyaMehta2211"},"content":"public class DeadlineCommandUseException extends Exception {","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"RiyaMehta2211"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"RiyaMehta2211"},"content":" * Constructs a DeadlineCommandUseException with a custom error message.","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"RiyaMehta2211"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"RiyaMehta2211"},"content":" * @param message The error message indicating the issue with the deadline command input.","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"RiyaMehta2211"},"content":" public DeadlineCommandUseException(String message) {","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"RiyaMehta2211"},"content":" super(message + \":\" + \" Accio error! deadline must be followed by a task to be added to the list \" +","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"RiyaMehta2211"},"content":" \"and a time specified after \u0027/by\u0027 \");","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"RiyaMehta2211"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"RiyaMehta2211":19}},{"path":"src/main/java/duke/exception/EventCommandUseException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"RiyaMehta2211"},"content":"package duke.exception;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"RiyaMehta2211"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"RiyaMehta2211"},"content":" * Represents an exception that occurs when the user input for an event command is invalid.","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"RiyaMehta2211"},"content":" * This exception is thrown when the \u0027/from\u0027 or \u0027/to\u0027 parts of the event command are missing or","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"RiyaMehta2211"},"content":" * not followed by valid date and time.","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"RiyaMehta2211"},"content":"public class EventCommandUseException extends Exception {","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"RiyaMehta2211"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"RiyaMehta2211"},"content":" * Constructs an EventCommandUseException with a custom error message.","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"RiyaMehta2211"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"RiyaMehta2211"},"content":" * @param message The error message indicating the issue with the event command input.","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"RiyaMehta2211"},"content":" public EventCommandUseException(String message) {","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"RiyaMehta2211"},"content":" super(message + \":\" + \" Accio error! Invalid input as when the event starts \" +","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"RiyaMehta2211"},"content":" \"must be specified after \u0027/from\u0027. When the event ends must also be specified after \u0027/to\u0027.\");","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"RiyaMehta2211"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"RiyaMehta2211":19}},{"path":"src/main/java/duke/exception/InvalidInputException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"RiyaMehta2211"},"content":"package duke.exception;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"RiyaMehta2211"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"RiyaMehta2211"},"content":" * Represents an exception that occurs when the user input is invalid or not recognized.","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"RiyaMehta2211"},"content":" * This exception is thrown when the user provides an input that does not match any of the valid instructions.","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"RiyaMehta2211"},"content":"public class InvalidInputException extends Exception {","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"RiyaMehta2211"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"RiyaMehta2211"},"content":" * Constructs an InvalidInputException with a custom error message.","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"RiyaMehta2211"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"RiyaMehta2211"},"content":" * @param message The error message indicating that the input provided is invalid.","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"RiyaMehta2211"},"content":" public InvalidInputException(String message) {","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"RiyaMehta2211"},"content":" super(message + \":\" + \"\\n\\tAccio error! I don\u0027t know what the input means D: \" +","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"RiyaMehta2211"},"content":" \"Please enter valid inputs. \" +","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"RiyaMehta2211"},"content":" \"Below are the valid\" + \" inputs I can take\\n\" +","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"RiyaMehta2211"},"content":" \"\\t1. list \\n\\t2. todo \\n\\t3. deadline \" +","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"RiyaMehta2211"},"content":" \"\\n\\t4. event \\n\\t5. mark \\n\\t6. unmark \\n\\t7. find \\n\\t8. bye\");","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"RiyaMehta2211"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"RiyaMehta2211":22}},{"path":"src/main/java/duke/exception/ToDoCommandUseException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"RiyaMehta2211"},"content":"package duke.exception;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"RiyaMehta2211"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"RiyaMehta2211"},"content":" * Represents an exception that occurs when the user input for a todo instruction is invalid.","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"RiyaMehta2211"},"content":" * This exception is thrown when the todo command is not followed by a task description to be added to the list.","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"RiyaMehta2211"},"content":"public class ToDoCommandUseException extends Exception{","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"RiyaMehta2211"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"RiyaMehta2211"},"content":" * Constructs a ToDoCommandUseException with a custom error message.","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"RiyaMehta2211"},"content":" * @param message The error message indicating the issue with the todo command input.","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"RiyaMehta2211"},"content":" public ToDoCommandUseException(String message) {","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"RiyaMehta2211"},"content":" super(message + \":\" + \" Accio error! todo must be followed by a task to be added to the list\");","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"RiyaMehta2211"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"RiyaMehta2211":15}},{"path":"src/main/java/duke/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"RiyaMehta2211"},"content":"package duke.task;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"RiyaMehta2211"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"RiyaMehta2211"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"RiyaMehta2211"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"RiyaMehta2211"},"content":" * This class inherits from the Task class and represents a Deadline task type","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"RiyaMehta2211"},"content":" * with a description, a deadline and completion status","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"RiyaMehta2211"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"RiyaMehta2211"},"content":" protected LocalDateTime date;","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"RiyaMehta2211"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"RiyaMehta2211"},"content":" * Constructor to build a Deadline Task Object with the task description and date","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"RiyaMehta2211"},"content":" * @param description The description of the Deadline Task","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"RiyaMehta2211"},"content":" * @param date The deadline by which the Deadline Task is due","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"RiyaMehta2211"},"content":" public Deadline(String description, LocalDateTime date) {","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"RiyaMehta2211"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"RiyaMehta2211"},"content":" this.date \u003d date;","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"RiyaMehta2211"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"RiyaMehta2211"},"content":" * Overloaded constructor to build a Deadline Task Object read from the tasks","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"RiyaMehta2211"},"content":" * saved in the txt file with the task description, completion status and date","lastModifiedDate":"2023-09-06"},{"lineNumber":26,"author":{"gitId":"RiyaMehta2211"},"content":" * @param description The description of the Deadline Task","lastModifiedDate":"2023-09-06"},{"lineNumber":27,"author":{"gitId":"RiyaMehta2211"},"content":" * @param isDone represents the completion status of the task","lastModifiedDate":"2023-09-06"},{"lineNumber":28,"author":{"gitId":"RiyaMehta2211"},"content":" * @param date The deadline by which the Deadline Task is due","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"RiyaMehta2211"},"content":" public Deadline(String description, boolean isDone, LocalDateTime date) {","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"RiyaMehta2211"},"content":" super(description, isDone);","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"RiyaMehta2211"},"content":" this.date \u003d date;","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"RiyaMehta2211"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"RiyaMehta2211"},"content":" * Returns a formatted string representation of the Deadline Task, including","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"RiyaMehta2211"},"content":" * its type, completion status, description, and due date/time.","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"RiyaMehta2211"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"RiyaMehta2211"},"content":" * @return A string representing the Deadline Task.","lastModifiedDate":"2023-09-06"},{"lineNumber":40,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":41,"author":{"gitId":"RiyaMehta2211"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":42,"author":{"gitId":"RiyaMehta2211"},"content":" public String taskString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":43,"author":{"gitId":"RiyaMehta2211"},"content":" return \"[D]\" + super.taskString() + \" (by: \" +","lastModifiedDate":"2023-09-06"},{"lineNumber":44,"author":{"gitId":"RiyaMehta2211"},"content":" date.format(DateTimeFormatter.ofPattern(\"MMM d yyyy HHmm\")) + \")\";","lastModifiedDate":"2023-09-06"},{"lineNumber":45,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":46,"author":{"gitId":"RiyaMehta2211"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":47,"author":{"gitId":"RiyaMehta2211"},"content":" * Returns a string representation of the Deadline Task that can be used for","lastModifiedDate":"2023-09-06"},{"lineNumber":48,"author":{"gitId":"RiyaMehta2211"},"content":" * saving the deadline tasks to a txt file, including its type, completion status,","lastModifiedDate":"2023-09-06"},{"lineNumber":49,"author":{"gitId":"RiyaMehta2211"},"content":" * description, and due date.","lastModifiedDate":"2023-09-06"},{"lineNumber":50,"author":{"gitId":"RiyaMehta2211"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":51,"author":{"gitId":"RiyaMehta2211"},"content":" * @return A string suitable for saving the Deadline Task to a text file.","lastModifiedDate":"2023-09-06"},{"lineNumber":52,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":53,"author":{"gitId":"RiyaMehta2211"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"RiyaMehta2211"},"content":" public String saveTaskString() {","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"RiyaMehta2211"},"content":" String status \u003d (this.isDone ? \"1\" : \"0\");","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"RiyaMehta2211"},"content":" return \"D\" + \"|\" + status + \"|\" + this.description","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"RiyaMehta2211"},"content":" + \"|\" + this.date;","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"RiyaMehta2211"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"RiyaMehta2211":59}},{"path":"src/main/java/duke/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"RiyaMehta2211"},"content":"package duke.task;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"RiyaMehta2211"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"RiyaMehta2211"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"RiyaMehta2211"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"RiyaMehta2211"},"content":" * This class inherits from the Task class and represents an Event task type","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"RiyaMehta2211"},"content":" * with a description, a start and end date \u0026 time and completion status","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"RiyaMehta2211"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"RiyaMehta2211"},"content":" LocalDateTime startDate;","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"RiyaMehta2211"},"content":" LocalDateTime endDate;","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"RiyaMehta2211"},"content":" //Introducing LocalDateTime to parse the string inputs given by the user","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"RiyaMehta2211"},"content":" //for the relevant date and time","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"RiyaMehta2211"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"RiyaMehta2211"},"content":" * Constructor to build an Event Task Object with the task description,","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"RiyaMehta2211"},"content":" * start date, and end date \u0026 time.","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"RiyaMehta2211"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"RiyaMehta2211"},"content":" * @param description The description of the Event Task.","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"RiyaMehta2211"},"content":" * @param startDate The start date and time of the Event.","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"RiyaMehta2211"},"content":" * @param endDate The end date and time of the Event.","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"RiyaMehta2211"},"content":" public Event(String description, LocalDateTime startDate, LocalDateTime endDate) {","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"RiyaMehta2211"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"RiyaMehta2211"},"content":" this.startDate \u003d startDate;","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"RiyaMehta2211"},"content":" this.endDate \u003d endDate;","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"RiyaMehta2211"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"RiyaMehta2211"},"content":" * Overloaded constructor to build an Event Task Object read from the tasks","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"RiyaMehta2211"},"content":" * saved in the txt file with the task description, completion status,","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"RiyaMehta2211"},"content":" * start date and end date \u0026 time.","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"RiyaMehta2211"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"RiyaMehta2211"},"content":" * @param description The description of the Event Task.","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"RiyaMehta2211"},"content":" * @param isDone Represents the completion status of the task.","lastModifiedDate":"2023-09-06"},{"lineNumber":36,"author":{"gitId":"RiyaMehta2211"},"content":" * @param startDate The start date and time of the Event.","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"RiyaMehta2211"},"content":" * @param endDate The end date and time of the Event.","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"RiyaMehta2211"},"content":" public Event(String description, boolean isDone, LocalDateTime startDate, LocalDateTime endDate) {","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"RiyaMehta2211"},"content":" super(description, isDone);","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"RiyaMehta2211"},"content":" this.startDate \u003d startDate;","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"RiyaMehta2211"},"content":" this.endDate \u003d endDate;","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"RiyaMehta2211"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":45,"author":{"gitId":"RiyaMehta2211"},"content":" * Returns a formatted string representation of the Event Task, including","lastModifiedDate":"2023-09-06"},{"lineNumber":46,"author":{"gitId":"RiyaMehta2211"},"content":" * its type, description, start date, and end date \u0026 time.","lastModifiedDate":"2023-09-06"},{"lineNumber":47,"author":{"gitId":"RiyaMehta2211"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":48,"author":{"gitId":"RiyaMehta2211"},"content":" * @return A string representing the Event Task.","lastModifiedDate":"2023-09-06"},{"lineNumber":49,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":50,"author":{"gitId":"RiyaMehta2211"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":51,"author":{"gitId":"RiyaMehta2211"},"content":" public String taskString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":52,"author":{"gitId":"RiyaMehta2211"},"content":" return \"[E]\" + super.taskString() + \" (from: \" +","lastModifiedDate":"2023-09-06"},{"lineNumber":53,"author":{"gitId":"RiyaMehta2211"},"content":" startDate.format(DateTimeFormatter.ofPattern(\"MMM d yyyy HHmm\")) +","lastModifiedDate":"2023-09-06"},{"lineNumber":54,"author":{"gitId":"RiyaMehta2211"},"content":" \" to: \" + endDate.format(DateTimeFormatter.ofPattern(\"MMM d yyyy HHmm\")) + \")\";","lastModifiedDate":"2023-09-06"},{"lineNumber":55,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":56,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":57,"author":{"gitId":"RiyaMehta2211"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":58,"author":{"gitId":"RiyaMehta2211"},"content":" * Returns a string representation of the Event Task that can be used for","lastModifiedDate":"2023-09-06"},{"lineNumber":59,"author":{"gitId":"RiyaMehta2211"},"content":" * saving the event tasks to a txt file, including its type, completion status,","lastModifiedDate":"2023-09-06"},{"lineNumber":60,"author":{"gitId":"RiyaMehta2211"},"content":" * description, start date, and end date \u0026 time.","lastModifiedDate":"2023-09-06"},{"lineNumber":61,"author":{"gitId":"RiyaMehta2211"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":62,"author":{"gitId":"RiyaMehta2211"},"content":" * @return A string suitable for saving the Event Task to a text file.","lastModifiedDate":"2023-09-06"},{"lineNumber":63,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":64,"author":{"gitId":"RiyaMehta2211"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"RiyaMehta2211"},"content":" public String saveTaskString() {","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"RiyaMehta2211"},"content":" String status \u003d (this.isDone ? \"1\" : \"0\");","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"RiyaMehta2211"},"content":" return \"E\" + \"|\" + status + \"|\" + this.description","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"RiyaMehta2211"},"content":" + \"|\" + this.startDate + \"|\" + this.endDate;","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"RiyaMehta2211"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"RiyaMehta2211":70}},{"path":"src/main/java/duke/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"RiyaMehta2211"},"content":"package duke.task;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"RiyaMehta2211"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":3,"author":{"gitId":"RiyaMehta2211"},"content":" * The Task class is the base class for creating task objects in Duke. Task objects","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"RiyaMehta2211"},"content":" * can be of different types, including ToDos, Deadlines, and Events.","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"RiyaMehta2211"},"content":"public abstract class Task{","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"RiyaMehta2211"},"content":" protected String description;","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"RiyaMehta2211"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"RiyaMehta2211"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"RiyaMehta2211"},"content":" * Constructor to build a Task Object with the task description.","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"RiyaMehta2211"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"RiyaMehta2211"},"content":" * @param description The description of the Task.","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"RiyaMehta2211"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"RiyaMehta2211"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"RiyaMehta2211"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"RiyaMehta2211"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"RiyaMehta2211"},"content":" * Overloaded constructor to build a Task Object with the task description and completion status.","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"RiyaMehta2211"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"RiyaMehta2211"},"content":" * @param description The description of the Task.","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"RiyaMehta2211"},"content":" * @param isDone Represents the completion status of the task.","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"RiyaMehta2211"},"content":" public Task(String description, boolean isDone) {","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"RiyaMehta2211"},"content":" this.description \u003d description;","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"RiyaMehta2211"},"content":" this.isDone \u003d isDone;","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"RiyaMehta2211"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"RiyaMehta2211"},"content":" * Marks the task as done by setting the completion status to true.","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"RiyaMehta2211"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"RiyaMehta2211"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"RiyaMehta2211"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":37,"author":{"gitId":"RiyaMehta2211"},"content":" * Marks the task as not done by setting the completion status to false.","lastModifiedDate":"2023-09-06"},{"lineNumber":38,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":39,"author":{"gitId":"RiyaMehta2211"},"content":" public void markAsNotDone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"RiyaMehta2211"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":42,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":43,"author":{"gitId":"RiyaMehta2211"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":44,"author":{"gitId":"RiyaMehta2211"},"content":" * Gets the description of the task.","lastModifiedDate":"2023-09-06"},{"lineNumber":45,"author":{"gitId":"RiyaMehta2211"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":46,"author":{"gitId":"RiyaMehta2211"},"content":" * @return The description of the task.","lastModifiedDate":"2023-09-06"},{"lineNumber":47,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":48,"author":{"gitId":"RiyaMehta2211"},"content":" public String getTask() {","lastModifiedDate":"2023-08-24"},{"lineNumber":49,"author":{"gitId":"RiyaMehta2211"},"content":" return this.description;","lastModifiedDate":"2023-08-24"},{"lineNumber":50,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":51,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":52,"author":{"gitId":"RiyaMehta2211"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":53,"author":{"gitId":"RiyaMehta2211"},"content":" * Returns a formatted string representation of the Task, including its completion","lastModifiedDate":"2023-09-06"},{"lineNumber":54,"author":{"gitId":"RiyaMehta2211"},"content":" * status and description.","lastModifiedDate":"2023-09-06"},{"lineNumber":55,"author":{"gitId":"RiyaMehta2211"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":56,"author":{"gitId":"RiyaMehta2211"},"content":" * @return A string representing the Task.","lastModifiedDate":"2023-09-06"},{"lineNumber":57,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":58,"author":{"gitId":"RiyaMehta2211"},"content":" public String taskString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":59,"author":{"gitId":"RiyaMehta2211"},"content":" String str \u003d this.isDone ? \"[X] \" : \"[ ] \";","lastModifiedDate":"2023-08-24"},{"lineNumber":60,"author":{"gitId":"RiyaMehta2211"},"content":" String output \u003d str + this.description;","lastModifiedDate":"2023-08-24"},{"lineNumber":61,"author":{"gitId":"RiyaMehta2211"},"content":" return output;","lastModifiedDate":"2023-08-24"},{"lineNumber":62,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":63,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"RiyaMehta2211"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":65,"author":{"gitId":"RiyaMehta2211"},"content":" * Abstract method for saving the task to a text file. Subclasses will override","lastModifiedDate":"2023-09-06"},{"lineNumber":66,"author":{"gitId":"RiyaMehta2211"},"content":" * and implement this method.","lastModifiedDate":"2023-09-06"},{"lineNumber":67,"author":{"gitId":"RiyaMehta2211"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":68,"author":{"gitId":"RiyaMehta2211"},"content":" * @return A string suitable for saving the Task to a text file.","lastModifiedDate":"2023-09-06"},{"lineNumber":69,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":70,"author":{"gitId":"RiyaMehta2211"},"content":" public abstract String saveTaskString();","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"RiyaMehta2211"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"RiyaMehta2211":71}},{"path":"src/main/java/duke/task/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"RiyaMehta2211"},"content":"package duke.task;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"RiyaMehta2211"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":4,"author":{"gitId":"RiyaMehta2211"},"content":" * This class inherits from the Task class and represents a ToDo task type","lastModifiedDate":"2023-09-06"},{"lineNumber":5,"author":{"gitId":"RiyaMehta2211"},"content":" * with a description and completion status","lastModifiedDate":"2023-09-06"},{"lineNumber":6,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"RiyaMehta2211"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"RiyaMehta2211"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"RiyaMehta2211"},"content":" * Constructor to build a ToDo Task Object with the task description.","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"RiyaMehta2211"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"RiyaMehta2211"},"content":" * @param todo The description of the ToDo Task.","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"RiyaMehta2211"},"content":" public ToDo(String todo) {","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"RiyaMehta2211"},"content":" super(todo);","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":18,"author":{"gitId":"RiyaMehta2211"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":19,"author":{"gitId":"RiyaMehta2211"},"content":" * Overloaded constructor to build a ToDo Task Object read from the tasks","lastModifiedDate":"2023-09-06"},{"lineNumber":20,"author":{"gitId":"RiyaMehta2211"},"content":" * saved in the txt file with the task description and completion status.","lastModifiedDate":"2023-09-06"},{"lineNumber":21,"author":{"gitId":"RiyaMehta2211"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"RiyaMehta2211"},"content":" * @param todo The description of the ToDo Task.","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"RiyaMehta2211"},"content":" * @param isDone Represents the completion status of the task.","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":25,"author":{"gitId":"RiyaMehta2211"},"content":" public ToDo(String todo, boolean isDone) {","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"RiyaMehta2211"},"content":" super(todo, isDone);","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"RiyaMehta2211"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"RiyaMehta2211"},"content":" * Returns a formatted string representation of the ToDo Task, including","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"RiyaMehta2211"},"content":" * its type and description.","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"RiyaMehta2211"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"RiyaMehta2211"},"content":" * @return A string representing the ToDo Task.","lastModifiedDate":"2023-09-06"},{"lineNumber":34,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":35,"author":{"gitId":"RiyaMehta2211"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"RiyaMehta2211"},"content":" public String taskString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"RiyaMehta2211"},"content":" String output \u003d \"[T]\" + super.taskString();","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"RiyaMehta2211"},"content":" return output;","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"RiyaMehta2211"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":42,"author":{"gitId":"RiyaMehta2211"},"content":" * Returns a string representation of the ToDo Task that can be used for","lastModifiedDate":"2023-09-06"},{"lineNumber":43,"author":{"gitId":"RiyaMehta2211"},"content":" * saving the task to a txt file, including its type, completion status,","lastModifiedDate":"2023-09-06"},{"lineNumber":44,"author":{"gitId":"RiyaMehta2211"},"content":" * and description.","lastModifiedDate":"2023-09-06"},{"lineNumber":45,"author":{"gitId":"RiyaMehta2211"},"content":" * @return A string suitable for saving the ToDo Task to a text file.","lastModifiedDate":"2023-09-06"},{"lineNumber":46,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":47,"author":{"gitId":"RiyaMehta2211"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"RiyaMehta2211"},"content":" public String saveTaskString() {","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"RiyaMehta2211"},"content":" String status \u003d (this.isDone ? \"1\" : \"0\");","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"RiyaMehta2211"},"content":" return \"T\" + \"|\" + status + \"|\" + this.description;","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"RiyaMehta2211"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"RiyaMehta2211":53}},{"path":"src/main/java/duke/ui/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"RiyaMehta2211"},"content":"package duke.ui;","lastModifiedDate":"2023-09-10"},{"lineNumber":2,"author":{"gitId":"RiyaMehta2211"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"RiyaMehta2211"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"RiyaMehta2211"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"RiyaMehta2211"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"RiyaMehta2211"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"RiyaMehta2211"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"RiyaMehta2211"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"RiyaMehta2211"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"RiyaMehta2211"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"RiyaMehta2211"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"RiyaMehta2211"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"RiyaMehta2211"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"RiyaMehta2211"},"content":"/**","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"RiyaMehta2211"},"content":" * An example of a custom control using FXML.","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"RiyaMehta2211"},"content":" * This control represents a dialog box consisting of an ImageView to represent the speaker\u0027s face and a label","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"RiyaMehta2211"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":21,"author":{"gitId":"RiyaMehta2211"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"RiyaMehta2211"},"content":" @FXML","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"RiyaMehta2211"},"content":" private Label dialog;","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"RiyaMehta2211"},"content":" @FXML","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"RiyaMehta2211"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":27,"author":{"gitId":"RiyaMehta2211"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"RiyaMehta2211"},"content":" try {","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"RiyaMehta2211"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-10"},{"lineNumber":30,"author":{"gitId":"RiyaMehta2211"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"RiyaMehta2211"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"RiyaMehta2211"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-10"},{"lineNumber":33,"author":{"gitId":"RiyaMehta2211"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-10"},{"lineNumber":34,"author":{"gitId":"RiyaMehta2211"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-10"},{"lineNumber":35,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":36,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":37,"author":{"gitId":"RiyaMehta2211"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-10"},{"lineNumber":38,"author":{"gitId":"RiyaMehta2211"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-10"},{"lineNumber":39,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":40,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":41,"author":{"gitId":"RiyaMehta2211"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":42,"author":{"gitId":"RiyaMehta2211"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-10"},{"lineNumber":43,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":44,"author":{"gitId":"RiyaMehta2211"},"content":" private void flip() {","lastModifiedDate":"2023-09-10"},{"lineNumber":45,"author":{"gitId":"RiyaMehta2211"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-10"},{"lineNumber":46,"author":{"gitId":"RiyaMehta2211"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-10"},{"lineNumber":47,"author":{"gitId":"RiyaMehta2211"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-10"},{"lineNumber":48,"author":{"gitId":"RiyaMehta2211"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-10"},{"lineNumber":49,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":50,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":51,"author":{"gitId":"RiyaMehta2211"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-10"},{"lineNumber":52,"author":{"gitId":"RiyaMehta2211"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-10"},{"lineNumber":53,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":54,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":55,"author":{"gitId":"RiyaMehta2211"},"content":" public static DialogBox getDukeDialog(String text, Image img) {","lastModifiedDate":"2023-09-10"},{"lineNumber":56,"author":{"gitId":"RiyaMehta2211"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-10"},{"lineNumber":57,"author":{"gitId":"RiyaMehta2211"},"content":" db.flip();","lastModifiedDate":"2023-09-10"},{"lineNumber":58,"author":{"gitId":"RiyaMehta2211"},"content":" return db;","lastModifiedDate":"2023-09-10"},{"lineNumber":59,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":60,"author":{"gitId":"RiyaMehta2211"},"content":"}","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"RiyaMehta2211":60}},{"path":"src/main/java/duke/ui/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"RiyaMehta2211"},"content":"package duke.ui;","lastModifiedDate":"2023-09-10"},{"lineNumber":2,"author":{"gitId":"RiyaMehta2211"},"content":"import duke.Duke;","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"RiyaMehta2211"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"RiyaMehta2211"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"RiyaMehta2211"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"RiyaMehta2211"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"RiyaMehta2211"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"RiyaMehta2211"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"RiyaMehta2211"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"RiyaMehta2211"},"content":"/**","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"RiyaMehta2211"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"RiyaMehta2211"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"RiyaMehta2211"},"content":" @FXML","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"RiyaMehta2211"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"RiyaMehta2211"},"content":" @FXML","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"RiyaMehta2211"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"RiyaMehta2211"},"content":" @FXML","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"RiyaMehta2211"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"RiyaMehta2211"},"content":" @FXML","lastModifiedDate":"2023-09-10"},{"lineNumber":21,"author":{"gitId":"RiyaMehta2211"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"RiyaMehta2211"},"content":" private Duke duke;","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"RiyaMehta2211"},"content":" private Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/Muggle.png\"));","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"RiyaMehta2211"},"content":" private Image dukeImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/Duke.png\"));","lastModifiedDate":"2023-09-10"},{"lineNumber":27,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"RiyaMehta2211"},"content":" @FXML","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"RiyaMehta2211"},"content":" public void initialize() {","lastModifiedDate":"2023-09-10"},{"lineNumber":30,"author":{"gitId":"RiyaMehta2211"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"RiyaMehta2211"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"RiyaMehta2211"},"content":" DialogBox.getDukeDialog(Ui.printHello(), dukeImage)","lastModifiedDate":"2023-09-10"},{"lineNumber":33,"author":{"gitId":"RiyaMehta2211"},"content":" );","lastModifiedDate":"2023-09-10"},{"lineNumber":34,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":35,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":36,"author":{"gitId":"RiyaMehta2211"},"content":" public void setDuke(Duke d) {","lastModifiedDate":"2023-09-10"},{"lineNumber":37,"author":{"gitId":"RiyaMehta2211"},"content":" duke \u003d d;","lastModifiedDate":"2023-09-10"},{"lineNumber":38,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":39,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":40,"author":{"gitId":"RiyaMehta2211"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":41,"author":{"gitId":"RiyaMehta2211"},"content":" * Creates two dialog boxes, one echoing user input and the other containing Duke\u0027s reply and then appends them to","lastModifiedDate":"2023-09-10"},{"lineNumber":42,"author":{"gitId":"RiyaMehta2211"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-10"},{"lineNumber":43,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":44,"author":{"gitId":"RiyaMehta2211"},"content":" @FXML","lastModifiedDate":"2023-09-10"},{"lineNumber":45,"author":{"gitId":"RiyaMehta2211"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-10"},{"lineNumber":46,"author":{"gitId":"RiyaMehta2211"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-10"},{"lineNumber":47,"author":{"gitId":"RiyaMehta2211"},"content":" String response \u003d duke.getResponse(input);","lastModifiedDate":"2023-09-10"},{"lineNumber":48,"author":{"gitId":"RiyaMehta2211"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-10"},{"lineNumber":49,"author":{"gitId":"RiyaMehta2211"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-10"},{"lineNumber":50,"author":{"gitId":"RiyaMehta2211"},"content":" DialogBox.getDukeDialog(response, dukeImage)","lastModifiedDate":"2023-09-10"},{"lineNumber":51,"author":{"gitId":"RiyaMehta2211"},"content":" );","lastModifiedDate":"2023-09-10"},{"lineNumber":52,"author":{"gitId":"RiyaMehta2211"},"content":" userInput.clear();","lastModifiedDate":"2023-09-10"},{"lineNumber":53,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":54,"author":{"gitId":"RiyaMehta2211"},"content":"}","lastModifiedDate":"2023-09-10"},{"lineNumber":55,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"RiyaMehta2211":55}},{"path":"src/main/java/duke/ui/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"RiyaMehta2211"},"content":"package duke.ui;","lastModifiedDate":"2023-09-10"},{"lineNumber":2,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"RiyaMehta2211"},"content":"import duke.TaskList;","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"RiyaMehta2211"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"RiyaMehta2211"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"RiyaMehta2211"},"content":" * The Ui class is responsible for user interaction and displaying messages to the user.","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"RiyaMehta2211"},"content":"public class Ui{","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"RiyaMehta2211"},"content":" static String hello \u003d \"Hello muggle! I\u0027m \" + \"Harry Potter\" + \"\\n\" + \"Introducing the Wizarding World Organizer: Your Trusted Guide\" +","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"RiyaMehta2211"},"content":" \" to Efficient \u0026 Effective Magical Planning\";","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"RiyaMehta2211"},"content":" static String bye \u003d \"\\t\" + \"Expelliarmus! Hope to see you again muggle! :D\";","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"RiyaMehta2211"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"RiyaMehta2211"},"content":" * Displays a welcome message to the user.","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":17,"author":{"gitId":"RiyaMehta2211"},"content":" public static String printHello() {","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"RiyaMehta2211"},"content":" return hello;","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"RiyaMehta2211"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":22,"author":{"gitId":"RiyaMehta2211"},"content":" * Displays a goodbye essage to the user.","lastModifiedDate":"2023-09-06"},{"lineNumber":23,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":24,"author":{"gitId":"RiyaMehta2211"},"content":" public static String printBye() {","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"RiyaMehta2211"},"content":" return bye;","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"RiyaMehta2211"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":29,"author":{"gitId":"RiyaMehta2211"},"content":" * Prints a message when a task is marked as done.","lastModifiedDate":"2023-09-06"},{"lineNumber":30,"author":{"gitId":"RiyaMehta2211"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":31,"author":{"gitId":"RiyaMehta2211"},"content":" * @param done The task that was marked as done.","lastModifiedDate":"2023-09-06"},{"lineNumber":32,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":33,"author":{"gitId":"RiyaMehta2211"},"content":" public static String printDone(Task done) {","lastModifiedDate":"2023-09-10"},{"lineNumber":34,"author":{"gitId":"RiyaMehta2211"},"content":" return \"\\t\" + \"Nice! I\u0027ve marked this task \" +","lastModifiedDate":"2023-09-10"},{"lineNumber":35,"author":{"gitId":"RiyaMehta2211"},"content":" \"as done:\" + \"\\n\" +","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"RiyaMehta2211"},"content":" \"\\t \" + done.taskString();","lastModifiedDate":"2023-09-10"},{"lineNumber":37,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"RiyaMehta2211"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":40,"author":{"gitId":"RiyaMehta2211"},"content":" * Prints a message when a task is marked as not done.","lastModifiedDate":"2023-09-06"},{"lineNumber":41,"author":{"gitId":"RiyaMehta2211"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":42,"author":{"gitId":"RiyaMehta2211"},"content":" * @param notDone The task that was marked as not done.","lastModifiedDate":"2023-09-06"},{"lineNumber":43,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":44,"author":{"gitId":"RiyaMehta2211"},"content":" public static String printNotDone(Task notDone) {","lastModifiedDate":"2023-09-10"},{"lineNumber":45,"author":{"gitId":"RiyaMehta2211"},"content":" return \"\\t\" + \"OK, I\u0027ve marked this task \" +","lastModifiedDate":"2023-09-10"},{"lineNumber":46,"author":{"gitId":"RiyaMehta2211"},"content":" \"as not done yet:\" + \"\\n\" + \"\\t\" + \" \" +","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"RiyaMehta2211"},"content":" notDone.taskString();","lastModifiedDate":"2023-09-10"},{"lineNumber":48,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"RiyaMehta2211"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":51,"author":{"gitId":"RiyaMehta2211"},"content":" * Prints a message when a task is deleted from the list.","lastModifiedDate":"2023-09-06"},{"lineNumber":52,"author":{"gitId":"RiyaMehta2211"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":53,"author":{"gitId":"RiyaMehta2211"},"content":" * @param toBeDeleted The task that was deleted.","lastModifiedDate":"2023-09-06"},{"lineNumber":54,"author":{"gitId":"RiyaMehta2211"},"content":" * @param tasks The task list.","lastModifiedDate":"2023-09-06"},{"lineNumber":55,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":56,"author":{"gitId":"RiyaMehta2211"},"content":" public static String printDelete(Task toBeDeleted, TaskList tasks) {","lastModifiedDate":"2023-09-10"},{"lineNumber":57,"author":{"gitId":"RiyaMehta2211"},"content":" return \"\\tNoted. I\u0027ve removed this task:\\n\\t \" + toBeDeleted.taskString()","lastModifiedDate":"2023-09-10"},{"lineNumber":58,"author":{"gitId":"RiyaMehta2211"},"content":" + \"\\n\\tNow you have \" + tasks.getSize() + \" tasks in the list.\";","lastModifiedDate":"2023-09-10"},{"lineNumber":59,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"RiyaMehta2211"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":62,"author":{"gitId":"RiyaMehta2211"},"content":" * Prints a message when a task is added to the list.","lastModifiedDate":"2023-09-06"},{"lineNumber":63,"author":{"gitId":"RiyaMehta2211"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":64,"author":{"gitId":"RiyaMehta2211"},"content":" * @param task The task that was added.","lastModifiedDate":"2023-09-06"},{"lineNumber":65,"author":{"gitId":"RiyaMehta2211"},"content":" * @param tasks The task list.","lastModifiedDate":"2023-09-06"},{"lineNumber":66,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":67,"author":{"gitId":"RiyaMehta2211"},"content":" public static String printAddTask(Task task, TaskList tasks) {","lastModifiedDate":"2023-09-10"},{"lineNumber":68,"author":{"gitId":"RiyaMehta2211"},"content":" int len \u003d tasks.getSize();","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"RiyaMehta2211"},"content":" String output \u003d \"\\tGot it. I\u0027ve added this task:\\n\\t\\t\"","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"RiyaMehta2211"},"content":" + task.taskString();","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"RiyaMehta2211"},"content":" String listLength \u003d len \u003d\u003d 1 ? \"Now you have \" + len + \" task in the list.\" :","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"RiyaMehta2211"},"content":" \"Now you have \" + len + \" tasks in the list.\";","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"RiyaMehta2211"},"content":" return output + \"\\n\\t\" + listLength;","lastModifiedDate":"2023-09-10"},{"lineNumber":74,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":77,"author":{"gitId":"RiyaMehta2211"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":78,"author":{"gitId":"RiyaMehta2211"},"content":" * Prints a custom message for an exception.","lastModifiedDate":"2023-09-06"},{"lineNumber":79,"author":{"gitId":"RiyaMehta2211"},"content":" *","lastModifiedDate":"2023-09-06"},{"lineNumber":80,"author":{"gitId":"RiyaMehta2211"},"content":" * @param message The custom exception message.","lastModifiedDate":"2023-09-06"},{"lineNumber":81,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":82,"author":{"gitId":"RiyaMehta2211"},"content":" public static String printException(String message) {","lastModifiedDate":"2023-09-10"},{"lineNumber":83,"author":{"gitId":"RiyaMehta2211"},"content":" return message;","lastModifiedDate":"2023-09-10"},{"lineNumber":84,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":86,"author":{"gitId":"RiyaMehta2211"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":87,"author":{"gitId":"RiyaMehta2211"},"content":" * Prints a default exception message for EventDateTime Exception.","lastModifiedDate":"2023-09-06"},{"lineNumber":88,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":89,"author":{"gitId":"RiyaMehta2211"},"content":" public static String printException() {","lastModifiedDate":"2023-09-10"},{"lineNumber":90,"author":{"gitId":"RiyaMehta2211"},"content":" return\"Accio error! I don\u0027t understand what the input means D:\" +","lastModifiedDate":"2023-09-10"},{"lineNumber":91,"author":{"gitId":"RiyaMehta2211"},"content":" \" Please input a valid date in the format yyyy-MM-dd HHmm \" +","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"RiyaMehta2211"},"content":" \"(the time in the 24-hour format).\";","lastModifiedDate":"2023-09-10"},{"lineNumber":93,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":95,"author":{"gitId":"RiyaMehta2211"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":96,"author":{"gitId":"RiyaMehta2211"},"content":" * Lists the tasks in the task list.","lastModifiedDate":"2023-09-06"},{"lineNumber":97,"author":{"gitId":"RiyaMehta2211"},"content":" * @param tasks The task list to be printed.","lastModifiedDate":"2023-09-06"},{"lineNumber":98,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":99,"author":{"gitId":"RiyaMehta2211"},"content":" public static String listTasks(TaskList tasks) {","lastModifiedDate":"2023-09-10"},{"lineNumber":100,"author":{"gitId":"RiyaMehta2211"},"content":" String answer \u003d \"\\tHere are the tasks in your list:\";","lastModifiedDate":"2023-09-10"},{"lineNumber":101,"author":{"gitId":"RiyaMehta2211"},"content":" int i \u003d 1;","lastModifiedDate":"2023-09-03"},{"lineNumber":102,"author":{"gitId":"RiyaMehta2211"},"content":" for (int j \u003d 0; j \u003c tasks.getSize(); j++) {","lastModifiedDate":"2023-09-03"},{"lineNumber":103,"author":{"gitId":"RiyaMehta2211"},"content":" answer +\u003d \"\\n\\t\" + i + \".\" + tasks.getTask(j).taskString();","lastModifiedDate":"2023-09-10"},{"lineNumber":104,"author":{"gitId":"RiyaMehta2211"},"content":" i++;","lastModifiedDate":"2023-09-03"},{"lineNumber":105,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":106,"author":{"gitId":"RiyaMehta2211"},"content":" return answer;","lastModifiedDate":"2023-09-10"},{"lineNumber":107,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":108,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-06"},{"lineNumber":109,"author":{"gitId":"RiyaMehta2211"},"content":" /**","lastModifiedDate":"2023-09-06"},{"lineNumber":110,"author":{"gitId":"RiyaMehta2211"},"content":" * Lists the tasks in the task list","lastModifiedDate":"2023-09-06"},{"lineNumber":111,"author":{"gitId":"RiyaMehta2211"},"content":" * containing tasks with matching keywords","lastModifiedDate":"2023-09-06"},{"lineNumber":112,"author":{"gitId":"RiyaMehta2211"},"content":" * @param tasks The task list to be printed.","lastModifiedDate":"2023-09-06"},{"lineNumber":113,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":114,"author":{"gitId":"RiyaMehta2211"},"content":" public static String printMatchingTasks(TaskList tasks){","lastModifiedDate":"2023-09-10"},{"lineNumber":115,"author":{"gitId":"RiyaMehta2211"},"content":" String answer \u003d \"\\tHere are the tasks in your list:\";","lastModifiedDate":"2023-09-10"},{"lineNumber":116,"author":{"gitId":"RiyaMehta2211"},"content":" int i \u003d 1;","lastModifiedDate":"2023-09-06"},{"lineNumber":117,"author":{"gitId":"RiyaMehta2211"},"content":" for (int j \u003d 0; j \u003c tasks.getSize(); j++) {","lastModifiedDate":"2023-09-06"},{"lineNumber":118,"author":{"gitId":"RiyaMehta2211"},"content":" answer +\u003d \"\\n\\t\" + i + \".\" + tasks.getTask(j).taskString();","lastModifiedDate":"2023-09-10"},{"lineNumber":119,"author":{"gitId":"RiyaMehta2211"},"content":" i++;","lastModifiedDate":"2023-09-06"},{"lineNumber":120,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":121,"author":{"gitId":"RiyaMehta2211"},"content":" return answer;","lastModifiedDate":"2023-09-10"},{"lineNumber":122,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-06"},{"lineNumber":123,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":124,"author":{"gitId":"RiyaMehta2211"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"RiyaMehta2211":124}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"RiyaMehta2211"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":2,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"RiyaMehta2211"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"RiyaMehta2211"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"RiyaMehta2211"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"RiyaMehta2211"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"RiyaMehta2211"},"content":"\u003c?import javafx.scene.text.Font?\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"RiyaMehta2211"},"content":"\u003cfx:root alignment\u003d\"TOP_RIGHT\" maxHeight\u003d\"1.7976931348623157E308\"","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"RiyaMehta2211"},"content":" maxWidth\u003d\"1.7976931348623157E308\" prefWidth\u003d\"400.0\" type\u003d\"javafx.scene.layout.HBox\" xmlns\u003d\"http://javafx.com/javafx/11\" xmlns:fx\u003d\"http://javafx.com/fxml/1\"\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"RiyaMehta2211"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"RiyaMehta2211"},"content":" \u003cLabel fx:id\u003d\"dialog\" text\u003d\"Label\" wrapText\u003d\"true\" style \u003d \"-fx-background-radius: 10; -fx-background-color: #BCC1C2\" textFill\u003d\"black\"\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"RiyaMehta2211"},"content":" \u003cfont\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"RiyaMehta2211"},"content":" \u003cFont name \u003d \"Apple Chancery\" size \u003d \"10.0\"/\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"RiyaMehta2211"},"content":" \u003c/font\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"RiyaMehta2211"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"RiyaMehta2211"},"content":" \u003cInsets bottom\u003d\"35.0\" top\u003d\"15.0\" left \u003d \"15.0\" right \u003d \"40.0\" /\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"RiyaMehta2211"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"RiyaMehta2211"},"content":" \u003ccenterShape\u003efalse\u003c/centerShape\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"RiyaMehta2211"},"content":" \u003c/Label\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"RiyaMehta2211"},"content":" \u003cImageView fx:id\u003d\"displayPicture\" fitHeight\u003d\"99.0\" fitWidth\u003d\"99.0\" pickOnBounds\u003d\"true\" preserveRatio\u003d\"true\"\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":21,"author":{"gitId":"RiyaMehta2211"},"content":" \u003cHBox.margin\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"RiyaMehta2211"},"content":" \u003cInsets left\u003d\"10.0\" right\u003d\"10.0\"/\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"RiyaMehta2211"},"content":" \u003c/HBox.margin\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"RiyaMehta2211"},"content":" \u003c/ImageView\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"RiyaMehta2211"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"RiyaMehta2211"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":27,"author":{"gitId":"RiyaMehta2211"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\"/\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"RiyaMehta2211"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"RiyaMehta2211"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"RiyaMehta2211":29}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"RiyaMehta2211"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":2,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"RiyaMehta2211"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"RiyaMehta2211"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"RiyaMehta2211"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"RiyaMehta2211"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"RiyaMehta2211"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"RiyaMehta2211"},"content":"\u003c?import javafx.scene.text.Font?\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"RiyaMehta2211"},"content":"\u003cAnchorPane fx:id \u003d \"anchorPane\" maxHeight\u003d\"-Infinity\" maxWidth\u003d\"-Infinity\" minHeight\u003d\"-Infinity\" minWidth\u003d\"-Infinity\" prefHeight\u003d\"600.0\" prefWidth\u003d\"400.0\"","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"RiyaMehta2211"},"content":" xmlns\u003d\"http://javafx.com/javafx/11\" xmlns:fx\u003d\"http://javafx.com/fxml/1\" fx:controller\u003d\"duke.ui.MainWindow\"\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"RiyaMehta2211"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"RiyaMehta2211"},"content":" \u003cTextField fx:id\u003d\"userInput\" layoutY\u003d\"558.0\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"41.0\" prefWidth\u003d\"324.0\"","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"RiyaMehta2211"},"content":" style \u003d \"-fx-background-color: #FFFFFF\" AnchorPane.bottomAnchor\u003d\"1.0\" promptText\u003d\"Sort your tasks like a Sorting Hat!\" \u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"RiyaMehta2211"},"content":" \u003cfont\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"RiyaMehta2211"},"content":" \u003cFont name \u003d \"Apple Chancery\" size \u003d \"10.0\"/\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"RiyaMehta2211"},"content":" \u003c/font\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"RiyaMehta2211"},"content":" \u003c/TextField\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"RiyaMehta2211"},"content":" \u003cButton fx:id\u003d\"sendButton\" contentDisplay\u003d\"CENTER\" layoutX\u003d\"324.0\" layoutY\u003d\"558.0\"","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"RiyaMehta2211"},"content":" style \u003d \"-fx-background-radius: 15; -fx-background-color: #000000\" mnemonicParsing\u003d\"false\"","lastModifiedDate":"2023-09-10"},{"lineNumber":21,"author":{"gitId":"RiyaMehta2211"},"content":" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"38.0\" prefWidth\u003d\"76.0\" text\u003d\"⚡ Send ⚡\" textFill\u003d\"darkgoldenrod\"\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"RiyaMehta2211"},"content":" \u003cfont\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"RiyaMehta2211"},"content":" \u003cFont name \u003d \"Apple Chancery\" size \u003d \"10.0\"/\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"RiyaMehta2211"},"content":" \u003c/font\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"RiyaMehta2211"},"content":" \u003c/Button\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"RiyaMehta2211"},"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\" style\u003d\"-fx-background: #1338BE\" \u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":27,"author":{"gitId":"RiyaMehta2211"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"RiyaMehta2211"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefWidth\u003d\"388.0\" /\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"RiyaMehta2211"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":30,"author":{"gitId":"RiyaMehta2211"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"RiyaMehta2211"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"RiyaMehta2211"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"RiyaMehta2211":32}},{"path":"src/test/java/duke/StorageTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"RiyaMehta2211"},"content":"package duke;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"RiyaMehta2211"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"RiyaMehta2211"},"content":"import duke.task.ToDo;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"RiyaMehta2211"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"RiyaMehta2211"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"RiyaMehta2211"},"content":" * This class contains JUnit test cases to verify the functionality of the Storage class.","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"RiyaMehta2211"},"content":" * It tests the saving and loading of tasks to and from a txt file.","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"RiyaMehta2211"},"content":"public class StorageTest {","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"RiyaMehta2211"},"content":" Storage storage \u003d new Storage();","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"RiyaMehta2211"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"RiyaMehta2211"},"content":" void testSaveAndLoadTasks() {","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"RiyaMehta2211"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"RiyaMehta2211"},"content":" tasks.addTask(new ToDo(\"go on a holiday\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"RiyaMehta2211"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"RiyaMehta2211"},"content":" storage.saveTasks(\"src/data/newFile.txt\", tasks);","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"RiyaMehta2211"},"content":" TaskList loadedTasks \u003d storage.loadTasks(\"src/data/newFile.txt\");","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"RiyaMehta2211"},"content":" for (int i \u003d 0; i \u003c tasks.getSize(); i++) {","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"RiyaMehta2211"},"content":" assert loadedTasks.getTask(i).taskString()","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"RiyaMehta2211"},"content":" .equals(tasks.getTask(i).taskString());","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"RiyaMehta2211"},"content":" //assert storage.loadTasks(\"src/data/newFile.txt\").equals(tasks);","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"RiyaMehta2211"},"content":" } catch(FileNotFoundException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"RiyaMehta2211"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"RiyaMehta2211"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"RiyaMehta2211":31}},{"path":"src/test/java/duke/TaskListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"RiyaMehta2211"},"content":"package duke;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"RiyaMehta2211"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"RiyaMehta2211"},"content":"import duke.task.ToDo;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"RiyaMehta2211"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"RiyaMehta2211"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"RiyaMehta2211"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-06"},{"lineNumber":7,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"RiyaMehta2211"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"RiyaMehta2211"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"RiyaMehta2211"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"RiyaMehta2211"},"content":" * This class contains JUnit test cases to verify the functionality of the TaskList class.","lastModifiedDate":"2023-09-06"},{"lineNumber":13,"author":{"gitId":"RiyaMehta2211"},"content":" * It tests various methods of the TaskList class, such as adding, removing,","lastModifiedDate":"2023-09-06"},{"lineNumber":14,"author":{"gitId":"RiyaMehta2211"},"content":" * and marking tasks from the list of tasks.","lastModifiedDate":"2023-09-06"},{"lineNumber":15,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":16,"author":{"gitId":"RiyaMehta2211"},"content":"public class TaskListTest {","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"RiyaMehta2211"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"RiyaMehta2211"},"content":" Task todo \u003d new ToDo(\"todo go on a hike\");","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"RiyaMehta2211"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\");","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"RiyaMehta2211"},"content":" Task deadline \u003d new Deadline(\"assignment submission\",","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"RiyaMehta2211"},"content":" LocalDateTime.parse(\"2023-09-11 2359\", formatter));","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"RiyaMehta2211"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"RiyaMehta2211"},"content":" public void testGetTask(){","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"RiyaMehta2211"},"content":" this.tasks.addTask(todo);","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"RiyaMehta2211"},"content":" int initialLen \u003d tasks.getSize();","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"RiyaMehta2211"},"content":" assert this.tasks.getTask(tasks.getSize() - 1).taskString()","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"RiyaMehta2211"},"content":" .equals(todo.taskString());","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"RiyaMehta2211"},"content":" //to check that the length of the list is not changes by the get method","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"RiyaMehta2211"},"content":" assertEquals(initialLen, this.tasks.getSize());","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"RiyaMehta2211"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"RiyaMehta2211"},"content":" public void testAddTask() {","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"RiyaMehta2211"},"content":" int initialLen \u003d tasks.getSize();","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"RiyaMehta2211"},"content":" this.tasks.addTask(deadline);","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"RiyaMehta2211"},"content":" assertEquals(initialLen + 1, this.tasks.getSize());","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"RiyaMehta2211"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"RiyaMehta2211"},"content":" public void testRemoveTask() {","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"RiyaMehta2211"},"content":" this.tasks.addTask(deadline);","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"RiyaMehta2211"},"content":" int initialLen \u003d tasks.getSize();","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"RiyaMehta2211"},"content":" this.tasks.removeTask(tasks.getSize() - 1);","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"RiyaMehta2211"},"content":" assertEquals(initialLen - 1, this.tasks.getSize());","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"RiyaMehta2211"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"RiyaMehta2211"},"content":" public void testMarkDone() {","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"RiyaMehta2211"},"content":" this.tasks.addTask(deadline);","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"RiyaMehta2211"},"content":" this.tasks.getTask(tasks.getSize() - 1).markAsDone();","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"RiyaMehta2211"},"content":" assert this.tasks.getTask(tasks.getSize() - 1).taskString()","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"RiyaMehta2211"},"content":" .equals(deadline.taskString());","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"RiyaMehta2211"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"RiyaMehta2211"},"content":" public void testNotMarkDone() {","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"RiyaMehta2211"},"content":" deadline.markAsDone();","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"RiyaMehta2211"},"content":" this.tasks.addTask(deadline);","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"RiyaMehta2211"},"content":" this.tasks.getTask(tasks.getSize() - 1).markAsNotDone();","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"RiyaMehta2211"},"content":" assert this.tasks.getTask(tasks.getSize() - 1).taskString()","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"RiyaMehta2211"},"content":" .equals(deadline.taskString());","lastModifiedDate":"2023-09-05"},{"lineNumber":62,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":63,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":64,"author":{"gitId":"RiyaMehta2211"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":65,"author":{"gitId":"RiyaMehta2211"},"content":" public void testGetTaskSize() {","lastModifiedDate":"2023-09-05"},{"lineNumber":66,"author":{"gitId":"RiyaMehta2211"},"content":" int initialLen \u003d tasks.getSize();","lastModifiedDate":"2023-09-05"},{"lineNumber":67,"author":{"gitId":"RiyaMehta2211"},"content":" tasks.addTask(todo);","lastModifiedDate":"2023-09-05"},{"lineNumber":68,"author":{"gitId":"RiyaMehta2211"},"content":" tasks.addTask(deadline);","lastModifiedDate":"2023-09-05"},{"lineNumber":69,"author":{"gitId":"RiyaMehta2211"},"content":" assertEquals(initialLen + 2, tasks.getSize());","lastModifiedDate":"2023-09-05"},{"lineNumber":70,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":71,"author":{"gitId":"RiyaMehta2211"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"RiyaMehta2211":71}},{"path":"src/test/java/duke/task/DeadlineTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"RiyaMehta2211"},"content":"package duke.task;","lastModifiedDate":"2023-09-06"},{"lineNumber":2,"author":{"gitId":"RiyaMehta2211"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"RiyaMehta2211"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"RiyaMehta2211"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"RiyaMehta2211"},"content":"import org.junit.jupiter.api.Assertions;","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"RiyaMehta2211"},"content":"/**","lastModifiedDate":"2023-09-06"},{"lineNumber":8,"author":{"gitId":"RiyaMehta2211"},"content":" * This class contains JUnit test cases to verify the functionality of the Deadline class.","lastModifiedDate":"2023-09-06"},{"lineNumber":9,"author":{"gitId":"RiyaMehta2211"},"content":" * It tests various methods of the Deadline class, such as taskString(), markAsDone(), markAsNotDone(),","lastModifiedDate":"2023-09-06"},{"lineNumber":10,"author":{"gitId":"RiyaMehta2211"},"content":" * and getTask().","lastModifiedDate":"2023-09-06"},{"lineNumber":11,"author":{"gitId":"RiyaMehta2211"},"content":" */","lastModifiedDate":"2023-09-06"},{"lineNumber":12,"author":{"gitId":"RiyaMehta2211"},"content":"public class DeadlineTest {","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"RiyaMehta2211"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\");","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"RiyaMehta2211"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"RiyaMehta2211"},"content":" void testTaskString() {","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"RiyaMehta2211"},"content":" Deadline test \u003d new Deadline(\"assignment submission\", LocalDateTime.parse(\"2023-01-11 2359\", formatter));","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"RiyaMehta2211"},"content":" Assertions.assertEquals(test.taskString(), \"[D][ ] assignment submission (by: Jan 11 2023 2359)\");","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"RiyaMehta2211"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"RiyaMehta2211"},"content":" void testMarkAsDone() {","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"RiyaMehta2211"},"content":" Deadline test \u003d new Deadline(\"assignment submission\", LocalDateTime.parse(\"2023-01-11 2359\", formatter));","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"RiyaMehta2211"},"content":" test.markAsDone();","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"RiyaMehta2211"},"content":" Assertions.assertEquals(test.taskString(), \"[D][X] assignment submission (by: Jan 11 2023 2359)\");","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"RiyaMehta2211"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"RiyaMehta2211"},"content":" void testNotMarkAsDone() {","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"RiyaMehta2211"},"content":" Deadline test \u003d new Deadline(\"assignment submission\", LocalDateTime.parse(\"2023-01-11 2359\", formatter));","lastModifiedDate":"2023-09-10"},{"lineNumber":30,"author":{"gitId":"RiyaMehta2211"},"content":" test.markAsDone();","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"RiyaMehta2211"},"content":" test.markAsNotDone();","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"RiyaMehta2211"},"content":" Assertions.assertEquals(test.taskString(), \"[D][ ] assignment submission (by: Jan 11 2023 2359)\");","lastModifiedDate":"2023-09-10"},{"lineNumber":33,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"RiyaMehta2211"},"content":" @Test","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"RiyaMehta2211"},"content":" void testGetTask() {","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"RiyaMehta2211"},"content":" Deadline test \u003d new Deadline(\"assignment submission\", LocalDateTime.parse(\"2023-09-11 2359\", formatter));","lastModifiedDate":"2023-09-10"},{"lineNumber":38,"author":{"gitId":"RiyaMehta2211"},"content":" assert test.getTask().trim().equals(\"assignment submission\");","lastModifiedDate":"2023-09-10"},{"lineNumber":39,"author":{"gitId":"RiyaMehta2211"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"RiyaMehta2211"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"RiyaMehta2211"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"RiyaMehta2211":41}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"RiyaMehta2211"},"content":"todo go to Mount Everest","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"RiyaMehta2211"},"content":"deadline 2103T Assignment /by tonight","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"RiyaMehta2211"},"content":"deadline 2100 Lab /by next week\u0027s lab","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"RiyaMehta2211"},"content":"todo apply for internships on TalentConnect","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"RiyaMehta2211"},"content":"event CCA Tryouts /from tomorrow 7.30pm /to tomorrow 9.30pm","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"RiyaMehta2211"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"RiyaMehta2211"},"content":"mark 2","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"RiyaMehta2211"},"content":"deadline CS2105 Assignment 1 /by week 4","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"RiyaMehta2211"},"content":"event presentation rehearsal /from tonight 10pm /to tonight 11.15pm","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"RiyaMehta2211"},"content":"mark 3","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"RiyaMehta2211"},"content":"mark 7","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"RiyaMehta2211"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"RiyaMehta2211"},"content":"unmark 7","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"RiyaMehta2211"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"RiyaMehta2211"},"content":"bye","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"RiyaMehta2211":15}},{"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":"RiyaMehta2211"},"content":"java -classpath ..\\bin duke.Duke \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-09-03"},{"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":{"RiyaMehta2211":1,"-":20}}] diff --git a/RiyaMehta2211_ip_master/commits.json b/RiyaMehta2211_ip_master/commits.json index ad687157..fd79a91a 100644 --- a/RiyaMehta2211_ip_master/commits.json +++ b/RiyaMehta2211_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"RiyaMehta2211":[{"date":"2023-08-23","commitResults":[{"hash":"cee5ef0e681036be72f4817998d6f35f59706d31","isMergeCommit":false,"messageTitle":"Level-0","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":6}}},{"hash":"a2a1d2816bcae2c3f1bef7cb0ef935130104e3bf","isMergeCommit":false,"messageTitle":"Level-0","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":1}}},{"hash":"dad6511aebb23581b6595f739d28aa2b5782fef4","isMergeCommit":false,"messageTitle":"Level-0","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":8}}},{"hash":"5d0deb105af142219223671cbb9565da579f0324","isMergeCommit":false,"messageTitle":"Level-1","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":1}}},{"hash":"25b761a7bac82c249d51933c344ec6fec241d9f3","isMergeCommit":false,"messageTitle":"Level-0","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":8}}},{"hash":"df7e6690fd9c0dbc4088a9cba726b54efb14b58b","isMergeCommit":false,"messageTitle":"Level-1","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":1}}},{"hash":"5eb7dc37a8f56dacc21553e69b0a1dd82fe21804","isMergeCommit":false,"messageTitle":"Level-0","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":7}}},{"hash":"92957ecb8918a149686a2d2fd6f4ebdd8ee12a39","isMergeCommit":false,"messageTitle":"Level-1","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":1}}},{"hash":"0dbf37b58d04286786745f5294533c8b78f9c893","isMergeCommit":false,"messageTitle":"commit message 0","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":7}}},{"hash":"2fc4a9b21d1f8a6b839c7d5d47c41a2ad4f4998d","isMergeCommit":false,"messageTitle":"ip - Riya Mehta","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"54e1c5a54931607684676c5cc0baa3ddc341ad7f","isMergeCommit":false,"messageTitle":"ip - Riya Mehta","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":2}}},{"hash":"4c4321364fad0274772a02fb83b8edaab30a8cd5","isMergeCommit":false,"messageTitle":"Committing Level 1","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}},{"hash":"020940783469bf6fca6354ad0814950d0d2fedb5","isMergeCommit":false,"messageTitle":"Committing Level 3","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":20,"deletions":4}}},{"hash":"1024554e46d994cf465742175b99c00451ebcc96","isMergeCommit":false,"messageTitle":"Committing Level 2","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"843b949ff53a3c339060f23575b204bec81a76b7","isMergeCommit":false,"messageTitle":"Committing Level 2","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}},{"hash":"8570478f754871ccc584b11f3d7c12e651d6c65f","isMergeCommit":false,"messageTitle":"Committing Level 2","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}},{"hash":"c8c810027001663f7c246c2d00fe26f5f5d1f58c","isMergeCommit":false,"messageTitle":"Tagging Level 2","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}},{"hash":"070a09a2b07c481d1f84e7db79a50095dfb4e2d4","isMergeCommit":false,"messageTitle":"Tagging Level 2","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}}]},{"date":"2023-08-24","commitResults":[{"hash":"367172154a1841c4c9340310e9145936da762b7b","isMergeCommit":false,"messageTitle":"Committing Level 3","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":67,"deletions":12}}},{"hash":"715ce88a25b9d75a73208fb98a5beeadae811a60","isMergeCommit":false,"messageTitle":"Committing Level 3","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}},{"hash":"8b830596cea7341b1581398362da4c5fb4101e3c","isMergeCommit":false,"messageTitle":"Committing Level 3","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":4}}},{"hash":"b6ef51f07df21202ed9279f201a437ae3fac78c7","isMergeCommit":false,"messageTitle":"Committing Level 3","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}},{"hash":"bc9248e9ae20849af864f3e289ea301ccef32633","isMergeCommit":false,"messageTitle":"Committing Level 3","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}},{"hash":"0a186be5633c054ce40437716e01276e87c0f2c0","isMergeCommit":false,"messageTitle":"Committing Level 3","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}},{"hash":"51138a0aea849541b74f589d9d343cad1e68c253","isMergeCommit":false,"messageTitle":"Committing Level 3","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":2}}},{"hash":"d92d6baa6565ef01bb8e8090bc5079df17c4ddba","isMergeCommit":false,"messageTitle":"Committing Level 3","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":8}}},{"hash":"44ca44432a62566b833c174c3ce05c31f26583b0","isMergeCommit":false,"messageTitle":"Committing Level 4","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":90,"deletions":4}}},{"hash":"c8d30445458ff7207d42fb173a85408825e6bef5","isMergeCommit":false,"messageTitle":"Committing Level 4","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":2}}},{"hash":"69d9b79674f428afd5b8715f8fda7b60a977fd72","isMergeCommit":false,"messageTitle":"Committing text-ui-test","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":16,"deletions":0},"java":{"insertions":1,"deletions":1}}},{"hash":"198334a595afaa06f4f1e2e0867c0c07d26b2c0e","isMergeCommit":false,"messageTitle":"Committing Level 4","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":5}}},{"hash":"bb49d9e7cd1bd5c9367132950a88b3cdcfb80cb3","isMergeCommit":false,"messageTitle":"Committing Level-5","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":1},"java":{"insertions":128,"deletions":75}}},{"hash":"8aab7cbd13c38c9df72ad659608c0c1ea0822d23","isMergeCommit":false,"messageTitle":"Committing Level-6","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":9}}}]},{"date":"2023-09-01","commitResults":[{"hash":"c63c221342d8030fc37093a3f1e937ad6c3f1147","isMergeCommit":false,"messageTitle":"Save the tasks in the hard disk automatically whenever the task list changes for Level 7. The tasklist will be saved to Duke.txt in UTF-16 encoded format when terminating the chatBot. The saved taskList can be retrieved after restarting the chatBot.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":84,"deletions":13}}},{"hash":"ad3a198bebe8db708d95e617c64c9eb9055127fe","isMergeCommit":false,"messageTitle":"Save the tasks in the hard disk automatically whenever the task list changes for Level 7. The tasklist will be saved to Duke.txt in UTF-16 encoded format when terminating the chatBot. The saved taskList can be retrieved after restarting the chatBot.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":1}}},{"hash":"e02da591a691e32aa6b34d06a601eaf576cc5298","isMergeCommit":false,"messageTitle":"Save the tasks in the hard disk automatically whenever the task list changes for Level 7. The tasklist will be saved to Duke.txt in UTF-8 encoded format when terminating the chatBot. The saved taskList can be retrieved after restarting the chatBot.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":24}}},{"hash":"840b1ff79bf4e09b5d44cb18f91609de58ed1107","isMergeCommit":false,"messageTitle":"Save the tasks in the hard disk automatically whenever the task list changes for Level 7. The tasklist will be saved to Duke.txt in UTF-8 encoded format when terminating the chatBot. The saved taskList can be retrieved after restarting the chatBot.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"698b2ca51779ccf55694576e023759d4405dd99e","isMergeCommit":false,"messageTitle":"Save the tasks in the hard disk automatically whenever the task list changes for Level 7. The tasklist will be saved to Duke.txt in UTF-8 encoded format when terminating the chatBot. The saved taskList can be retrieved after restarting the chatBot.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":6}}},{"hash":"d5890789b34d776bbdf06574fc303ead47134e91","isMergeCommit":false,"messageTitle":"Save the tasks in the hard disk automatically whenever the task list changes for Level 7. The tasklist will be saved to Duke.txt in UTF-8 encoded format when terminating the chatBot. The saved taskList can be retrieved after restarting the chatBot.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":6}}},{"hash":"a13da369a4e4c67eef854dda0509e3f5c48a8f62","isMergeCommit":false,"messageTitle":"Save the tasks in the hard disk automatically whenever the task list changes for Level 7. The tasklist will be saved to Duke.txt in UTF-8 encoded format when terminating the chatBot. The saved taskList can be retrieved after restarting the chatBot.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":36,"deletions":12}}},{"hash":"f0a837ad005259ae604cc20360168e68652abec2","isMergeCommit":false,"messageTitle":"Save the tasks in the hard disk automatically whenever the task list changes for Level 7. The tasklist will be saved to Duke.txt in UTF-8 encoded format when terminating the chatBot. The saved taskList can be retrieved after restarting the chatBot.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":0}}},{"hash":"75c7865710f0b2e37a3ede1b6f24bcbaaf31a997","isMergeCommit":false,"messageTitle":"Save the tasks in the hard disk automatically whenever the task list changes for Level 7. The tasklist will be saved to Duke.txt in UTF-8 encoded format when terminating the chatBot. The saved taskList can be retrieved after restarting the chatBot.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":27}}},{"hash":"a0704e1bae161d5e4fae465fe600202a7ea30b15","isMergeCommit":false,"messageTitle":"Save the tasks in the hard disk automatically whenever the task list changes for Level 7. The tasklist will be saved to Duke.txt in UTF-8 encoded format when terminating the chatBot. The saved taskList can be retrieved after restarting the chatBot.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"637bfeff15bb6589e12f6585cbae3df1d4c906c6","isMergeCommit":false,"messageTitle":"The deadline and event tasks now require a concrete dd-MM-yyyy HHmm format input, and will output in MMM d yyyy HHmm format (time in the 24 hours format) as part of Level 8.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":40,"deletions":15}}},{"hash":"0d460fbc974a67092335a021ee6dd898f1ad013e","isMergeCommit":false,"messageTitle":"The deadline and event tasks now require a concrete dd-MM-yyyy HHmm format input, and will output in MMM d yyyy HHmm format (time in the 24 hours format) as part of Level 8.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":0}}},{"hash":"2861c63a7dcff160e015c3b920851ef0522f1abb","isMergeCommit":false,"messageTitle":"Revert \"The deadline and event tasks now require a concrete dd-MM-yyyy HHmm format input, and will output in MMM d yyyy HHmm format (time in the 24 hours format) as part of Level 8.\"","messageBody":"This reverts commit 0d460fbc974a67092335a021ee6dd898f1ad013e.\n","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":1}}},{"hash":"a5460d9564ac7e949280d28a458a4f60f37564f6","isMergeCommit":false,"messageTitle":"Revert \"Revert \"The deadline and event tasks now require a concrete dd-MM-yyyy HHmm format input, and will output in MMM d yyyy HHmm format (time in the 24 hours format) as part of Level 8.\"\"","messageBody":"This reverts commit 2861c63a7dcff160e015c3b920851ef0522f1abb.\n","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":0}}},{"hash":"ca1cfcdba55b1f0de7be329f834c6f7599034d90","isMergeCommit":false,"messageTitle":"Import LocalDateTime to parse user inputs for date and time of tasks","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":0}}},{"hash":"baef718d45ce73a5c2a61f870ba3228963ac5a4c","isMergeCommit":false,"messageTitle":"Merge branch-Level-8 with master","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":0}}},{"hash":"cb13a4dcb15c2fd30bf695b50bb65a9cbd60e6a3","isMergeCommit":false,"messageTitle":"Add the header comment of the Task Class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":0}}},{"hash":"7641e6b1061e253b1cb5e0084af0c992ad764f74","isMergeCommit":false,"messageTitle":"merge branch-Level-7 with master","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}}]},{"date":"2023-09-02","commitResults":[{"hash":"c4a120c17cf542e1498cb23e2c31d3f56153726c","isMergeCommit":false,"messageTitle":"merge branch-Level-8 with master","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":9}}},{"hash":"85a2f0f765decd28df5b9337eefc0c69958821cb","isMergeCommit":false,"messageTitle":"Fix minor string formatting issues in the Deadline Class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}},{"hash":"f55e28ccd37734fc1e0a8affc8c36f1e56ea1a1d","isMergeCommit":false,"messageTitle":"create Ui class for the chatBot which interacts with users","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":6}}},{"hash":"de7ed2b37e0a372e4e3a0c31bc4571cb76a6a899","isMergeCommit":false,"messageTitle":"create Storage class for the chatBot to load and save tasks in the file","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":55,"deletions":52}}},{"hash":"4602d3092be668d1c71e49323dde8b1a4a23d7b5","isMergeCommit":false,"messageTitle":"create Parser class for the chatBot to accept and read user inputs","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":7}}},{"hash":"7fc79a8fae282b8d785d29309beacc3072814dec","isMergeCommit":false,"messageTitle":"create Parser class for the chatBot to parse and read user inputs","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":147,"deletions":143}}},{"hash":"8c96f3209dabe6f7706f3aecdf0f8cf7ea0e0301","isMergeCommit":false,"messageTitle":"create Ui class for the chatBot to interact with user inputs","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":41,"deletions":34}}}]},{"date":"2023-09-03","commitResults":[{"hash":"51863b417e62ae02da1c44d5c5b46864cd766e20","isMergeCommit":false,"messageTitle":"create TaskList class for the chatBot to handle the tasklists created","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"java":{"insertions":179,"deletions":98}}},{"hash":"634b93edf3dc734b76cca20c77fb3769fa5a6b96","isMergeCommit":false,"messageTitle":"create packages - duke, task and exception to categorize the classes in suitable packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":1},"java":{"insertions":58,"deletions":10},"bat":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}}]},{"date":"2023-09-04","commitResults":[{"hash":"f8cd1e6df29941b97902a91c9eb2c04070d50edb","isMergeCommit":true,"messageTitle":"merge add-gradle-support into master","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-09-05","commitResults":[{"hash":"eb16eff168c08d5f6d341be6c26dd57d1a82946e","isMergeCommit":false,"messageTitle":"set up gradle and merge add-gradle-support with master","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":3},"java":{"insertions":16,"deletions":8}}},{"hash":"82636ff30406894479c69ec46f746a4a14e9858b","isMergeCommit":false,"messageTitle":"Add JUnit tests for Storage, TaskList and Deadline classes","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":191,"deletions":50}}},{"hash":"4894c7d25f086c06d48a9064b26633fc5dff7d0f","isMergeCommit":false,"messageTitle":"Troubleshoot issues associated with JUnit and gradlew jar files","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":3,"deletions":2},"java":{"insertions":4,"deletions":8}}},{"hash":"228e5e152070298db9444392786d37915a1bb70d","isMergeCommit":false,"messageTitle":"Troubleshoot issues associated with JUnit and gradlew jar files","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":1}}},{"hash":"c891d68850fb542fd42ddaa8bfea67c13003b6d6","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/master\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"282ec093ffc8becdc2461a4daef0a7fa9d4c9ee8","isMergeCommit":false,"messageTitle":"Troubleshoot issues associated with JUnit and gradlew jar files","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"java":{"insertions":13,"deletions":8}}},{"hash":"b784562b2217368427600852f61ff0c0debc6073","isMergeCommit":true,"messageTitle":"Troubleshoot issues associated with JUnit and gradlew jar","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-09-06","commitResults":[{"hash":"c6b86b2d863afc5d521a92c5a64962d857e679c5","isMergeCommit":false,"messageTitle":"Troubleshoot issues associated with JUnit and gradle jar","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":7}}},{"hash":"90eff4d2004aa05f7403ae3d08342d81f2e64a40","isMergeCommit":false,"messageTitle":"create a Duke.jar file with JUnit tests for Storage, TaskList and Deadline Classes","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":4,"deletions":3},"java":{"insertions":1,"deletions":0}}},{"hash":"da6359d9a3250d5fb9c50379d691ff395bc38985","isMergeCommit":false,"messageTitle":"Add JavaDocs to the Java classes","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":339,"deletions":27}}},{"hash":"2c836ec5db6be42dc67fda082bbe8774187fe7a3","isMergeCommit":false,"messageTitle":"Improve Coding Standards across the Java files","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":23,"deletions":18}}},{"hash":"2b6dded29d4eee39854c776057b16fa696725a73","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"* branch-A-CodingStandard:\n Improve Coding Standards across the Java files\n","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"3f8da3c34bd1e74937350fdb35144acd54c9c13b","isMergeCommit":false,"messageTitle":"Add Find instruction for chatBot to find matching results","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"java":{"insertions":73,"deletions":55}}},{"hash":"466c99e5cfa0fdd7df7861211bb77f7828fe7edc","isMergeCommit":false,"messageTitle":"merge branch-Level-9 into master","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":1}}},{"hash":"5c30647cf452a1d142b3f6e9bb0a230bc9e3dc87","isMergeCommit":false,"messageTitle":"Update src/main/java/duke/Parser.java","messageBody":"Co-authored-by: B-enguin \u003c46633877+B-enguin@users.noreply.github.com\u003e","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}},{"hash":"2ea708aba756c1efaa56b8730a20de71d10f87d8","isMergeCommit":false,"messageTitle":"make changes to align with coding standards","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":6}}},{"hash":"9163891dad8532790905ed64a163564a2c57d434","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/master\u0027","messageBody":"","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"RiyaMehta2211":{"java":976,"md":2,"fxml":0,"sh":0,"bat":1,"gradle":3,"txt":15}},"authorContributionVariance":{"RiyaMehta2211":41133.94},"authorDisplayNameMap":{"RiyaMehta2211":"CS2103T-T14-2 MEHT..BHAI"}} +{"authorDailyContributionsMap":{"RiyaMehta2211":[{"date":"2023-08-23","commitResults":[{"hash":"cee5ef0e681036be72f4817998d6f35f59706d31","isMergeCommit":false,"messageTitle":"Level-0","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":6}}},{"hash":"a2a1d2816bcae2c3f1bef7cb0ef935130104e3bf","isMergeCommit":false,"messageTitle":"Level-0","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":1}}},{"hash":"dad6511aebb23581b6595f739d28aa2b5782fef4","isMergeCommit":false,"messageTitle":"Level-0","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":8}}},{"hash":"5d0deb105af142219223671cbb9565da579f0324","isMergeCommit":false,"messageTitle":"Level-1","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":1}}},{"hash":"25b761a7bac82c249d51933c344ec6fec241d9f3","isMergeCommit":false,"messageTitle":"Level-0","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":8}}},{"hash":"df7e6690fd9c0dbc4088a9cba726b54efb14b58b","isMergeCommit":false,"messageTitle":"Level-1","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":1}}},{"hash":"5eb7dc37a8f56dacc21553e69b0a1dd82fe21804","isMergeCommit":false,"messageTitle":"Level-0","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":7}}},{"hash":"92957ecb8918a149686a2d2fd6f4ebdd8ee12a39","isMergeCommit":false,"messageTitle":"Level-1","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":1}}},{"hash":"0dbf37b58d04286786745f5294533c8b78f9c893","isMergeCommit":false,"messageTitle":"commit message 0","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":7}}},{"hash":"2fc4a9b21d1f8a6b839c7d5d47c41a2ad4f4998d","isMergeCommit":false,"messageTitle":"ip - Riya Mehta","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"54e1c5a54931607684676c5cc0baa3ddc341ad7f","isMergeCommit":false,"messageTitle":"ip - Riya Mehta","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":2}}},{"hash":"4c4321364fad0274772a02fb83b8edaab30a8cd5","isMergeCommit":false,"messageTitle":"Committing Level 1","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}},{"hash":"020940783469bf6fca6354ad0814950d0d2fedb5","isMergeCommit":false,"messageTitle":"Committing Level 3","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":20,"deletions":4}}},{"hash":"1024554e46d994cf465742175b99c00451ebcc96","isMergeCommit":false,"messageTitle":"Committing Level 2","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"843b949ff53a3c339060f23575b204bec81a76b7","isMergeCommit":false,"messageTitle":"Committing Level 2","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}},{"hash":"8570478f754871ccc584b11f3d7c12e651d6c65f","isMergeCommit":false,"messageTitle":"Committing Level 2","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}},{"hash":"c8c810027001663f7c246c2d00fe26f5f5d1f58c","isMergeCommit":false,"messageTitle":"Tagging Level 2","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}},{"hash":"070a09a2b07c481d1f84e7db79a50095dfb4e2d4","isMergeCommit":false,"messageTitle":"Tagging Level 2","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}}]},{"date":"2023-08-24","commitResults":[{"hash":"367172154a1841c4c9340310e9145936da762b7b","isMergeCommit":false,"messageTitle":"Committing Level 3","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":67,"deletions":12}}},{"hash":"715ce88a25b9d75a73208fb98a5beeadae811a60","isMergeCommit":false,"messageTitle":"Committing Level 3","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}},{"hash":"8b830596cea7341b1581398362da4c5fb4101e3c","isMergeCommit":false,"messageTitle":"Committing Level 3","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":4}}},{"hash":"b6ef51f07df21202ed9279f201a437ae3fac78c7","isMergeCommit":false,"messageTitle":"Committing Level 3","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}},{"hash":"bc9248e9ae20849af864f3e289ea301ccef32633","isMergeCommit":false,"messageTitle":"Committing Level 3","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}},{"hash":"0a186be5633c054ce40437716e01276e87c0f2c0","isMergeCommit":false,"messageTitle":"Committing Level 3","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}},{"hash":"51138a0aea849541b74f589d9d343cad1e68c253","isMergeCommit":false,"messageTitle":"Committing Level 3","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":2}}},{"hash":"d92d6baa6565ef01bb8e8090bc5079df17c4ddba","isMergeCommit":false,"messageTitle":"Committing Level 3","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":8}}},{"hash":"44ca44432a62566b833c174c3ce05c31f26583b0","isMergeCommit":false,"messageTitle":"Committing Level 4","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":90,"deletions":4}}},{"hash":"c8d30445458ff7207d42fb173a85408825e6bef5","isMergeCommit":false,"messageTitle":"Committing Level 4","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":2}}},{"hash":"69d9b79674f428afd5b8715f8fda7b60a977fd72","isMergeCommit":false,"messageTitle":"Committing text-ui-test","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":16,"deletions":0},"java":{"insertions":1,"deletions":1}}},{"hash":"198334a595afaa06f4f1e2e0867c0c07d26b2c0e","isMergeCommit":false,"messageTitle":"Committing Level 4","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":5}}},{"hash":"bb49d9e7cd1bd5c9367132950a88b3cdcfb80cb3","isMergeCommit":false,"messageTitle":"Committing Level-5","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":1},"java":{"insertions":128,"deletions":75}}},{"hash":"8aab7cbd13c38c9df72ad659608c0c1ea0822d23","isMergeCommit":false,"messageTitle":"Committing Level-6","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":9}}}]},{"date":"2023-09-01","commitResults":[{"hash":"c63c221342d8030fc37093a3f1e937ad6c3f1147","isMergeCommit":false,"messageTitle":"Save the tasks in the hard disk automatically whenever the task list changes for Level 7. The tasklist will be saved to Duke.txt in UTF-16 encoded format when terminating the chatBot. The saved taskList can be retrieved after restarting the chatBot.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":84,"deletions":13}}},{"hash":"ad3a198bebe8db708d95e617c64c9eb9055127fe","isMergeCommit":false,"messageTitle":"Save the tasks in the hard disk automatically whenever the task list changes for Level 7. The tasklist will be saved to Duke.txt in UTF-16 encoded format when terminating the chatBot. The saved taskList can be retrieved after restarting the chatBot.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":1}}},{"hash":"e02da591a691e32aa6b34d06a601eaf576cc5298","isMergeCommit":false,"messageTitle":"Save the tasks in the hard disk automatically whenever the task list changes for Level 7. The tasklist will be saved to Duke.txt in UTF-8 encoded format when terminating the chatBot. The saved taskList can be retrieved after restarting the chatBot.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":24}}},{"hash":"840b1ff79bf4e09b5d44cb18f91609de58ed1107","isMergeCommit":false,"messageTitle":"Save the tasks in the hard disk automatically whenever the task list changes for Level 7. The tasklist will be saved to Duke.txt in UTF-8 encoded format when terminating the chatBot. The saved taskList can be retrieved after restarting the chatBot.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"698b2ca51779ccf55694576e023759d4405dd99e","isMergeCommit":false,"messageTitle":"Save the tasks in the hard disk automatically whenever the task list changes for Level 7. The tasklist will be saved to Duke.txt in UTF-8 encoded format when terminating the chatBot. The saved taskList can be retrieved after restarting the chatBot.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":6}}},{"hash":"d5890789b34d776bbdf06574fc303ead47134e91","isMergeCommit":false,"messageTitle":"Save the tasks in the hard disk automatically whenever the task list changes for Level 7. The tasklist will be saved to Duke.txt in UTF-8 encoded format when terminating the chatBot. The saved taskList can be retrieved after restarting the chatBot.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":6}}},{"hash":"a13da369a4e4c67eef854dda0509e3f5c48a8f62","isMergeCommit":false,"messageTitle":"Save the tasks in the hard disk automatically whenever the task list changes for Level 7. The tasklist will be saved to Duke.txt in UTF-8 encoded format when terminating the chatBot. The saved taskList can be retrieved after restarting the chatBot.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":36,"deletions":12}}},{"hash":"f0a837ad005259ae604cc20360168e68652abec2","isMergeCommit":false,"messageTitle":"Save the tasks in the hard disk automatically whenever the task list changes for Level 7. The tasklist will be saved to Duke.txt in UTF-8 encoded format when terminating the chatBot. The saved taskList can be retrieved after restarting the chatBot.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":0}}},{"hash":"75c7865710f0b2e37a3ede1b6f24bcbaaf31a997","isMergeCommit":false,"messageTitle":"Save the tasks in the hard disk automatically whenever the task list changes for Level 7. The tasklist will be saved to Duke.txt in UTF-8 encoded format when terminating the chatBot. The saved taskList can be retrieved after restarting the chatBot.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":27}}},{"hash":"a0704e1bae161d5e4fae465fe600202a7ea30b15","isMergeCommit":false,"messageTitle":"Save the tasks in the hard disk automatically whenever the task list changes for Level 7. The tasklist will be saved to Duke.txt in UTF-8 encoded format when terminating the chatBot. The saved taskList can be retrieved after restarting the chatBot.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"637bfeff15bb6589e12f6585cbae3df1d4c906c6","isMergeCommit":false,"messageTitle":"The deadline and event tasks now require a concrete dd-MM-yyyy HHmm format input, and will output in MMM d yyyy HHmm format (time in the 24 hours format) as part of Level 8.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":40,"deletions":15}}},{"hash":"0d460fbc974a67092335a021ee6dd898f1ad013e","isMergeCommit":false,"messageTitle":"The deadline and event tasks now require a concrete dd-MM-yyyy HHmm format input, and will output in MMM d yyyy HHmm format (time in the 24 hours format) as part of Level 8.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":0}}},{"hash":"2861c63a7dcff160e015c3b920851ef0522f1abb","isMergeCommit":false,"messageTitle":"Revert \"The deadline and event tasks now require a concrete dd-MM-yyyy HHmm format input, and will output in MMM d yyyy HHmm format (time in the 24 hours format) as part of Level 8.\"","messageBody":"This reverts commit 0d460fbc974a67092335a021ee6dd898f1ad013e.\n","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":1}}},{"hash":"a5460d9564ac7e949280d28a458a4f60f37564f6","isMergeCommit":false,"messageTitle":"Revert \"Revert \"The deadline and event tasks now require a concrete dd-MM-yyyy HHmm format input, and will output in MMM d yyyy HHmm format (time in the 24 hours format) as part of Level 8.\"\"","messageBody":"This reverts commit 2861c63a7dcff160e015c3b920851ef0522f1abb.\n","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":0}}},{"hash":"ca1cfcdba55b1f0de7be329f834c6f7599034d90","isMergeCommit":false,"messageTitle":"Import LocalDateTime to parse user inputs for date and time of tasks","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":0}}},{"hash":"baef718d45ce73a5c2a61f870ba3228963ac5a4c","isMergeCommit":false,"messageTitle":"Merge branch-Level-8 with master","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":0}}},{"hash":"cb13a4dcb15c2fd30bf695b50bb65a9cbd60e6a3","isMergeCommit":false,"messageTitle":"Add the header comment of the Task Class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":0}}},{"hash":"7641e6b1061e253b1cb5e0084af0c992ad764f74","isMergeCommit":false,"messageTitle":"merge branch-Level-7 with master","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}}]},{"date":"2023-09-02","commitResults":[{"hash":"c4a120c17cf542e1498cb23e2c31d3f56153726c","isMergeCommit":false,"messageTitle":"merge branch-Level-8 with master","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":9}}},{"hash":"85a2f0f765decd28df5b9337eefc0c69958821cb","isMergeCommit":false,"messageTitle":"Fix minor string formatting issues in the Deadline Class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}},{"hash":"f55e28ccd37734fc1e0a8affc8c36f1e56ea1a1d","isMergeCommit":false,"messageTitle":"create Ui class for the chatBot which interacts with users","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":6}}},{"hash":"de7ed2b37e0a372e4e3a0c31bc4571cb76a6a899","isMergeCommit":false,"messageTitle":"create Storage class for the chatBot to load and save tasks in the file","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":55,"deletions":52}}},{"hash":"4602d3092be668d1c71e49323dde8b1a4a23d7b5","isMergeCommit":false,"messageTitle":"create Parser class for the chatBot to accept and read user inputs","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":7}}},{"hash":"7fc79a8fae282b8d785d29309beacc3072814dec","isMergeCommit":false,"messageTitle":"create Parser class for the chatBot to parse and read user inputs","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":147,"deletions":143}}},{"hash":"8c96f3209dabe6f7706f3aecdf0f8cf7ea0e0301","isMergeCommit":false,"messageTitle":"create Ui class for the chatBot to interact with user inputs","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":41,"deletions":34}}}]},{"date":"2023-09-03","commitResults":[{"hash":"51863b417e62ae02da1c44d5c5b46864cd766e20","isMergeCommit":false,"messageTitle":"create TaskList class for the chatBot to handle the tasklists created","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"java":{"insertions":179,"deletions":98}}},{"hash":"634b93edf3dc734b76cca20c77fb3769fa5a6b96","isMergeCommit":false,"messageTitle":"create packages - duke, task and exception to categorize the classes in suitable packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":1},"java":{"insertions":58,"deletions":10},"bat":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}}]},{"date":"2023-09-04","commitResults":[{"hash":"f8cd1e6df29941b97902a91c9eb2c04070d50edb","isMergeCommit":true,"messageTitle":"merge add-gradle-support into master","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-09-05","commitResults":[{"hash":"eb16eff168c08d5f6d341be6c26dd57d1a82946e","isMergeCommit":false,"messageTitle":"set up gradle and merge add-gradle-support with master","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":3},"java":{"insertions":16,"deletions":8}}},{"hash":"82636ff30406894479c69ec46f746a4a14e9858b","isMergeCommit":false,"messageTitle":"Add JUnit tests for Storage, TaskList and Deadline classes","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":191,"deletions":50}}},{"hash":"4894c7d25f086c06d48a9064b26633fc5dff7d0f","isMergeCommit":false,"messageTitle":"Troubleshoot issues associated with JUnit and gradlew jar files","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":3,"deletions":2},"java":{"insertions":4,"deletions":8}}},{"hash":"228e5e152070298db9444392786d37915a1bb70d","isMergeCommit":false,"messageTitle":"Troubleshoot issues associated with JUnit and gradlew jar files","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":1}}},{"hash":"c891d68850fb542fd42ddaa8bfea67c13003b6d6","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/master\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"282ec093ffc8becdc2461a4daef0a7fa9d4c9ee8","isMergeCommit":false,"messageTitle":"Troubleshoot issues associated with JUnit and gradlew jar files","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"java":{"insertions":13,"deletions":8}}},{"hash":"b784562b2217368427600852f61ff0c0debc6073","isMergeCommit":true,"messageTitle":"Troubleshoot issues associated with JUnit and gradlew jar","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-09-06","commitResults":[{"hash":"c6b86b2d863afc5d521a92c5a64962d857e679c5","isMergeCommit":false,"messageTitle":"Troubleshoot issues associated with JUnit and gradle jar","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":7}}},{"hash":"90eff4d2004aa05f7403ae3d08342d81f2e64a40","isMergeCommit":false,"messageTitle":"create a Duke.jar file with JUnit tests for Storage, TaskList and Deadline Classes","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":4,"deletions":3},"java":{"insertions":1,"deletions":0}}},{"hash":"da6359d9a3250d5fb9c50379d691ff395bc38985","isMergeCommit":false,"messageTitle":"Add JavaDocs to the Java classes","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":339,"deletions":27}}},{"hash":"2c836ec5db6be42dc67fda082bbe8774187fe7a3","isMergeCommit":false,"messageTitle":"Improve Coding Standards across the Java files","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":23,"deletions":18}}},{"hash":"2b6dded29d4eee39854c776057b16fa696725a73","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"* branch-A-CodingStandard:\n Improve Coding Standards across the Java files\n","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"3f8da3c34bd1e74937350fdb35144acd54c9c13b","isMergeCommit":false,"messageTitle":"Add Find instruction for chatBot to find matching results","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"java":{"insertions":73,"deletions":55}}},{"hash":"466c99e5cfa0fdd7df7861211bb77f7828fe7edc","isMergeCommit":false,"messageTitle":"merge branch-Level-9 into master","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":1}}},{"hash":"5c30647cf452a1d142b3f6e9bb0a230bc9e3dc87","isMergeCommit":false,"messageTitle":"Update src/main/java/duke/Parser.java","messageBody":"Co-authored-by: B-enguin \u003c46633877+B-enguin@users.noreply.github.com\u003e","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}},{"hash":"2ea708aba756c1efaa56b8730a20de71d10f87d8","isMergeCommit":false,"messageTitle":"make changes to align with coding standards","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":6}}},{"hash":"9163891dad8532790905ed64a163564a2c57d434","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/master\u0027","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-09-10","commitResults":[{"hash":"c0390b0fa7a803fc5f5a64fb915c9884e1d3aa25","isMergeCommit":false,"messageTitle":"set up GUI for Duke","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{"gradle":{"insertions":16,"deletions":1},"fxml":{"insertions":61,"deletions":0},"java":{"insertions":235,"deletions":77}}},{"hash":"a614e7d0c359f3b1d5021faf20939bec633a4acc","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/master\u0027","messageBody":"# Conflicts:\n#\tsrc/main/java/duke/Parser.java\n","fileTypesAndContributionMap":{}},{"hash":"ac39abc3f17f624e54c2d2dd24792602dea6b97e","isMergeCommit":false,"messageTitle":"merge branch-Level-10 into master after resolving conflicts","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":1}}}]}]},"authorFileTypeContributionMap":{"RiyaMehta2211":{"java":1138,"md":2,"fxml":61,"sh":0,"bat":1,"gradle":18,"txt":15}},"authorContributionVariance":{"RiyaMehta2211":39341.15},"authorDisplayNameMap":{"RiyaMehta2211":"CS2103T-T14-2 MEHT..BHAI"}} diff --git a/Sebtey_ip_master/authorship.json b/Sebtey_ip_master/authorship.json index 50345921..1e839fac 100644 --- a/Sebtey_ip_master/authorship.json +++ b/Sebtey_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":"Sebtey"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"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":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","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":"","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"Sebtey"},"content":" mainClass.set(\"seedo.duke.Duke\")","lastModifiedDate":"2023-09-03"},{"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":"Sebtey"},"content":" archiveBaseName \u003d \"Veda\"","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"Sebtey"},"content":" archiveVersion \u003d \"V0.1\"","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"Sebtey"},"content":" archiveFileName \u003d \"Veda.jar\"","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":41,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"Sebtey"},"content":"checkstyle {","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"Sebtey"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"Sebtey"},"content":"}","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":48,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":49,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"Sebtey":9,"-":40}},{"path":"src/main/java/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sebtey"},"content":"import exceptions.ExcessiveArgumentException;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"Sebtey"},"content":"import exceptions.IncorrectInputException;","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"Sebtey"},"content":"import exceptions.NoDescriptionException;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"Sebtey"},"content":"import tasks.Deadline;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"Sebtey"},"content":"import tasks.Event;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"Sebtey"},"content":"import tasks.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"Sebtey"},"content":"import tasks.ToDo;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"Sebtey"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"Sebtey"},"content":" * Parser makes sense of the user command.","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"Sebtey"},"content":" * @author Sebastian Tay","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"Sebtey"},"content":"public class Parser {","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"Sebtey"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"Sebtey"},"content":" * Returns an int value denoting which action to be performed.","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"Sebtey"},"content":" * @param args is the input taken from the user.","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"Sebtey"},"content":" * @return non-negative int if args is valid input, else -1.","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"Sebtey"},"content":" public static int parse(String args) {","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"Sebtey"},"content":" args \u003d args.toLowerCase();","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"Sebtey"},"content":" if (args.equals(\"bye\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"Sebtey"},"content":" //User wishes to exit the program","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"Sebtey"},"content":" return 0;","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"Sebtey"},"content":" } else if (args.equals(\"list\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"Sebtey"},"content":" //User wishes to see his listed missions","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"Sebtey"},"content":" return 1;","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"Sebtey"},"content":" args \u003d args.split(\" \")[0];","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"Sebtey"},"content":" if (args.equals(\"mark\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"Sebtey"},"content":" //User wishes to mark task as done","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"Sebtey"},"content":" return 2;","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"Sebtey"},"content":" } else if (args.equals(\"unmark\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"Sebtey"},"content":" //User wishes to mark task as undone","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"Sebtey"},"content":" return 3;","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"Sebtey"},"content":" } else if (args.equals(\"delete\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"Sebtey"},"content":" //User wishes to delete a task","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"Sebtey"},"content":" return 4;","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"Sebtey"},"content":" } else if (args.equals(\"todo\") || args.equals(\"deadline\") || args.equals(\"event\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"Sebtey"},"content":" //User wishes to add a new task","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"Sebtey"},"content":" return 5;","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"Sebtey"},"content":" } else if (args.equals(\"find\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"Sebtey"},"content":" //User wishes to find a task by a keyword","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"Sebtey"},"content":" return 6;","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"Sebtey"},"content":" return -1;","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"Sebtey"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"Sebtey"},"content":" * Returns the index of the task given in the command line argument args.","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"Sebtey"},"content":" * @param args","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"Sebtey"},"content":" * @return an integer corresponding to the index of the task that we want.","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"Sebtey"},"content":" * @throws NumberFormatException","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"Sebtey"},"content":" * @throws NoDescriptionException when the user did not input any additional arguments.","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"Sebtey"},"content":" * @throws ExcessiveArgumentException when the user input more arguments than required.","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"Sebtey"},"content":" public static int getTargetIndex(String args)","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"Sebtey"},"content":" throws NumberFormatException, NoDescriptionException, ExcessiveArgumentException, IncorrectInputException {","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"Sebtey"},"content":" if (args.split(\" \").length \u003c 2) {","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"Sebtey"},"content":" throw new NoDescriptionException(\"There is no given task index.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"Sebtey"},"content":" } else if (args.split(\" \").length \u003e 2) {","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"Sebtey"},"content":" throw new ExcessiveArgumentException(\"There are too many arguments.\");","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"Sebtey"},"content":" int targetIndex \u003d Integer.parseInt(args.toLowerCase().split(\" \")[1]) - 1;","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"Sebtey"},"content":" if (targetIndex \u003c 0) {","lastModifiedDate":"2023-09-03"},{"lineNumber":78,"author":{"gitId":"Sebtey"},"content":" throw new IncorrectInputException(\"Index of task must be greater than 0.\");","lastModifiedDate":"2023-09-03"},{"lineNumber":79,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":80,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":81,"author":{"gitId":"Sebtey"},"content":" return targetIndex;","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"Sebtey"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"Sebtey"},"content":" * Returns a new task based on the command line argument args.","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"Sebtey"},"content":" * @param args","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"Sebtey"},"content":" * @return a Task from the given args.","lastModifiedDate":"2023-09-03"},{"lineNumber":89,"author":{"gitId":"Sebtey"},"content":" * @throws NoDescriptionException","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"Sebtey"},"content":" public static Task getTask(String args) throws NoDescriptionException {","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"Sebtey"},"content":" String type \u003d args.split(\" \")[0].toLowerCase();","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"Sebtey"},"content":" Task newTask \u003d null;","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"Sebtey"},"content":" String description \u003d \"\";","lastModifiedDate":"2023-09-02"},{"lineNumber":95,"author":{"gitId":"Sebtey"},"content":" String[] descriptions \u003d null; //For multiple arguments","lastModifiedDate":"2023-09-02"},{"lineNumber":96,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":97,"author":{"gitId":"Sebtey"},"content":" switch (type) {","lastModifiedDate":"2023-09-02"},{"lineNumber":98,"author":{"gitId":"Sebtey"},"content":" case \"todo\":","lastModifiedDate":"2023-09-02"},{"lineNumber":99,"author":{"gitId":"Sebtey"},"content":" description \u003d args.replaceFirst(\"todo \", \"\");","lastModifiedDate":"2023-09-02"},{"lineNumber":100,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":101,"author":{"gitId":"Sebtey"},"content":" if (description.toLowerCase() \u003d\u003d type) {","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"Sebtey"},"content":" throw new NoDescriptionException(\"\");","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":104,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":105,"author":{"gitId":"Sebtey"},"content":" newTask \u003d new ToDo(description);","lastModifiedDate":"2023-09-02"},{"lineNumber":106,"author":{"gitId":"Sebtey"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":107,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":108,"author":{"gitId":"Sebtey"},"content":" case \"deadline\":","lastModifiedDate":"2023-09-02"},{"lineNumber":109,"author":{"gitId":"Sebtey"},"content":" //Expected CL input: deadline \u003cDescription\u003e /by \u003cDue date in dd/MM/yyyy HHmm\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":110,"author":{"gitId":"Sebtey"},"content":" //TODO add error handling for no \"/by\" keyword","lastModifiedDate":"2023-09-02"},{"lineNumber":111,"author":{"gitId":"Sebtey"},"content":" if (description.toLowerCase() \u003d\u003d type) {","lastModifiedDate":"2023-09-02"},{"lineNumber":112,"author":{"gitId":"Sebtey"},"content":" throw new NoDescriptionException(","lastModifiedDate":"2023-09-03"},{"lineNumber":113,"author":{"gitId":"Sebtey"},"content":" \"Please input the right order: deadline \u003cDescription\u003e /by \u003cdue date\u003e\");","lastModifiedDate":"2023-09-03"},{"lineNumber":114,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":115,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":116,"author":{"gitId":"Sebtey"},"content":" description \u003d args.replaceFirst(\"deadline \", \"\");","lastModifiedDate":"2023-09-02"},{"lineNumber":117,"author":{"gitId":"Sebtey"},"content":" descriptions \u003d description.split(\" /by \");","lastModifiedDate":"2023-09-02"},{"lineNumber":118,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":119,"author":{"gitId":"Sebtey"},"content":" if (descriptions.length \u003c 2) {","lastModifiedDate":"2023-09-02"},{"lineNumber":120,"author":{"gitId":"Sebtey"},"content":" throw new IncorrectInputException(","lastModifiedDate":"2023-09-03"},{"lineNumber":121,"author":{"gitId":"Sebtey"},"content":" \"Please input the right order: deadline \u003cDescription\u003e /by \u003cdue date\u003e\");","lastModifiedDate":"2023-09-03"},{"lineNumber":122,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":123,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":124,"author":{"gitId":"Sebtey"},"content":" newTask \u003d new Deadline(descriptions[0], descriptions[1]);","lastModifiedDate":"2023-09-02"},{"lineNumber":125,"author":{"gitId":"Sebtey"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":126,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":127,"author":{"gitId":"Sebtey"},"content":" case \"event\":","lastModifiedDate":"2023-09-02"},{"lineNumber":128,"author":{"gitId":"Sebtey"},"content":" //Expected CL input: event \u003cDescription\u003e /from \u003cstart\u003e /to \u003cend\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":129,"author":{"gitId":"Sebtey"},"content":" if (description.toLowerCase() \u003d\u003d type) {","lastModifiedDate":"2023-09-02"},{"lineNumber":130,"author":{"gitId":"Sebtey"},"content":" throw new NoDescriptionException(\"\");","lastModifiedDate":"2023-09-02"},{"lineNumber":131,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":132,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":133,"author":{"gitId":"Sebtey"},"content":" description \u003d args.replaceFirst(\"event \", \"\"); //Remove type","lastModifiedDate":"2023-09-02"},{"lineNumber":134,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":135,"author":{"gitId":"Sebtey"},"content":" descriptions \u003d description.split(\" /from \"); //Split remaining args into description + (from and to)","lastModifiedDate":"2023-09-02"},{"lineNumber":136,"author":{"gitId":"Sebtey"},"content":" String from \u003d descriptions[1].split(\" /to \")[0]; //Split (from and to) into from and to","lastModifiedDate":"2023-09-02"},{"lineNumber":137,"author":{"gitId":"Sebtey"},"content":" String to \u003d descriptions[1].split(\" /to \")[1];","lastModifiedDate":"2023-09-02"},{"lineNumber":138,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":139,"author":{"gitId":"Sebtey"},"content":" newTask \u003d new Event(descriptions[0], from, to);","lastModifiedDate":"2023-09-02"},{"lineNumber":140,"author":{"gitId":"Sebtey"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":141,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":142,"author":{"gitId":"Sebtey"},"content":" default:","lastModifiedDate":"2023-09-02"},{"lineNumber":143,"author":{"gitId":"Sebtey"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":144,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":145,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":146,"author":{"gitId":"Sebtey"},"content":" return newTask;","lastModifiedDate":"2023-09-02"},{"lineNumber":147,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":148,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":149,"author":{"gitId":"Sebtey"},"content":" public static String getKeyword(String arg) {","lastModifiedDate":"2023-09-03"},{"lineNumber":150,"author":{"gitId":"Sebtey"},"content":" //Parse keyword","lastModifiedDate":"2023-09-03"},{"lineNumber":151,"author":{"gitId":"Sebtey"},"content":" final String keyword \u003d arg.toLowerCase().replaceFirst(\"find \", \"\");","lastModifiedDate":"2023-09-03"},{"lineNumber":152,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":153,"author":{"gitId":"Sebtey"},"content":" return keyword;","lastModifiedDate":"2023-09-03"},{"lineNumber":154,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":155,"author":{"gitId":"Sebtey"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"Sebtey":155}},{"path":"src/main/java/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sebtey"},"content":"import java.io.File;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Sebtey"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Sebtey"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Sebtey"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"Sebtey"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"Sebtey"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"Sebtey"},"content":"import tasks.Deadline;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"Sebtey"},"content":"import tasks.Event;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"Sebtey"},"content":"import tasks.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"Sebtey"},"content":"import tasks.ToDo;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"Sebtey"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"Sebtey"},"content":" * Storage deals with loading tasks from the file and saving tasks in the file.","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"Sebtey"},"content":" * @author Sebastian Tay","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"Sebtey"},"content":"public class Storage {","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"Sebtey"},"content":" private final String dir \u003d \"/VedaMissions\";","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"Sebtey"},"content":" private final String storagePath \u003d \"/VedaMissions/Missions.txt\";","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Sebtey"},"content":" private final File storageFile \u003d new File(storagePath);","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"Sebtey"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"Sebtey"},"content":" * Adds file into the directory specified.","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"Sebtey"},"content":" * @return whether file has been successfully added into the hard disk.","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"Sebtey"},"content":" public boolean addFile() {","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"Sebtey"},"content":" File directory \u003d new File(dir);","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"Sebtey"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"Sebtey"},"content":" if (directory.mkdir()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"Sebtey"},"content":" storageFile.createNewFile();","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"Sebtey"},"content":" return true;","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"Sebtey"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"An error occurred while trying to create the file.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"Sebtey"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"Sebtey"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"Sebtey"},"content":" * Indicates if the saved file is existing.","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"Sebtey"},"content":" * @return true if the saved file does exist, false otherwise.","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"Sebtey"},"content":" public boolean checkFileExists() {","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"Sebtey"},"content":" return storageFile.exists();","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"Sebtey"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"Sebtey"},"content":" * Returns the stored task list from the hard disk.","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"Sebtey"},"content":" * @return an ArrayList containing the tasks stored in the hard disk.","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"Sebtey"},"content":" * @throws FileNotFoundException If the storageFile is not located in its rightful directory.","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"Sebtey"},"content":" public ArrayList\u003cTask\u003e retrieveTasks() throws FileNotFoundException {","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"Sebtey"},"content":" ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"Sebtey"},"content":" Scanner sc \u003d new Scanner(storageFile);","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"Sebtey"},"content":" while (sc.hasNextLine()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"Sebtey"},"content":" final String task \u003d sc.nextLine(); //Each task is listed in a single line","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"Sebtey"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"Sebtey"},"content":" char type \u003d task.charAt(0);","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"Sebtey"},"content":" String[] descriptions \u003d task.split(\"::\"); //:: demarcates a different field","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"Sebtey"},"content":" switch (type) {","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"Sebtey"},"content":" case \u0027T\u0027:","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"Sebtey"},"content":" tasks.add(new ToDo(descriptions[2], descriptions[1].matches(\"1\")));","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"Sebtey"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"Sebtey"},"content":" case \u0027D\u0027:","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"Sebtey"},"content":" //Events.Deadline","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"Sebtey"},"content":" tasks.add(new Deadline(descriptions[2], descriptions[3], descriptions[1].matches(\"1\")));","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"Sebtey"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"Sebtey"},"content":" case \u0027E\u0027:","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"Sebtey"},"content":" //Events.Event","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"Sebtey"},"content":" tasks.add(new Event(descriptions[2], descriptions[3], descriptions[1].matches(\"1\")));","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"Sebtey"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"Sebtey"},"content":" default:","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"Wrong file format\");","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":91,"author":{"gitId":"Sebtey"},"content":" } catch (StringIndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":92,"author":{"gitId":"Sebtey"},"content":" //Formatting error in saved file","lastModifiedDate":"2023-09-01"},{"lineNumber":93,"author":{"gitId":"Sebtey"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-01"},{"lineNumber":94,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"File corrupted.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":95,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":96,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"Sebtey"},"content":" sc.close();","lastModifiedDate":"2023-09-01"},{"lineNumber":99,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":100,"author":{"gitId":"Sebtey"},"content":" return tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":103,"author":{"gitId":"Sebtey"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":104,"author":{"gitId":"Sebtey"},"content":" * Updates the saved data in the disk.","lastModifiedDate":"2023-09-01"},{"lineNumber":105,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":106,"author":{"gitId":"Sebtey"},"content":" * @param tasks is the current list of tasks the user has.","lastModifiedDate":"2023-09-01"},{"lineNumber":107,"author":{"gitId":"Sebtey"},"content":" * @param isAddingTask indicates whether the user is adding a new task or overwriting the file.","lastModifiedDate":"2023-09-01"},{"lineNumber":108,"author":{"gitId":"Sebtey"},"content":" * @return true if file is successfully updated.","lastModifiedDate":"2023-09-01"},{"lineNumber":109,"author":{"gitId":"Sebtey"},"content":" * @throws IOException When writer is called upon to write after being closed.","lastModifiedDate":"2023-09-01"},{"lineNumber":110,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":111,"author":{"gitId":"Sebtey"},"content":" public boolean updateData(ArrayList\u003cTask\u003e tasks, boolean isAddingTask) throws IOException {","lastModifiedDate":"2023-09-01"},{"lineNumber":112,"author":{"gitId":"Sebtey"},"content":" FileWriter writer \u003d null;","lastModifiedDate":"2023-09-01"},{"lineNumber":113,"author":{"gitId":"Sebtey"},"content":" boolean isNotFirstTask \u003d tasks.size() !\u003d 1;","lastModifiedDate":"2023-09-01"},{"lineNumber":114,"author":{"gitId":"Sebtey"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":115,"author":{"gitId":"Sebtey"},"content":" writer \u003d new FileWriter(storageFile, isAddingTask);","lastModifiedDate":"2023-09-01"},{"lineNumber":116,"author":{"gitId":"Sebtey"},"content":" String newData;","lastModifiedDate":"2023-09-01"},{"lineNumber":117,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":118,"author":{"gitId":"Sebtey"},"content":" if (isNotFirstTask \u0026\u0026 isAddingTask) {","lastModifiedDate":"2023-09-01"},{"lineNumber":119,"author":{"gitId":"Sebtey"},"content":" //Add a new line containing the latest task","lastModifiedDate":"2023-09-01"},{"lineNumber":120,"author":{"gitId":"Sebtey"},"content":" newData \u003d (System.lineSeparator() + tasks.get(tasks.size() - 1).convertToStorageForm());","lastModifiedDate":"2023-09-01"},{"lineNumber":121,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":122,"author":{"gitId":"Sebtey"},"content":" } else if (!isNotFirstTask \u0026\u0026 isAddingTask) {","lastModifiedDate":"2023-09-01"},{"lineNumber":123,"author":{"gitId":"Sebtey"},"content":" newData \u003d tasks.get(tasks.size() - 1).convertToStorageForm();","lastModifiedDate":"2023-09-01"},{"lineNumber":124,"author":{"gitId":"Sebtey"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":125,"author":{"gitId":"Sebtey"},"content":" //Overwrite the file","lastModifiedDate":"2023-09-01"},{"lineNumber":126,"author":{"gitId":"Sebtey"},"content":" newData \u003d \"\";","lastModifiedDate":"2023-09-01"},{"lineNumber":127,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":128,"author":{"gitId":"Sebtey"},"content":" //Iterate through tasks and convertToStorageForm","lastModifiedDate":"2023-09-01"},{"lineNumber":129,"author":{"gitId":"Sebtey"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-09-01"},{"lineNumber":130,"author":{"gitId":"Sebtey"},"content":" newData +\u003d tasks.get(i).convertToStorageForm();","lastModifiedDate":"2023-09-01"},{"lineNumber":131,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":132,"author":{"gitId":"Sebtey"},"content":" if (i !\u003d tasks.size() - 1) {","lastModifiedDate":"2023-09-01"},{"lineNumber":133,"author":{"gitId":"Sebtey"},"content":" newData +\u003d System.lineSeparator();","lastModifiedDate":"2023-09-01"},{"lineNumber":134,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":135,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":136,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":137,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":138,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":139,"author":{"gitId":"Sebtey"},"content":" writer.write(newData);","lastModifiedDate":"2023-09-01"},{"lineNumber":140,"author":{"gitId":"Sebtey"},"content":" writer.close();","lastModifiedDate":"2023-09-01"},{"lineNumber":141,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":142,"author":{"gitId":"Sebtey"},"content":" return true;","lastModifiedDate":"2023-09-01"},{"lineNumber":143,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":144,"author":{"gitId":"Sebtey"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":145,"author":{"gitId":"Sebtey"},"content":" writer.close();","lastModifiedDate":"2023-09-01"},{"lineNumber":146,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"Failed to update tasks on disk.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":147,"author":{"gitId":"Sebtey"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-01"},{"lineNumber":148,"author":{"gitId":"Sebtey"},"content":" return false;","lastModifiedDate":"2023-09-01"},{"lineNumber":149,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":150,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":151,"author":{"gitId":"Sebtey"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Sebtey":151}},{"path":"src/main/java/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sebtey"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"Sebtey"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Sebtey"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"Sebtey"},"content":"import java.util.List;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"Sebtey"},"content":"import java.util.stream.Collectors;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"Sebtey"},"content":"import tasks.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"Sebtey"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"Sebtey"},"content":" * TaskList encapsulates the task lists and operations related to the task lists.","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"Sebtey"},"content":" * @author Sebastian Tay","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"Sebtey"},"content":"public class TaskList {","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"Sebtey"},"content":" private ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e(100);","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"Sebtey"},"content":" private Storage storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"Sebtey"},"content":" public TaskList(Storage storage) {","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"Sebtey"},"content":" this.storage \u003d storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"Sebtey"},"content":" public ArrayList\u003cTask\u003e getTasks() {","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"Sebtey"},"content":" return this.tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"Sebtey"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"Sebtey"},"content":" * Retrieves the saved data from file.","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"Sebtey"},"content":" * @return true if successful. Otherwise, false.","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"Sebtey"},"content":" public boolean load() {","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"Sebtey"},"content":" if (storage.checkFileExists()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"Sebtey"},"content":" //File does exist","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"Sebtey"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"Sebtey"},"content":" tasks \u003d storage.retrieveTasks();","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"Sebtey"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"Unable to find file.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"Sebtey"},"content":" return false;","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"Sebtey"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"Sebtey"},"content":" //File does not exist","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"Sebtey"},"content":" storage.addFile();","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"Sebtey"},"content":" return true;","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"Sebtey"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"Sebtey"},"content":" * Deletes the task at the given index of the list.","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"Sebtey"},"content":" * @param taskIndex is null if encounter an exception.","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"Sebtey"},"content":" public Task deleteTask(int taskIndex) {","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"Sebtey"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"Sebtey"},"content":" Task task \u003d tasks.remove(taskIndex);","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"Sebtey"},"content":" storage.updateData(tasks, false);","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"Noted. I have removed the following mission:\");","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"Sebtey"},"content":" System.out.println(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"Sebtey"},"content":" return task;","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"Sebtey"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"Invalid index! Please ensure you correctly key in your target index.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"Sebtey"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"Unable to update file.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"Sebtey"},"content":" return null;","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"Sebtey"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"Sebtey"},"content":" * Adds the given task into the list of tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"Sebtey"},"content":" * @param task","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"Sebtey"},"content":" public boolean addTask(Task task) {","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"Sebtey"},"content":" if (task !\u003d null \u0026\u0026 tasks.add(task)) {","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"added in mission:\\n\" + task);","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"Sebtey"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"Sebtey"},"content":" storage.updateData(tasks, true);","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"Sebtey"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"Error writing to file.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"Sebtey"},"content":" return true;","lastModifiedDate":"2023-09-02"},{"lineNumber":89,"author":{"gitId":"Sebtey"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"System is unable to accommodate the new mission\");","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"Sebtey"},"content":" return false;","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":95,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":96,"author":{"gitId":"Sebtey"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":97,"author":{"gitId":"Sebtey"},"content":" * Marks the task at the given index as done.","lastModifiedDate":"2023-09-02"},{"lineNumber":98,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":99,"author":{"gitId":"Sebtey"},"content":" * @param taskIndex is the index of the task to be marked.","lastModifiedDate":"2023-09-03"},{"lineNumber":100,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":101,"author":{"gitId":"Sebtey"},"content":" public boolean markAsDone(int taskIndex) {","lastModifiedDate":"2023-09-03"},{"lineNumber":102,"author":{"gitId":"Sebtey"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"Sebtey"},"content":" Task task \u003d tasks.get(taskIndex);","lastModifiedDate":"2023-09-02"},{"lineNumber":104,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":105,"author":{"gitId":"Sebtey"},"content":" if (task.isDone()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":106,"author":{"gitId":"Sebtey"},"content":" //Events.Task already marked as done","lastModifiedDate":"2023-09-02"},{"lineNumber":107,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"Mission has been completed previously.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":108,"author":{"gitId":"Sebtey"},"content":" return true;","lastModifiedDate":"2023-09-03"},{"lineNumber":109,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":110,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":111,"author":{"gitId":"Sebtey"},"content":" task.updateCompletionStatus();","lastModifiedDate":"2023-09-02"},{"lineNumber":112,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":113,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"Mission status updated! Mission completed successfully.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":114,"author":{"gitId":"Sebtey"},"content":" System.out.println(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":115,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":116,"author":{"gitId":"Sebtey"},"content":" return storage.updateData(tasks, false);","lastModifiedDate":"2023-09-03"},{"lineNumber":117,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":118,"author":{"gitId":"Sebtey"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":119,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"Invalid index! Please ensure you correctly key in your target index.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":120,"author":{"gitId":"Sebtey"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":121,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"Unable to update file.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":122,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":123,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":124,"author":{"gitId":"Sebtey"},"content":" return false;","lastModifiedDate":"2023-09-03"},{"lineNumber":125,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":126,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":127,"author":{"gitId":"Sebtey"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":128,"author":{"gitId":"Sebtey"},"content":" * Marks the task at the given index as undone.","lastModifiedDate":"2023-09-02"},{"lineNumber":129,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":130,"author":{"gitId":"Sebtey"},"content":" * @param taskIndex is the index of the task to be unmarked.","lastModifiedDate":"2023-09-03"},{"lineNumber":131,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":132,"author":{"gitId":"Sebtey"},"content":" public boolean markUndone(int taskIndex) {","lastModifiedDate":"2023-09-03"},{"lineNumber":133,"author":{"gitId":"Sebtey"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":134,"author":{"gitId":"Sebtey"},"content":" Task task \u003d tasks.get(taskIndex);","lastModifiedDate":"2023-09-02"},{"lineNumber":135,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":136,"author":{"gitId":"Sebtey"},"content":" if (!(task.isDone())) {","lastModifiedDate":"2023-09-02"},{"lineNumber":137,"author":{"gitId":"Sebtey"},"content":" //task already marked as undone","lastModifiedDate":"2023-09-02"},{"lineNumber":138,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"Mission is already marked as undone!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":139,"author":{"gitId":"Sebtey"},"content":" return true;","lastModifiedDate":"2023-09-03"},{"lineNumber":140,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":141,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":142,"author":{"gitId":"Sebtey"},"content":" task.updateCompletionStatus();","lastModifiedDate":"2023-09-02"},{"lineNumber":143,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":144,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"Mission status updated! Mission completion status reverted.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":145,"author":{"gitId":"Sebtey"},"content":" System.out.println(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":146,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":147,"author":{"gitId":"Sebtey"},"content":" return storage.updateData(tasks, false);","lastModifiedDate":"2023-09-03"},{"lineNumber":148,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":149,"author":{"gitId":"Sebtey"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":150,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"Invalid index! Please ensure you correctly key in your target index.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":151,"author":{"gitId":"Sebtey"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":152,"author":{"gitId":"Sebtey"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-02"},{"lineNumber":153,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"Unable to update file.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":154,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":155,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":156,"author":{"gitId":"Sebtey"},"content":" return false;","lastModifiedDate":"2023-09-03"},{"lineNumber":157,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":158,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":159,"author":{"gitId":"Sebtey"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":160,"author":{"gitId":"Sebtey"},"content":" * Returns an ArrayList containing tasks that contains the keyword.","lastModifiedDate":"2023-09-03"},{"lineNumber":161,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":162,"author":{"gitId":"Sebtey"},"content":" * @param keyword is the word that we are searching for amongst the tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":163,"author":{"gitId":"Sebtey"},"content":" * @return an ArrayList of tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":164,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":165,"author":{"gitId":"Sebtey"},"content":" public ArrayList\u003cTask\u003e findKeyword(String keyword) {","lastModifiedDate":"2023-09-03"},{"lineNumber":166,"author":{"gitId":"Sebtey"},"content":" //Filter out the tasks without the keyword using Stream","lastModifiedDate":"2023-09-03"},{"lineNumber":167,"author":{"gitId":"Sebtey"},"content":" List\u003cTask\u003e results \u003d tasks","lastModifiedDate":"2023-09-03"},{"lineNumber":168,"author":{"gitId":"Sebtey"},"content":" .stream()","lastModifiedDate":"2023-09-03"},{"lineNumber":169,"author":{"gitId":"Sebtey"},"content":" .filter((task) -\u003e task.getDescription().toLowerCase().contains(keyword))","lastModifiedDate":"2023-09-03"},{"lineNumber":170,"author":{"gitId":"Sebtey"},"content":" .collect(Collectors.toList());","lastModifiedDate":"2023-09-03"},{"lineNumber":171,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":172,"author":{"gitId":"Sebtey"},"content":" return new ArrayList\u003c\u003e(results);","lastModifiedDate":"2023-09-03"},{"lineNumber":173,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":174,"author":{"gitId":"Sebtey"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"Sebtey":174}},{"path":"src/main/java/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sebtey"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"Sebtey"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"Sebtey"},"content":"import tasks.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"Sebtey"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"Sebtey"},"content":" * Ui handles the interactions with user.","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"Sebtey"},"content":" * @author Sebastian Tay","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"Sebtey"},"content":"public class Ui {","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"Sebtey"},"content":" private Scanner sc;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"Sebtey"},"content":" public Ui(Scanner sc) {","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"Sebtey"},"content":" this.sc \u003d sc;","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"Sebtey"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"Sebtey"},"content":" * Retrieves input from the user in the command line.","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"Sebtey"},"content":" * @return","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"Sebtey"},"content":" public String getInput() {","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"Sebtey"},"content":" return sc.nextLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"Sebtey"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"Sebtey"},"content":" * Greets the user.","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"Sebtey"},"content":" public void welcome() {","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"____________________________________________________________\");","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"Veda initialised. How may I help you?\");","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"____________________________________________________________\");","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"Sebtey"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"Sebtey"},"content":" * Terminates the ui and closes the scanner.","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"Sebtey"},"content":" public void exit() {","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"Terminating reader.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"Sebtey"},"content":" sc.close();","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"Bye. All the best for your mission!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"Sebtey"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"Sebtey"},"content":" * Informs user that command is unrecognised.","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"Sebtey"},"content":" public void displayUnrecognisedInput() {","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"Unrecognised command.\");","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"Sebtey"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"Sebtey"},"content":" * List out the missions in tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"Sebtey"},"content":" * @param tasks contains the missions to be listed.","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"Sebtey"},"content":" public void displayList(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"Missions:\");","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"Sebtey"},"content":" tasks.forEach(task -\u003e System.out.println((tasks.indexOf(task) + 1) + \".\" + task));","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"Sebtey"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"Sebtey"},"content":" * List out the missions in tasks with the message at the top.","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"Sebtey"},"content":" * @param tasks","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"Sebtey"},"content":" * @param message","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"Sebtey"},"content":" public void displayList(ArrayList\u003cTask\u003e tasks, String message) {","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"Sebtey"},"content":" System.out.println(message);","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"Sebtey"},"content":" tasks.forEach(task -\u003e System.out.println((tasks.indexOf(task) + 1) + \".\" + task));","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"Sebtey"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"Sebtey":77}},{"path":"src/main/java/Veda.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sebtey"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Sebtey"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"Sebtey"},"content":"import exceptions.IncorrectInputException;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"Sebtey"},"content":"import exceptions.NoDescriptionException;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"Sebtey"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"Sebtey"},"content":" * Veda is the main class for the chatbot application \"Veda\".","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"Sebtey"},"content":" * @author Sebastian Tay","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"Sebtey"},"content":"public class Veda {","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"Sebtey"},"content":" private static final Storage storage \u003d new Storage();","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"Sebtey"},"content":" private static final TaskList tasks \u003d new TaskList(storage);","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"Sebtey"},"content":" private static final Ui ui \u003d new Ui(new Scanner(System.in));","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"Sebtey"},"content":" private static void initialise() {","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"Sebtey"},"content":" ui.welcome();","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"Sebtey"},"content":" tasks.load();","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":21,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":22,"author":{"gitId":"Sebtey"},"content":" private static void run() {","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"Sebtey"},"content":" while (true) {","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"Sebtey"},"content":" String input \u003d ui.getInput();","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":26,"author":{"gitId":"Sebtey"},"content":" int method \u003d Parser.parse(input); //Get which commands to perform based on user\u0027s input","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"Sebtey"},"content":" switch (method) {","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"Sebtey"},"content":" case -1:","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"Sebtey"},"content":" //Unrecognised input","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"Unrecognised command.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"Sebtey"},"content":" break;","lastModifiedDate":"2023-08-25"},{"lineNumber":33,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":34,"author":{"gitId":"Sebtey"},"content":" case 0:","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"Sebtey"},"content":" //User wishes to exit the program","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"Sebtey"},"content":" ui.exit();","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"Sebtey"},"content":" return;","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":39,"author":{"gitId":"Sebtey"},"content":" case 1:","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"Sebtey"},"content":" //User wishes to see listed missions","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"Sebtey"},"content":" ui.displayList(tasks.getTasks());","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"Sebtey"},"content":" break;","lastModifiedDate":"2023-08-25"},{"lineNumber":43,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":44,"author":{"gitId":"Sebtey"},"content":" case 2:","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"Sebtey"},"content":" //User wishes to mark task as done","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"Sebtey"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"Sebtey"},"content":" tasks.markAsDone(Parser.getTargetIndex(input));","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"Sebtey"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"Invalid index! Please ensure you correctly key in your target index.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"Sebtey"},"content":" } catch (NoDescriptionException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"Sebtey"},"content":" System.out.println(e);","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":53,"author":{"gitId":"Sebtey"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":55,"author":{"gitId":"Sebtey"},"content":" case 3:","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"Sebtey"},"content":" //User wishes to mark task as undone","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"Sebtey"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"Sebtey"},"content":" tasks.markUndone(Parser.getTargetIndex(input));","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"Sebtey"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"Invalid index! Please ensure you correctly key in your target index.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"Sebtey"},"content":" } catch (NoDescriptionException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"Sebtey"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":64,"author":{"gitId":"Sebtey"},"content":" break;","lastModifiedDate":"2023-08-23"},{"lineNumber":65,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":66,"author":{"gitId":"Sebtey"},"content":" case 4:","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"Sebtey"},"content":" //User wishes to delete a task","lastModifiedDate":"2023-08-25"},{"lineNumber":68,"author":{"gitId":"Sebtey"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"Sebtey"},"content":" tasks.deleteTask(Parser.getTargetIndex(input));","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"Sebtey"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"Invalid index! Please ensure you correctly key in your target index.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"Sebtey"},"content":" } catch (NoDescriptionException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"Sebtey"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":75,"author":{"gitId":"Sebtey"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":77,"author":{"gitId":"Sebtey"},"content":" case 5:","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"Sebtey"},"content":" //User wishes to add a new task","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"Sebtey"},"content":" try {","lastModifiedDate":"2023-08-25"},{"lineNumber":80,"author":{"gitId":"Sebtey"},"content":" tasks.addTask(Parser.getTask(input));","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"Sebtey"},"content":" } catch (IncorrectInputException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":82,"author":{"gitId":"Sebtey"},"content":" System.out.println(e);","lastModifiedDate":"2023-08-25"},{"lineNumber":83,"author":{"gitId":"Sebtey"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"Ensure your deadline is of the format {dd/MM/yyyy HHmm}\");","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":86,"author":{"gitId":"Sebtey"},"content":" break;","lastModifiedDate":"2023-09-03"},{"lineNumber":87,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":88,"author":{"gitId":"Sebtey"},"content":" case 6:","lastModifiedDate":"2023-09-03"},{"lineNumber":89,"author":{"gitId":"Sebtey"},"content":" //User wishes to find a task by a keyword","lastModifiedDate":"2023-09-03"},{"lineNumber":90,"author":{"gitId":"Sebtey"},"content":" final String keyword \u003d Parser.getKeyword(input);","lastModifiedDate":"2023-09-03"},{"lineNumber":91,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":92,"author":{"gitId":"Sebtey"},"content":" ui.displayList(","lastModifiedDate":"2023-09-03"},{"lineNumber":93,"author":{"gitId":"Sebtey"},"content":" tasks.findKeyword(keyword),","lastModifiedDate":"2023-09-03"},{"lineNumber":94,"author":{"gitId":"Sebtey"},"content":" \"Retrieved the following missions containing the keyword \\\"\" + keyword + \"\\\":\"","lastModifiedDate":"2023-09-03"},{"lineNumber":95,"author":{"gitId":"Sebtey"},"content":" );","lastModifiedDate":"2023-09-03"},{"lineNumber":96,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":97,"author":{"gitId":"Sebtey"},"content":" break;","lastModifiedDate":"2023-09-03"},{"lineNumber":98,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":99,"author":{"gitId":"Sebtey"},"content":" default:","lastModifiedDate":"2023-09-03"},{"lineNumber":100,"author":{"gitId":"Sebtey"},"content":" break;","lastModifiedDate":"2023-09-03"},{"lineNumber":101,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":102,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":104,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":105,"author":{"gitId":"Sebtey"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":106,"author":{"gitId":"Sebtey"},"content":" * Runs the program.","lastModifiedDate":"2023-09-03"},{"lineNumber":107,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":108,"author":{"gitId":"Sebtey"},"content":" * @param args","lastModifiedDate":"2023-09-03"},{"lineNumber":109,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":110,"author":{"gitId":"Sebtey"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-02"},{"lineNumber":111,"author":{"gitId":"Sebtey"},"content":" initialise();","lastModifiedDate":"2023-09-02"},{"lineNumber":112,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":113,"author":{"gitId":"Sebtey"},"content":" run();","lastModifiedDate":"2023-09-02"},{"lineNumber":114,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":115,"author":{"gitId":"Sebtey"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"Sebtey":115}},{"path":"src/main/java/exceptions/ExcessiveArgumentException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sebtey"},"content":"package exceptions;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"Sebtey"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"Sebtey"},"content":" * ExcessiveArgumentException is a form of IncorrectInputException that is thrown when the user provides more arguments","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"Sebtey"},"content":" * than the command requires.","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"Sebtey"},"content":" * @author Sebastian Tay","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"Sebtey"},"content":"public class ExcessiveArgumentException extends IncorrectInputException {","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"Sebtey"},"content":" public ExcessiveArgumentException(String message) {","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"Sebtey"},"content":" super(message);","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"Sebtey"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"Sebtey"},"content":" public String toString() {","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"Sebtey"},"content":" return super.getMessage();","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"Sebtey"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"Sebtey":18}},{"path":"src/main/java/exceptions/IncorrectInputException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sebtey"},"content":"package exceptions;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Sebtey"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"Sebtey"},"content":" * IncorrectInputException is a form of RuntimeException that is thrown when the user provide an invalid input.","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"Sebtey"},"content":" * @author Sebastian Tay","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"Sebtey"},"content":"public class IncorrectInputException extends RuntimeException {","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Sebtey"},"content":" public IncorrectInputException(String message) {","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Sebtey"},"content":" super(message);","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Sebtey"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Sebtey"},"content":" public String toString() {","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"Sebtey"},"content":" return \"Please ensure that you key in your arguments correctly.\";","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"Sebtey"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"Sebtey":17}},{"path":"src/main/java/exceptions/NoDescriptionException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sebtey"},"content":"package exceptions;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Sebtey"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"Sebtey"},"content":" * NoDescriptionException is a form of IncorrectInputException that is thrown when the user omits certain description","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"Sebtey"},"content":" * in their input.","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"Sebtey"},"content":" * @author Sebastian Tay","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"Sebtey"},"content":"public class NoDescriptionException extends IncorrectInputException {","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Sebtey"},"content":" public NoDescriptionException(String message) {","lastModifiedDate":"2023-08-25"},{"lineNumber":11,"author":{"gitId":"Sebtey"},"content":" super(message);","lastModifiedDate":"2023-08-25"},{"lineNumber":12,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":13,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":14,"author":{"gitId":"Sebtey"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":15,"author":{"gitId":"Sebtey"},"content":" public String toString() {","lastModifiedDate":"2023-08-25"},{"lineNumber":16,"author":{"gitId":"Sebtey"},"content":" return super.getMessage();","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":18,"author":{"gitId":"Sebtey"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"Sebtey":18}},{"path":"src/main/java/tasks/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sebtey"},"content":"package tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Sebtey"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Sebtey"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Sebtey"},"content":"/**","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"Sebtey"},"content":" * Tasks that need to be done before a specific date/time.","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"Sebtey"},"content":" * @author Sebastian Tay","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":11,"author":{"gitId":"Sebtey"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-25"},{"lineNumber":12,"author":{"gitId":"Sebtey"},"content":" //TODO","lastModifiedDate":"2023-08-25"},{"lineNumber":13,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":14,"author":{"gitId":"Sebtey"},"content":" static final String SYMBOL \u003d \"D\";","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"Sebtey"},"content":" protected String by;","lastModifiedDate":"2023-08-25"},{"lineNumber":16,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":17,"author":{"gitId":"Sebtey"},"content":" protected LocalDateTime deadline;","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"Sebtey"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"Sebtey"},"content":" * Constructor for deadline task that is used for user inputs.","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"Sebtey"},"content":" * @param description is the description of the task.","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"Sebtey"},"content":" * @param by deadline for the task.","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"Sebtey"},"content":" public Deadline(String description, String by) {","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"Sebtey"},"content":" super(description);","lastModifiedDate":"2023-08-25"},{"lineNumber":27,"author":{"gitId":"Sebtey"},"content":" this.by \u003d by;","lastModifiedDate":"2023-08-25"},{"lineNumber":28,"author":{"gitId":"Sebtey"},"content":" this.deadline \u003d LocalDateTime.parse(by, DateTimeFormatter.ofPattern(\"dd/MM/yyyy HHmm\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":30,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":31,"author":{"gitId":"Sebtey"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"Sebtey"},"content":" * Constructor for deadline task that is used when retrieving tasks from the saved file.","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"Sebtey"},"content":" * @param description is the description of the task.","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"Sebtey"},"content":" * @param by deadline for the task.","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"Sebtey"},"content":" * @param isDone indicates whether the task has been completed.","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"Sebtey"},"content":" public Deadline(String description, String by, boolean isDone) {","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"Sebtey"},"content":" super(description, isDone);","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"Sebtey"},"content":" this.by \u003d by;","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"Sebtey"},"content":" this.deadline \u003d LocalDateTime.parse(by, DateTimeFormatter.ofPattern(\"dd/MM/yyyy HHmm\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":45,"author":{"gitId":"Sebtey"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":46,"author":{"gitId":"Sebtey"},"content":" public String getType() {","lastModifiedDate":"2023-08-25"},{"lineNumber":47,"author":{"gitId":"Sebtey"},"content":" return SYMBOL;","lastModifiedDate":"2023-08-25"},{"lineNumber":48,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":49,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":50,"author":{"gitId":"Sebtey"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":51,"author":{"gitId":"Sebtey"},"content":" public String toString() {","lastModifiedDate":"2023-08-25"},{"lineNumber":52,"author":{"gitId":"Sebtey"},"content":" return \"[D]\"","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"Sebtey"},"content":" + super.toString()","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"Sebtey"},"content":" + \"(by: \" + this.deadline.format(DateTimeFormatter.ofPattern(\"dd MMMM yyyy HHmm\")) + \"H)\";","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":56,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"Sebtey"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"Sebtey"},"content":" public String convertToStorageForm() {","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"Sebtey"},"content":" final String separator \u003d \"::\";","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"Sebtey"},"content":" final String status \u003d isDone() ? \"1\" : \"0\";","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"Sebtey"},"content":" //D::0::return book::June 6th","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"Sebtey"},"content":" return SYMBOL + separator + status + separator + getDescription() + separator + this.by;","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"Sebtey"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"Sebtey":65}},{"path":"src/main/java/tasks/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sebtey"},"content":"package tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Sebtey"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Sebtey"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Sebtey"},"content":"/**","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"Sebtey"},"content":" * Tasks that start at a specific date/time and ends at a specific date/time.","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"Sebtey"},"content":" * @author Sebastian Tay","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":11,"author":{"gitId":"Sebtey"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-25"},{"lineNumber":12,"author":{"gitId":"Sebtey"},"content":" static final String SYMBOL \u003d \"E\";","lastModifiedDate":"2023-08-25"},{"lineNumber":13,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":14,"author":{"gitId":"Sebtey"},"content":" protected String from;","lastModifiedDate":"2023-08-25"},{"lineNumber":15,"author":{"gitId":"Sebtey"},"content":" protected LocalDateTime start;","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"Sebtey"},"content":" protected String to;","lastModifiedDate":"2023-08-25"},{"lineNumber":17,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":18,"author":{"gitId":"Sebtey"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"Sebtey"},"content":" * Constructor for event class, using user input.","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"Sebtey"},"content":" * @param description is the description of the task.","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"Sebtey"},"content":" * @param from is the starting time of the event.","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"Sebtey"},"content":" * @param to is the ending time of the event.","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"Sebtey"},"content":" public Event(String description, String from, String to) {","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"Sebtey"},"content":" super(description);","lastModifiedDate":"2023-08-25"},{"lineNumber":27,"author":{"gitId":"Sebtey"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-25"},{"lineNumber":28,"author":{"gitId":"Sebtey"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-25"},{"lineNumber":29,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"Sebtey"},"content":" this.start \u003d LocalDateTime.parse(from, DateTimeFormatter.ofPattern(\"dd/MM/yyyy HHmm\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":33,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":34,"author":{"gitId":"Sebtey"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"Sebtey"},"content":" * Constructor for event class, using the data from the saved file.","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"Sebtey"},"content":" * @param description is the description of the task.","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"Sebtey"},"content":" * @param period is the string containing the start and end time of the event.","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"Sebtey"},"content":" * @param isDone denotes whether the task has been completed.","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"Sebtey"},"content":" public Event(String description, String period, boolean isDone) {","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"Sebtey"},"content":" super(description, isDone);","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"Sebtey"},"content":" this.from \u003d period.split(\"-\")[0];","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"Sebtey"},"content":" this.to \u003d period.split(\"-\")[1];","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"Sebtey"},"content":" this.start \u003d LocalDateTime.parse(from, DateTimeFormatter.ofPattern(\"dd/MM/yyyy HHmm\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"Sebtey"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":50,"author":{"gitId":"Sebtey"},"content":" public String getType() {","lastModifiedDate":"2023-08-25"},{"lineNumber":51,"author":{"gitId":"Sebtey"},"content":" return SYMBOL;","lastModifiedDate":"2023-08-25"},{"lineNumber":52,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":53,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":54,"author":{"gitId":"Sebtey"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":55,"author":{"gitId":"Sebtey"},"content":" public String toString() {","lastModifiedDate":"2023-08-25"},{"lineNumber":56,"author":{"gitId":"Sebtey"},"content":" return \"[E][\" + getStatusIcon() + \"] \"","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"Sebtey"},"content":" + super.getDescription()","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"Sebtey"},"content":" + \"(from: \"","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"Sebtey"},"content":" + this.start.format(DateTimeFormatter.ofPattern(\"dd MMMM yyyy HHmm\"))","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"Sebtey"},"content":" + \"H to: \"","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"Sebtey"},"content":" + this.to","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"Sebtey"},"content":" + \"H)\";","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"Sebtey"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"Sebtey"},"content":" public String convertToStorageForm() {","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"Sebtey"},"content":" final String separator \u003d \"::\";","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"Sebtey"},"content":" final String status \u003d isDone() ? \"1\" : \"0\";","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"Sebtey"},"content":" final String period \u003d this.from + \"-\" + this.to;","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"Sebtey"},"content":" //E::0::project meeting::Aug 6th 2pm-4pm","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"Sebtey"},"content":" return SYMBOL + separator + status + separator + getDescription() + separator + period;","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":74,"author":{"gitId":"Sebtey"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"Sebtey":74}},{"path":"src/main/java/tasks/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sebtey"},"content":"package tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Sebtey"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"Sebtey"},"content":" * Task is the abstract class that encapsulates the common methods related to other Task classes.","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"Sebtey"},"content":" * @author Sebastian Tay","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"Sebtey"},"content":"public abstract class Task {","lastModifiedDate":"2023-08-25"},{"lineNumber":9,"author":{"gitId":"Sebtey"},"content":" private boolean isDone;","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"Sebtey"},"content":" private String description;","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"Sebtey"},"content":" Task(String description) {","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"Sebtey"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"Sebtey"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"Sebtey"},"content":" Task(String description, boolean isDone) {","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"Sebtey"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"Sebtey"},"content":" this.isDone \u003d isDone;","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"Sebtey"},"content":" public String getDescription() {","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Sebtey"},"content":" return this.description;","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"Sebtey"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"Sebtey"},"content":" * Changes the current completion status of the task to true or false if it is currently false or true respectively.","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"Sebtey"},"content":" public void updateCompletionStatus() {","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"Sebtey"},"content":" //If done, change to not done or false","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"Sebtey"},"content":" //Else, change to done or true","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"Sebtey"},"content":" this.isDone \u003d !(this.isDone);","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"Sebtey"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"Sebtey"},"content":" //Events.Task is marked as done with an \"X\"","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"Sebtey"},"content":" return isDone","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"Sebtey"},"content":" ? \"X\"","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"Sebtey"},"content":" : \" \";","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":42,"author":{"gitId":"Sebtey"},"content":" public boolean isDone() {","lastModifiedDate":"2023-08-25"},{"lineNumber":43,"author":{"gitId":"Sebtey"},"content":" return this.isDone;","lastModifiedDate":"2023-08-25"},{"lineNumber":44,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":45,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":46,"author":{"gitId":"Sebtey"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":47,"author":{"gitId":"Sebtey"},"content":" public String toString() {","lastModifiedDate":"2023-08-25"},{"lineNumber":48,"author":{"gitId":"Sebtey"},"content":" return \"[\" + getStatusIcon() + \"] \" + getDescription();","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":50,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"Sebtey"},"content":" public abstract String getType();","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"Sebtey"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"Sebtey"},"content":" * Converts the task into a String containing all its information that will be stored in the saved file.","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"Sebtey"},"content":" * @return a String that represents the task instance in the saved file.","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"Sebtey"},"content":" public abstract String convertToStorageForm();","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"Sebtey"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Sebtey":59}},{"path":"src/main/java/tasks/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sebtey"},"content":"package tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Sebtey"},"content":"/**","lastModifiedDate":"2023-08-25"},{"lineNumber":4,"author":{"gitId":"Sebtey"},"content":" * ToDos are tasks that have no date/time attached to them.","lastModifiedDate":"2023-08-25"},{"lineNumber":5,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"Sebtey"},"content":" * @author Sebastian Tay","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"Sebtey"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-25"},{"lineNumber":9,"author":{"gitId":"Sebtey"},"content":" static final String SYMBOL \u003d \"T\";","lastModifiedDate":"2023-08-25"},{"lineNumber":10,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":11,"author":{"gitId":"Sebtey"},"content":" public ToDo(String description) {","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"Sebtey"},"content":" super(description);","lastModifiedDate":"2023-08-25"},{"lineNumber":13,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":14,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":15,"author":{"gitId":"Sebtey"},"content":" public ToDo(String description, boolean isDone) {","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"Sebtey"},"content":" super(description, isDone);","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"Sebtey"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":20,"author":{"gitId":"Sebtey"},"content":" public String getType() {","lastModifiedDate":"2023-08-25"},{"lineNumber":21,"author":{"gitId":"Sebtey"},"content":" return SYMBOL;","lastModifiedDate":"2023-08-25"},{"lineNumber":22,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":23,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":24,"author":{"gitId":"Sebtey"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":25,"author":{"gitId":"Sebtey"},"content":" public String toString() {","lastModifiedDate":"2023-08-25"},{"lineNumber":26,"author":{"gitId":"Sebtey"},"content":" return \"[T][\" + getStatusIcon() + \"] \" + super.getDescription();","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"Sebtey"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"Sebtey"},"content":" public String convertToStorageForm() {","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"Sebtey"},"content":" final String separator \u003d \"::\";","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"Sebtey"},"content":" final String status \u003d isDone() ? \"1\" : \"0\";","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"Sebtey"},"content":" return SYMBOL + separator + status + separator + getDescription();","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":36,"author":{"gitId":"Sebtey"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"Sebtey":36}},{"path":"src/test/java/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sebtey"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"Sebtey"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"Sebtey"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"Sebtey"},"content":"import exceptions.ExcessiveArgumentException;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"Sebtey"},"content":"import exceptions.IncorrectInputException;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"Sebtey"},"content":"import exceptions.NoDescriptionException;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"Sebtey"},"content":"import tasks.Deadline;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"Sebtey"},"content":"import tasks.Event;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"Sebtey"},"content":"import tasks.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"Sebtey"},"content":"import tasks.ToDo;","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"Sebtey"},"content":"public class ParserTest {","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"Sebtey"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"Sebtey"},"content":" public void parse_emptyInput_negativeOne() {","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"Sebtey"},"content":" int methodType \u003d Parser.parse(\"\");","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"Sebtey"},"content":" assertEquals(-1, methodType);","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"Sebtey"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"Sebtey"},"content":" public void parse_exit_one() {","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"Sebtey"},"content":" int methodType \u003d Parser.parse(\"bye\");","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"Sebtey"},"content":" assertEquals(0, methodType);","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"Sebtey"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"Sebtey"},"content":" public void parse_statementWithExitFront_returnNegativeOne() {","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"Sebtey"},"content":" int methodType \u003d Parser.parse(\"bye world\");","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"Sebtey"},"content":" assertEquals(-1, methodType);","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"Sebtey"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"Sebtey"},"content":" public void parse_statementWithExitMiddle_returnNegativeOne() {","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"Sebtey"},"content":" int methodType \u003d Parser.parse(\"good bye cruel world\");","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"Sebtey"},"content":" assertEquals(-1, methodType);","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"Sebtey"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"Sebtey"},"content":" public void parse_listCall_returnOne() {","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"Sebtey"},"content":" int methodType \u003d Parser.parse(\"list\");","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"Sebtey"},"content":" assertEquals(1, methodType);","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"Sebtey"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"Sebtey"},"content":" public void parse_instantiateNewTask_fiveFiveFive() {","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"Sebtey"},"content":" int methodTypeOne \u003d Parser.parse(\"todo hello world\");","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"Sebtey"},"content":" int methodTypeTwo \u003d Parser.parse(\"deadline see you /by 08/12/2023 0800\");","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"Sebtey"},"content":" int methodTypeThree \u003d Parser.parse(\"event bye world /from 08/12/2023 0900 /to 0900\");","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"Sebtey"},"content":" String actualOutput \u003d String.valueOf(methodTypeOne)","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"Sebtey"},"content":" + String.valueOf(methodTypeTwo)","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"Sebtey"},"content":" + String.valueOf(methodTypeThree);","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"Sebtey"},"content":" assertEquals(\"555\", actualOutput);","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"Sebtey"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"Sebtey"},"content":" public void getTargetIndex_excessiveArguments_throwExcessiveArgumentException() {","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"Sebtey"},"content":" assertThrows(ExcessiveArgumentException.class, () -\u003e Parser.getTargetIndex(\"mark 1 remove\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"Sebtey"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"Sebtey"},"content":" public void getTargetIndex_stringArgumentIndex_throwNumberFormatException() {","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"Sebtey"},"content":" assertThrows(NumberFormatException.class, () -\u003e Parser.getTargetIndex(\"mark 1t\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"Sebtey"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"Sebtey"},"content":" public void getTargetIndex_noArgumentIndex_throwNoDescriptionException() {","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"Sebtey"},"content":" assertThrows(NoDescriptionException.class, () -\u003e Parser.getTargetIndex(\"mark \"));","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":78,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":79,"author":{"gitId":"Sebtey"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":80,"author":{"gitId":"Sebtey"},"content":" public void getTargetIndex_invalidArgumentIndex_throwIncorrectInputException() {","lastModifiedDate":"2023-09-03"},{"lineNumber":81,"author":{"gitId":"Sebtey"},"content":" assertThrows(IncorrectInputException.class, () -\u003e Parser.getTargetIndex(\"mark -1\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":82,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":83,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":84,"author":{"gitId":"Sebtey"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":85,"author":{"gitId":"Sebtey"},"content":" public void getTargetIndex_correctArgumentIndex_correctIndex() {","lastModifiedDate":"2023-09-03"},{"lineNumber":86,"author":{"gitId":"Sebtey"},"content":" int index \u003d Parser.getTargetIndex(\"mark 4\");","lastModifiedDate":"2023-09-03"},{"lineNumber":87,"author":{"gitId":"Sebtey"},"content":" // argument index is offset by +1 from actual index of task for user-friendliness","lastModifiedDate":"2023-09-03"},{"lineNumber":88,"author":{"gitId":"Sebtey"},"content":" assertEquals(3, index);","lastModifiedDate":"2023-09-03"},{"lineNumber":89,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":90,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":91,"author":{"gitId":"Sebtey"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":92,"author":{"gitId":"Sebtey"},"content":" public void getTask_todoTaskArgument_todoTask() {","lastModifiedDate":"2023-09-03"},{"lineNumber":93,"author":{"gitId":"Sebtey"},"content":" Task task \u003d Parser.getTask(\"todo test mission\");","lastModifiedDate":"2023-09-03"},{"lineNumber":94,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":95,"author":{"gitId":"Sebtey"},"content":" //We test if they are equal if they return the same storage form","lastModifiedDate":"2023-09-03"},{"lineNumber":96,"author":{"gitId":"Sebtey"},"content":" assertEquals(new ToDo(\"test mission\").convertToStorageForm(), task.convertToStorageForm());","lastModifiedDate":"2023-09-03"},{"lineNumber":97,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":98,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":99,"author":{"gitId":"Sebtey"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":100,"author":{"gitId":"Sebtey"},"content":" public void getTask_deadlineTaskArgument_deadlineTask() {","lastModifiedDate":"2023-09-03"},{"lineNumber":101,"author":{"gitId":"Sebtey"},"content":" final String arg \u003d \"deadline test mission /by 08/08/2023 0800\";","lastModifiedDate":"2023-09-05"},{"lineNumber":102,"author":{"gitId":"Sebtey"},"content":" final Task actualTask \u003d Parser.getTask(arg);","lastModifiedDate":"2023-09-05"},{"lineNumber":103,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":104,"author":{"gitId":"Sebtey"},"content":" //We test if they are equal if they return the same storage form","lastModifiedDate":"2023-09-03"},{"lineNumber":105,"author":{"gitId":"Sebtey"},"content":" assertEquals(new Deadline(","lastModifiedDate":"2023-09-05"},{"lineNumber":106,"author":{"gitId":"Sebtey"},"content":" \"test mission\",","lastModifiedDate":"2023-09-05"},{"lineNumber":107,"author":{"gitId":"Sebtey"},"content":" \"08/08/2023 0800\").convertToStorageForm(),","lastModifiedDate":"2023-09-05"},{"lineNumber":108,"author":{"gitId":"Sebtey"},"content":" actualTask.convertToStorageForm());","lastModifiedDate":"2023-09-05"},{"lineNumber":109,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":110,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":111,"author":{"gitId":"Sebtey"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":112,"author":{"gitId":"Sebtey"},"content":" public void getTask_eventTaskArgument_eventTask() {","lastModifiedDate":"2023-09-03"},{"lineNumber":113,"author":{"gitId":"Sebtey"},"content":" final String arg \u003d \"event test mission /from 08/08/2023 0800 /to 0900\";","lastModifiedDate":"2023-09-05"},{"lineNumber":114,"author":{"gitId":"Sebtey"},"content":" final Task actualTask \u003d Parser.getTask(arg);","lastModifiedDate":"2023-09-05"},{"lineNumber":115,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":116,"author":{"gitId":"Sebtey"},"content":" //We test if they are equal if they return the same storage form","lastModifiedDate":"2023-09-03"},{"lineNumber":117,"author":{"gitId":"Sebtey"},"content":" assertEquals(new Event(","lastModifiedDate":"2023-09-05"},{"lineNumber":118,"author":{"gitId":"Sebtey"},"content":" \"test mission\",","lastModifiedDate":"2023-09-05"},{"lineNumber":119,"author":{"gitId":"Sebtey"},"content":" \"08/08/2023 0800\",","lastModifiedDate":"2023-09-05"},{"lineNumber":120,"author":{"gitId":"Sebtey"},"content":" \"0900\")","lastModifiedDate":"2023-09-05"},{"lineNumber":121,"author":{"gitId":"Sebtey"},"content":" .convertToStorageForm(), actualTask.convertToStorageForm());","lastModifiedDate":"2023-09-05"},{"lineNumber":122,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":123,"author":{"gitId":"Sebtey"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"Sebtey":123}},{"path":"src/test/java/TaskListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sebtey"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"Sebtey"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"Sebtey"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"Sebtey"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"Sebtey"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"Sebtey"},"content":"import tasks.Deadline;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"Sebtey"},"content":"import tasks.Event;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"Sebtey"},"content":"import tasks.Task;","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"Sebtey"},"content":"import tasks.ToDo;","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"Sebtey"},"content":"public class TaskListTest {","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"Sebtey"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"Sebtey"},"content":" * StorageStub is used to emulate ./Storage to allow unit testing of TaskList.","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"Sebtey"},"content":" private class StorageStub extends Storage {","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"Sebtey"},"content":" private String[] data;","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"Sebtey"},"content":" protected StorageStub() {","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"Sebtey"},"content":" super();","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"Sebtey"},"content":" data \u003d new String[] {","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"Sebtey"},"content":" \"T::0::sing a song\",","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"Sebtey"},"content":" \"D::0::hi world ::05/09/2023 2359\",","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"Sebtey"},"content":" \"E::0::apocalypse ::03/09/2023 0100-03/09/2023 1200\"","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"Sebtey"},"content":" };","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"Sebtey"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"Sebtey"},"content":" public boolean checkFileExists() {","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"Sebtey"},"content":" return true;","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"Sebtey"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"Sebtey"},"content":" public ArrayList\u003cTask\u003e retrieveTasks() throws FileNotFoundException {","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"Sebtey"},"content":" ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"Sebtey"},"content":" for (int i \u003d 0; i \u003c data.length; i++) {","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"Sebtey"},"content":" char type \u003d data[i].charAt(0);","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"Sebtey"},"content":" String[] descriptions \u003d data[i].split(\"::\"); //:: demarcates a different field","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"Sebtey"},"content":" switch (type) {","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"Sebtey"},"content":" case \u0027T\u0027:","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"Sebtey"},"content":" tasks.add(new ToDo(descriptions[2], descriptions[1].matches(\"1\")));","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"Sebtey"},"content":" break;","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"Sebtey"},"content":" case \u0027D\u0027:","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"Sebtey"},"content":" //Events.Deadline","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"Sebtey"},"content":" tasks.add(new Deadline(descriptions[2], descriptions[3], descriptions[1].matches(\"1\")));","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"Sebtey"},"content":" break;","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"Sebtey"},"content":" case \u0027E\u0027:","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"Sebtey"},"content":" //Events.Event","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"Sebtey"},"content":" tasks.add(new Event(descriptions[2], descriptions[3], descriptions[1].matches(\"1\")));","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"Sebtey"},"content":" break;","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"Sebtey"},"content":" default:","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"Wrong file format\");","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"Sebtey"},"content":" return tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"Sebtey"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"Sebtey"},"content":" public boolean updateData(ArrayList\u003cTask\u003e tasks, boolean isAddingTask) throws IOException {","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"Sebtey"},"content":" return true;","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"Sebtey"},"content":" private TaskList tasks \u003d new TaskList(new StorageStub());","lastModifiedDate":"2023-09-05"},{"lineNumber":72,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"Sebtey"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"Sebtey"},"content":" public void load_readFromStorageStub_true() {","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"Sebtey"},"content":" assertEquals(true, tasks.load());","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":78,"author":{"gitId":"Sebtey"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":79,"author":{"gitId":"Sebtey"},"content":" public void deleteTask_invalidIndex_returnNull() {","lastModifiedDate":"2023-09-05"},{"lineNumber":80,"author":{"gitId":"Sebtey"},"content":" //tasks have only 3 tasks","lastModifiedDate":"2023-09-03"},{"lineNumber":81,"author":{"gitId":"Sebtey"},"content":" final Task deletedTask \u003d tasks.deleteTask(5);","lastModifiedDate":"2023-09-05"},{"lineNumber":82,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":83,"author":{"gitId":"Sebtey"},"content":" assertEquals(null, deletedTask);","lastModifiedDate":"2023-09-05"},{"lineNumber":84,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":85,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":86,"author":{"gitId":"Sebtey"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":87,"author":{"gitId":"Sebtey"},"content":" public void deleteTask_validIndex_returnTodoTask() {","lastModifiedDate":"2023-09-05"},{"lineNumber":88,"author":{"gitId":"Sebtey"},"content":" //task at index 0 is a todotask with description \"sing a song\"","lastModifiedDate":"2023-09-03"},{"lineNumber":89,"author":{"gitId":"Sebtey"},"content":" tasks.load();","lastModifiedDate":"2023-09-03"},{"lineNumber":90,"author":{"gitId":"Sebtey"},"content":" final Task deletedTask \u003d tasks.deleteTask(0);","lastModifiedDate":"2023-09-05"},{"lineNumber":91,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":92,"author":{"gitId":"Sebtey"},"content":" assertEquals(new ToDo(\"sing a song\").convertToStorageForm(), deletedTask.convertToStorageForm());","lastModifiedDate":"2023-09-05"},{"lineNumber":93,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":94,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":95,"author":{"gitId":"Sebtey"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":96,"author":{"gitId":"Sebtey"},"content":" public void deleteTask_postDeletionLength_two() {","lastModifiedDate":"2023-09-03"},{"lineNumber":97,"author":{"gitId":"Sebtey"},"content":" tasks.load();","lastModifiedDate":"2023-09-03"},{"lineNumber":98,"author":{"gitId":"Sebtey"},"content":" tasks.deleteTask(0);","lastModifiedDate":"2023-09-03"},{"lineNumber":99,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":100,"author":{"gitId":"Sebtey"},"content":" final int length \u003d tasks.getTasks().size();","lastModifiedDate":"2023-09-05"},{"lineNumber":101,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":102,"author":{"gitId":"Sebtey"},"content":" assertEquals(2, length);","lastModifiedDate":"2023-09-05"},{"lineNumber":103,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":104,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":105,"author":{"gitId":"Sebtey"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":106,"author":{"gitId":"Sebtey"},"content":" public void markAsDone_taskIsNotDone_true() {","lastModifiedDate":"2023-09-03"},{"lineNumber":107,"author":{"gitId":"Sebtey"},"content":" tasks.load();","lastModifiedDate":"2023-09-03"},{"lineNumber":108,"author":{"gitId":"Sebtey"},"content":" final boolean isSuccessful \u003d tasks.markAsDone(0);","lastModifiedDate":"2023-09-05"},{"lineNumber":109,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":110,"author":{"gitId":"Sebtey"},"content":" assertEquals(true, isSuccessful);","lastModifiedDate":"2023-09-05"},{"lineNumber":111,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":112,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":113,"author":{"gitId":"Sebtey"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":114,"author":{"gitId":"Sebtey"},"content":" public void markAsDone_taskIsDone_true() {","lastModifiedDate":"2023-09-03"},{"lineNumber":115,"author":{"gitId":"Sebtey"},"content":" tasks.load();","lastModifiedDate":"2023-09-03"},{"lineNumber":116,"author":{"gitId":"Sebtey"},"content":" tasks.markAsDone(0);","lastModifiedDate":"2023-09-03"},{"lineNumber":117,"author":{"gitId":"Sebtey"},"content":" final boolean isSuccessful \u003d tasks.markAsDone(0);","lastModifiedDate":"2023-09-05"},{"lineNumber":118,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":119,"author":{"gitId":"Sebtey"},"content":" assertEquals(true, isSuccessful);","lastModifiedDate":"2023-09-05"},{"lineNumber":120,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":121,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":122,"author":{"gitId":"Sebtey"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":123,"author":{"gitId":"Sebtey"},"content":" public void markAsDone_taskIndexInvalid_false() {","lastModifiedDate":"2023-09-03"},{"lineNumber":124,"author":{"gitId":"Sebtey"},"content":" tasks.load();","lastModifiedDate":"2023-09-03"},{"lineNumber":125,"author":{"gitId":"Sebtey"},"content":" final boolean isSuccessful \u003d tasks.markAsDone(5);","lastModifiedDate":"2023-09-05"},{"lineNumber":126,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":127,"author":{"gitId":"Sebtey"},"content":" assertEquals(false, isSuccessful);","lastModifiedDate":"2023-09-05"},{"lineNumber":128,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":129,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":130,"author":{"gitId":"Sebtey"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":131,"author":{"gitId":"Sebtey"},"content":" public void markUndone_taskIsDone_true() {","lastModifiedDate":"2023-09-03"},{"lineNumber":132,"author":{"gitId":"Sebtey"},"content":" tasks.load();","lastModifiedDate":"2023-09-03"},{"lineNumber":133,"author":{"gitId":"Sebtey"},"content":" tasks.markAsDone(0);","lastModifiedDate":"2023-09-03"},{"lineNumber":134,"author":{"gitId":"Sebtey"},"content":" final boolean isSuccessful \u003d tasks.markUndone(0);","lastModifiedDate":"2023-09-05"},{"lineNumber":135,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":136,"author":{"gitId":"Sebtey"},"content":" assertEquals(true, isSuccessful);","lastModifiedDate":"2023-09-05"},{"lineNumber":137,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":138,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":139,"author":{"gitId":"Sebtey"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":140,"author":{"gitId":"Sebtey"},"content":" public void markUndone_taskIsNotDone_true() {","lastModifiedDate":"2023-09-03"},{"lineNumber":141,"author":{"gitId":"Sebtey"},"content":" tasks.load();","lastModifiedDate":"2023-09-03"},{"lineNumber":142,"author":{"gitId":"Sebtey"},"content":" final boolean isSuccessful \u003d tasks.markUndone(0);","lastModifiedDate":"2023-09-05"},{"lineNumber":143,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":144,"author":{"gitId":"Sebtey"},"content":" assertEquals(true, isSuccessful);","lastModifiedDate":"2023-09-05"},{"lineNumber":145,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":146,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":147,"author":{"gitId":"Sebtey"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":148,"author":{"gitId":"Sebtey"},"content":" public void markUndone_taskIndexInvalid_false() {","lastModifiedDate":"2023-09-03"},{"lineNumber":149,"author":{"gitId":"Sebtey"},"content":" tasks.load();","lastModifiedDate":"2023-09-03"},{"lineNumber":150,"author":{"gitId":"Sebtey"},"content":" final boolean isSuccessful \u003d tasks.markUndone(5);","lastModifiedDate":"2023-09-05"},{"lineNumber":151,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":152,"author":{"gitId":"Sebtey"},"content":" assertEquals(false, isSuccessful);","lastModifiedDate":"2023-09-05"},{"lineNumber":153,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":154,"author":{"gitId":"Sebtey"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"Sebtey":154}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"Sebtey"},"content":"todo testing123","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"Sebtey"},"content":"list","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"Sebtey"},"content":"mark 1","lastModifiedDate":"2023-08-25"},{"lineNumber":4,"author":{"gitId":"Sebtey"},"content":"list","lastModifiedDate":"2023-08-25"},{"lineNumber":5,"author":{"gitId":"Sebtey"},"content":"unmark 1","lastModifiedDate":"2023-08-25"},{"lineNumber":6,"author":{"gitId":"Sebtey"},"content":"list","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"Sebtey"},"content":"bye","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"Sebtey":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":"Sebtey"},"content":"java -classpath ..\\bin Veda \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-08-25"},{"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":{"Sebtey":1,"-":20}}] +[{"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":"Sebtey"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"Sebtey"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":14,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":15,"author":{"gitId":"Sebtey"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":16,"author":{"gitId":"Sebtey"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":17,"author":{"gitId":"Sebtey"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"Sebtey"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"Sebtey"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":20,"author":{"gitId":"Sebtey"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":21,"author":{"gitId":"Sebtey"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":22,"author":{"gitId":"Sebtey"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":23,"author":{"gitId":"Sebtey"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":24,"author":{"gitId":"Sebtey"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":25,"author":{"gitId":"Sebtey"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":26,"author":{"gitId":"Sebtey"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-07"},{"lineNumber":27,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":28,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"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":"Sebtey"},"content":" mainClass.set(\"seedo.duke.Duke\")","lastModifiedDate":"2023-09-03"},{"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":"Sebtey"},"content":" archiveBaseName \u003d \"Veda\"","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"Sebtey"},"content":" archiveVersion \u003d \"V0.1\"","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"Sebtey"},"content":" archiveFileName \u003d \"Veda.jar\"","lastModifiedDate":"2023-09-03"},{"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":"Sebtey"},"content":"checkstyle {","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"Sebtey"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"Sebtey"},"content":"}","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":62,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":63,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"Sebtey":23,"-":40}},{"path":"src/main/java/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sebtey"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-10"},{"lineNumber":2,"author":{"gitId":"Sebtey"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"Sebtey"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"Sebtey"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"Sebtey"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"Sebtey"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"Sebtey"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-07"},{"lineNumber":9,"author":{"gitId":"Sebtey"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"Sebtey"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-07"},{"lineNumber":11,"author":{"gitId":"Sebtey"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"Sebtey"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-07"},{"lineNumber":13,"author":{"gitId":"Sebtey"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-07"},{"lineNumber":14,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":15,"author":{"gitId":"Sebtey"},"content":"/**","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"Sebtey"},"content":" * An example of a custom control using FXML.","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"Sebtey"},"content":" * This control represents a dialog box consisting of an ImageView to represent the speaker\u0027s face and a label","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"Sebtey"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"Sebtey"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-07"},{"lineNumber":21,"author":{"gitId":"Sebtey"},"content":" @FXML","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"Sebtey"},"content":" private Label dialog;","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"Sebtey"},"content":" @FXML","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"Sebtey"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-07"},{"lineNumber":25,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":26,"author":{"gitId":"Sebtey"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-10"},{"lineNumber":27,"author":{"gitId":"Sebtey"},"content":" try {","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"Sebtey"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"Sebtey"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-10"},{"lineNumber":30,"author":{"gitId":"Sebtey"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"Sebtey"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"Sebtey"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-10"},{"lineNumber":33,"author":{"gitId":"Sebtey"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-10"},{"lineNumber":34,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":35,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":36,"author":{"gitId":"Sebtey"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-10"},{"lineNumber":37,"author":{"gitId":"Sebtey"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-10"},{"lineNumber":38,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":39,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":40,"author":{"gitId":"Sebtey"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":41,"author":{"gitId":"Sebtey"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-10"},{"lineNumber":42,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":43,"author":{"gitId":"Sebtey"},"content":" private void flip() {","lastModifiedDate":"2023-09-07"},{"lineNumber":44,"author":{"gitId":"Sebtey"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-07"},{"lineNumber":45,"author":{"gitId":"Sebtey"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-10"},{"lineNumber":46,"author":{"gitId":"Sebtey"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-10"},{"lineNumber":47,"author":{"gitId":"Sebtey"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-10"},{"lineNumber":48,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":49,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":50,"author":{"gitId":"Sebtey"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-10"},{"lineNumber":51,"author":{"gitId":"Sebtey"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-10"},{"lineNumber":52,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":53,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":54,"author":{"gitId":"Sebtey"},"content":" public static DialogBox getVedaDialog(String text, Image img) {","lastModifiedDate":"2023-09-10"},{"lineNumber":55,"author":{"gitId":"Sebtey"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-10"},{"lineNumber":56,"author":{"gitId":"Sebtey"},"content":" db.flip();","lastModifiedDate":"2023-09-07"},{"lineNumber":57,"author":{"gitId":"Sebtey"},"content":" return db;","lastModifiedDate":"2023-09-07"},{"lineNumber":58,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":59,"author":{"gitId":"Sebtey"},"content":"}","lastModifiedDate":"2023-09-07"}],"authorContributionMap":{"Sebtey":59}},{"path":"src/main/java/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sebtey"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"Sebtey"},"content":"/**","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"Sebtey"},"content":" * Launcher is the class that will provide the entry point to our application.","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"Sebtey"},"content":"public class Launcher {","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"Sebtey"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-07"},{"lineNumber":8,"author":{"gitId":"Sebtey"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"Sebtey"},"content":"}","lastModifiedDate":"2023-09-07"}],"authorContributionMap":{"Sebtey":10}},{"path":"src/main/java/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sebtey"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-10"},{"lineNumber":2,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"Sebtey"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"Sebtey"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"Sebtey"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"Sebtey"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"Sebtey"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"Sebtey"},"content":"/**","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"Sebtey"},"content":" * A GUI for Duke using FXML.","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"Sebtey"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"Sebtey"},"content":" private Veda veda \u003d new Veda();","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"Sebtey"},"content":" @Override","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"Sebtey"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"Sebtey"},"content":" try {","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"Sebtey"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"Sebtey"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-10"},{"lineNumber":21,"author":{"gitId":"Sebtey"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"Sebtey"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"Sebtey"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setVeda(veda);","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"Sebtey"},"content":" setStageProperties(stage);","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"Sebtey"},"content":" stage.show();","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"Sebtey"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-10"},{"lineNumber":27,"author":{"gitId":"Sebtey"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":30,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"Sebtey"},"content":" private void setStageProperties(Stage stage) {","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"Sebtey"},"content":" stage.setTitle(\"Veda System\");","lastModifiedDate":"2023-09-10"},{"lineNumber":33,"author":{"gitId":"Sebtey"},"content":" stage.setResizable(false);","lastModifiedDate":"2023-09-10"},{"lineNumber":34,"author":{"gitId":"Sebtey"},"content":" stage.setMinHeight(600.0);","lastModifiedDate":"2023-09-10"},{"lineNumber":35,"author":{"gitId":"Sebtey"},"content":" stage.setMinWidth(400.0);","lastModifiedDate":"2023-09-10"},{"lineNumber":36,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":37,"author":{"gitId":"Sebtey"},"content":"}","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"Sebtey":37}},{"path":"src/main/java/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sebtey"},"content":"import javafx.application.Platform;","lastModifiedDate":"2023-09-10"},{"lineNumber":2,"author":{"gitId":"Sebtey"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"Sebtey"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"Sebtey"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"Sebtey"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"Sebtey"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"Sebtey"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"Sebtey"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"Sebtey"},"content":"/**","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"Sebtey"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"Sebtey"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"Sebtey"},"content":" @FXML","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"Sebtey"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"Sebtey"},"content":" @FXML","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"Sebtey"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"Sebtey"},"content":" @FXML","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"Sebtey"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"Sebtey"},"content":" @FXML","lastModifiedDate":"2023-09-10"},{"lineNumber":21,"author":{"gitId":"Sebtey"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"Sebtey"},"content":" private Veda veda;","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"Sebtey"},"content":" private Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaUser.png\"));","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"Sebtey"},"content":" private Image vedaImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/Veda.png\"));","lastModifiedDate":"2023-09-10"},{"lineNumber":27,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"Sebtey"},"content":" @FXML","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"Sebtey"},"content":" public void initialize() {","lastModifiedDate":"2023-09-10"},{"lineNumber":30,"author":{"gitId":"Sebtey"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":33,"author":{"gitId":"Sebtey"},"content":" public void setVeda(Veda v) {","lastModifiedDate":"2023-09-10"},{"lineNumber":34,"author":{"gitId":"Sebtey"},"content":" veda \u003d v;","lastModifiedDate":"2023-09-10"},{"lineNumber":35,"author":{"gitId":"Sebtey"},"content":" dialogContainer.getChildren().add(DialogBox.getVedaDialog(v.initialise(), vedaImage));","lastModifiedDate":"2023-09-10"},{"lineNumber":36,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":37,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":38,"author":{"gitId":"Sebtey"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":39,"author":{"gitId":"Sebtey"},"content":" * Creates two dialog boxes, one echoing user input and the other containing Duke\u0027s reply and then appends them to","lastModifiedDate":"2023-09-10"},{"lineNumber":40,"author":{"gitId":"Sebtey"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-10"},{"lineNumber":41,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":42,"author":{"gitId":"Sebtey"},"content":" @FXML","lastModifiedDate":"2023-09-10"},{"lineNumber":43,"author":{"gitId":"Sebtey"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-10"},{"lineNumber":44,"author":{"gitId":"Sebtey"},"content":" //Retrieve user input","lastModifiedDate":"2023-09-10"},{"lineNumber":45,"author":{"gitId":"Sebtey"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-10"},{"lineNumber":46,"author":{"gitId":"Sebtey"},"content":" if (input.equals(\"\")) {","lastModifiedDate":"2023-09-10"},{"lineNumber":47,"author":{"gitId":"Sebtey"},"content":" //User enters an empty input","lastModifiedDate":"2023-09-10"},{"lineNumber":48,"author":{"gitId":"Sebtey"},"content":" return;","lastModifiedDate":"2023-09-10"},{"lineNumber":49,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":50,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":51,"author":{"gitId":"Sebtey"},"content":" //Parse and handle the user input and get a response from the sytem","lastModifiedDate":"2023-09-10"},{"lineNumber":52,"author":{"gitId":"Sebtey"},"content":" String response \u003d veda.getResponse(input);","lastModifiedDate":"2023-09-10"},{"lineNumber":53,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":54,"author":{"gitId":"Sebtey"},"content":" //Update frontend to reflect the new convo","lastModifiedDate":"2023-09-10"},{"lineNumber":55,"author":{"gitId":"Sebtey"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-10"},{"lineNumber":56,"author":{"gitId":"Sebtey"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-10"},{"lineNumber":57,"author":{"gitId":"Sebtey"},"content":" DialogBox.getVedaDialog(response, vedaImage)","lastModifiedDate":"2023-09-10"},{"lineNumber":58,"author":{"gitId":"Sebtey"},"content":" );","lastModifiedDate":"2023-09-10"},{"lineNumber":59,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":60,"author":{"gitId":"Sebtey"},"content":" //Clear the text field for the next input text","lastModifiedDate":"2023-09-10"},{"lineNumber":61,"author":{"gitId":"Sebtey"},"content":" userInput.clear();","lastModifiedDate":"2023-09-10"},{"lineNumber":62,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":63,"author":{"gitId":"Sebtey"},"content":" if (response.equals(\"Bye. All the best for your mission!\")) {","lastModifiedDate":"2023-09-10"},{"lineNumber":64,"author":{"gitId":"Sebtey"},"content":" Platform.exit();","lastModifiedDate":"2023-09-10"},{"lineNumber":65,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":66,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":67,"author":{"gitId":"Sebtey"},"content":"}","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"Sebtey":67}},{"path":"src/main/java/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sebtey"},"content":"import exceptions.ExcessiveArgumentException;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"Sebtey"},"content":"import exceptions.IncorrectInputException;","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"Sebtey"},"content":"import exceptions.NoDescriptionException;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"Sebtey"},"content":"import tasks.Deadline;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"Sebtey"},"content":"import tasks.Event;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"Sebtey"},"content":"import tasks.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"Sebtey"},"content":"import tasks.ToDo;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"Sebtey"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"Sebtey"},"content":" * Parser makes sense of the user command.","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"Sebtey"},"content":" * @author Sebastian Tay","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"Sebtey"},"content":"public class Parser {","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"Sebtey"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"Sebtey"},"content":" * Returns an int value denoting which action to be performed.","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"Sebtey"},"content":" * @param args is the input taken from the user.","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"Sebtey"},"content":" * @return non-negative int if args is valid input, else -1.","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"Sebtey"},"content":" public static int parse(String args) {","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"Sebtey"},"content":" args \u003d args.toLowerCase();","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"Sebtey"},"content":" if (args.equals(\"bye\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"Sebtey"},"content":" //User wishes to exit the program","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"Sebtey"},"content":" return 0;","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"Sebtey"},"content":" } else if (args.equals(\"list\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"Sebtey"},"content":" //User wishes to see his listed missions","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"Sebtey"},"content":" return 1;","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"Sebtey"},"content":" args \u003d args.split(\" \")[0];","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"Sebtey"},"content":" if (args.equals(\"mark\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"Sebtey"},"content":" //User wishes to mark task as done","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"Sebtey"},"content":" return 2;","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"Sebtey"},"content":" } else if (args.equals(\"unmark\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"Sebtey"},"content":" //User wishes to mark task as undone","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"Sebtey"},"content":" return 3;","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"Sebtey"},"content":" } else if (args.equals(\"delete\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"Sebtey"},"content":" //User wishes to delete a task","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"Sebtey"},"content":" return 4;","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"Sebtey"},"content":" } else if (args.equals(\"todo\") || args.equals(\"deadline\") || args.equals(\"event\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"Sebtey"},"content":" //User wishes to add a new task","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"Sebtey"},"content":" return 5;","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"Sebtey"},"content":" } else if (args.equals(\"find\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"Sebtey"},"content":" //User wishes to find a task by a keyword","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"Sebtey"},"content":" return 6;","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"Sebtey"},"content":" return -1;","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"Sebtey"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"Sebtey"},"content":" * Returns the index of the task given in the command line argument args.","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"Sebtey"},"content":" * @param args","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"Sebtey"},"content":" * @return an integer corresponding to the index of the task that we want.","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"Sebtey"},"content":" * @throws NumberFormatException","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"Sebtey"},"content":" * @throws NoDescriptionException when the user did not input any additional arguments.","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"Sebtey"},"content":" * @throws ExcessiveArgumentException when the user input more arguments than required.","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"Sebtey"},"content":" public static int getTargetIndex(String args)","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"Sebtey"},"content":" throws NumberFormatException, NoDescriptionException, ExcessiveArgumentException, IncorrectInputException {","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"Sebtey"},"content":" if (args.split(\" \").length \u003c 2) {","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"Sebtey"},"content":" throw new NoDescriptionException(\"There is no given task index.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"Sebtey"},"content":" } else if (args.split(\" \").length \u003e 2) {","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"Sebtey"},"content":" throw new ExcessiveArgumentException(\"There are too many arguments.\");","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"Sebtey"},"content":" int targetIndex \u003d Integer.parseInt(args.toLowerCase().split(\" \")[1]) - 1;","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"Sebtey"},"content":" if (targetIndex \u003c 0) {","lastModifiedDate":"2023-09-03"},{"lineNumber":78,"author":{"gitId":"Sebtey"},"content":" throw new IncorrectInputException(\"Index of task must be greater than 0.\");","lastModifiedDate":"2023-09-03"},{"lineNumber":79,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":80,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":81,"author":{"gitId":"Sebtey"},"content":" return targetIndex;","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"Sebtey"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"Sebtey"},"content":" * Returns a new task based on the command line argument args.","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"Sebtey"},"content":" * @param args","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"Sebtey"},"content":" * @return a Task from the given args.","lastModifiedDate":"2023-09-03"},{"lineNumber":89,"author":{"gitId":"Sebtey"},"content":" * @throws NoDescriptionException","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"Sebtey"},"content":" public static Task getTask(String args) throws NoDescriptionException {","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"Sebtey"},"content":" String type \u003d args.split(\" \")[0].toLowerCase();","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"Sebtey"},"content":" Task newTask \u003d null;","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"Sebtey"},"content":" String description \u003d \"\";","lastModifiedDate":"2023-09-02"},{"lineNumber":95,"author":{"gitId":"Sebtey"},"content":" String[] descriptions \u003d null; //For multiple arguments","lastModifiedDate":"2023-09-02"},{"lineNumber":96,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":97,"author":{"gitId":"Sebtey"},"content":" switch (type) {","lastModifiedDate":"2023-09-02"},{"lineNumber":98,"author":{"gitId":"Sebtey"},"content":" case \"todo\":","lastModifiedDate":"2023-09-02"},{"lineNumber":99,"author":{"gitId":"Sebtey"},"content":" description \u003d args.replaceFirst(\"todo \", \"\");","lastModifiedDate":"2023-09-02"},{"lineNumber":100,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":101,"author":{"gitId":"Sebtey"},"content":" if (description.toLowerCase() \u003d\u003d type) {","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"Sebtey"},"content":" throw new NoDescriptionException(\"\");","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":104,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":105,"author":{"gitId":"Sebtey"},"content":" newTask \u003d new ToDo(description);","lastModifiedDate":"2023-09-02"},{"lineNumber":106,"author":{"gitId":"Sebtey"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":107,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":108,"author":{"gitId":"Sebtey"},"content":" case \"deadline\":","lastModifiedDate":"2023-09-02"},{"lineNumber":109,"author":{"gitId":"Sebtey"},"content":" //Expected CL input: deadline \u003cDescription\u003e /by \u003cDue date in dd/MM/yyyy HHmm\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":110,"author":{"gitId":"Sebtey"},"content":" //TODO add error handling for no \"/by\" keyword","lastModifiedDate":"2023-09-02"},{"lineNumber":111,"author":{"gitId":"Sebtey"},"content":" if (description.toLowerCase() \u003d\u003d type) {","lastModifiedDate":"2023-09-02"},{"lineNumber":112,"author":{"gitId":"Sebtey"},"content":" throw new NoDescriptionException(","lastModifiedDate":"2023-09-03"},{"lineNumber":113,"author":{"gitId":"Sebtey"},"content":" \"Please input the right order: deadline \u003cDescription\u003e /by \u003cdue date\u003e\");","lastModifiedDate":"2023-09-03"},{"lineNumber":114,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":115,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":116,"author":{"gitId":"Sebtey"},"content":" description \u003d args.replaceFirst(\"deadline \", \"\");","lastModifiedDate":"2023-09-02"},{"lineNumber":117,"author":{"gitId":"Sebtey"},"content":" descriptions \u003d description.split(\" /by \");","lastModifiedDate":"2023-09-02"},{"lineNumber":118,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":119,"author":{"gitId":"Sebtey"},"content":" if (descriptions.length \u003c 2) {","lastModifiedDate":"2023-09-02"},{"lineNumber":120,"author":{"gitId":"Sebtey"},"content":" throw new IncorrectInputException(","lastModifiedDate":"2023-09-03"},{"lineNumber":121,"author":{"gitId":"Sebtey"},"content":" \"Please input the right order: deadline \u003cDescription\u003e /by \u003cdue date\u003e\");","lastModifiedDate":"2023-09-03"},{"lineNumber":122,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":123,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":124,"author":{"gitId":"Sebtey"},"content":" newTask \u003d new Deadline(descriptions[0], descriptions[1]);","lastModifiedDate":"2023-09-02"},{"lineNumber":125,"author":{"gitId":"Sebtey"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":126,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":127,"author":{"gitId":"Sebtey"},"content":" case \"event\":","lastModifiedDate":"2023-09-02"},{"lineNumber":128,"author":{"gitId":"Sebtey"},"content":" //Expected CL input: event \u003cDescription\u003e /from \u003cstart\u003e /to \u003cend\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":129,"author":{"gitId":"Sebtey"},"content":" if (description.toLowerCase() \u003d\u003d type) {","lastModifiedDate":"2023-09-02"},{"lineNumber":130,"author":{"gitId":"Sebtey"},"content":" throw new NoDescriptionException(\"\");","lastModifiedDate":"2023-09-02"},{"lineNumber":131,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":132,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":133,"author":{"gitId":"Sebtey"},"content":" description \u003d args.replaceFirst(\"event \", \"\"); //Remove type","lastModifiedDate":"2023-09-02"},{"lineNumber":134,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":135,"author":{"gitId":"Sebtey"},"content":" descriptions \u003d description.split(\" /from \"); //Split remaining args into description + (from and to)","lastModifiedDate":"2023-09-02"},{"lineNumber":136,"author":{"gitId":"Sebtey"},"content":" String from \u003d descriptions[1].split(\" /to \")[0]; //Split (from and to) into from and to","lastModifiedDate":"2023-09-02"},{"lineNumber":137,"author":{"gitId":"Sebtey"},"content":" String to \u003d descriptions[1].split(\" /to \")[1];","lastModifiedDate":"2023-09-02"},{"lineNumber":138,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":139,"author":{"gitId":"Sebtey"},"content":" newTask \u003d new Event(descriptions[0], from, to);","lastModifiedDate":"2023-09-02"},{"lineNumber":140,"author":{"gitId":"Sebtey"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":141,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":142,"author":{"gitId":"Sebtey"},"content":" default:","lastModifiedDate":"2023-09-02"},{"lineNumber":143,"author":{"gitId":"Sebtey"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":144,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":145,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":146,"author":{"gitId":"Sebtey"},"content":" return newTask;","lastModifiedDate":"2023-09-02"},{"lineNumber":147,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":148,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":149,"author":{"gitId":"Sebtey"},"content":" public static String getKeyword(String arg) {","lastModifiedDate":"2023-09-03"},{"lineNumber":150,"author":{"gitId":"Sebtey"},"content":" //Parse keyword","lastModifiedDate":"2023-09-03"},{"lineNumber":151,"author":{"gitId":"Sebtey"},"content":" final String keyword \u003d arg.toLowerCase().replaceFirst(\"find \", \"\");","lastModifiedDate":"2023-09-03"},{"lineNumber":152,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":153,"author":{"gitId":"Sebtey"},"content":" return keyword;","lastModifiedDate":"2023-09-03"},{"lineNumber":154,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":155,"author":{"gitId":"Sebtey"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"Sebtey":155}},{"path":"src/main/java/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sebtey"},"content":"import java.io.File;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Sebtey"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Sebtey"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Sebtey"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"Sebtey"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"Sebtey"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"Sebtey"},"content":"import tasks.Deadline;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"Sebtey"},"content":"import tasks.Event;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"Sebtey"},"content":"import tasks.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"Sebtey"},"content":"import tasks.ToDo;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"Sebtey"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"Sebtey"},"content":" * Storage deals with loading tasks from the file and saving tasks in the file.","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"Sebtey"},"content":" * @author Sebastian Tay","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"Sebtey"},"content":"public class Storage {","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"Sebtey"},"content":" private final String dir \u003d \"/VedaMissions\";","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"Sebtey"},"content":" private final String storagePath \u003d \"/VedaMissions/Missions.txt\";","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Sebtey"},"content":" private final File storageFile \u003d new File(storagePath);","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"Sebtey"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"Sebtey"},"content":" * Adds file into the directory specified.","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"Sebtey"},"content":" * @return whether file has been successfully added into the hard disk.","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"Sebtey"},"content":" public boolean addFile() {","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"Sebtey"},"content":" File directory \u003d new File(dir);","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"Sebtey"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"Sebtey"},"content":" if (directory.mkdir()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"Sebtey"},"content":" storageFile.createNewFile();","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"Sebtey"},"content":" return true;","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"Sebtey"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"An error occurred while trying to create the file.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"Sebtey"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"Sebtey"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"Sebtey"},"content":" * Indicates if the saved file is existing.","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"Sebtey"},"content":" * @return true if the saved file does exist, false otherwise.","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"Sebtey"},"content":" public boolean checkFileExists() {","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"Sebtey"},"content":" return storageFile.exists();","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"Sebtey"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"Sebtey"},"content":" * Returns the stored task list from the hard disk.","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"Sebtey"},"content":" * @return an ArrayList containing the tasks stored in the hard disk.","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"Sebtey"},"content":" * @throws FileNotFoundException If the storageFile is not located in its rightful directory.","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"Sebtey"},"content":" public ArrayList\u003cTask\u003e retrieveTasks() throws FileNotFoundException {","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"Sebtey"},"content":" ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"Sebtey"},"content":" Scanner sc \u003d new Scanner(storageFile);","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"Sebtey"},"content":" while (sc.hasNextLine()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"Sebtey"},"content":" final String task \u003d sc.nextLine(); //Each task is listed in a single line","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"Sebtey"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"Sebtey"},"content":" char type \u003d task.charAt(0);","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"Sebtey"},"content":" String[] descriptions \u003d task.split(\"::\"); //:: demarcates a different field","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"Sebtey"},"content":" switch (type) {","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"Sebtey"},"content":" case \u0027T\u0027:","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"Sebtey"},"content":" tasks.add(new ToDo(descriptions[2], descriptions[1].matches(\"1\")));","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"Sebtey"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"Sebtey"},"content":" case \u0027D\u0027:","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"Sebtey"},"content":" //Events.Deadline","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"Sebtey"},"content":" tasks.add(new Deadline(descriptions[2], descriptions[3], descriptions[1].matches(\"1\")));","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"Sebtey"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"Sebtey"},"content":" case \u0027E\u0027:","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"Sebtey"},"content":" //Events.Event","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"Sebtey"},"content":" tasks.add(new Event(descriptions[2], descriptions[3], descriptions[1].matches(\"1\")));","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"Sebtey"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"Sebtey"},"content":" default:","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"Wrong file format\");","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":91,"author":{"gitId":"Sebtey"},"content":" } catch (StringIndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":92,"author":{"gitId":"Sebtey"},"content":" //Formatting error in saved file","lastModifiedDate":"2023-09-01"},{"lineNumber":93,"author":{"gitId":"Sebtey"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-01"},{"lineNumber":94,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"File corrupted.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":95,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":96,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"Sebtey"},"content":" sc.close();","lastModifiedDate":"2023-09-01"},{"lineNumber":99,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":100,"author":{"gitId":"Sebtey"},"content":" return tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":103,"author":{"gitId":"Sebtey"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":104,"author":{"gitId":"Sebtey"},"content":" * Updates the saved data in the disk.","lastModifiedDate":"2023-09-01"},{"lineNumber":105,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":106,"author":{"gitId":"Sebtey"},"content":" * @param tasks is the current list of tasks the user has.","lastModifiedDate":"2023-09-01"},{"lineNumber":107,"author":{"gitId":"Sebtey"},"content":" * @param isAddingTask indicates whether the user is adding a new task or overwriting the file.","lastModifiedDate":"2023-09-01"},{"lineNumber":108,"author":{"gitId":"Sebtey"},"content":" * @return true if file is successfully updated.","lastModifiedDate":"2023-09-01"},{"lineNumber":109,"author":{"gitId":"Sebtey"},"content":" * @throws IOException When writer is called upon to write after being closed.","lastModifiedDate":"2023-09-01"},{"lineNumber":110,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":111,"author":{"gitId":"Sebtey"},"content":" public boolean updateData(ArrayList\u003cTask\u003e tasks, boolean isAddingTask) throws IOException {","lastModifiedDate":"2023-09-01"},{"lineNumber":112,"author":{"gitId":"Sebtey"},"content":" FileWriter writer \u003d null;","lastModifiedDate":"2023-09-01"},{"lineNumber":113,"author":{"gitId":"Sebtey"},"content":" boolean isNotFirstTask \u003d tasks.size() !\u003d 1;","lastModifiedDate":"2023-09-01"},{"lineNumber":114,"author":{"gitId":"Sebtey"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":115,"author":{"gitId":"Sebtey"},"content":" writer \u003d new FileWriter(storageFile, isAddingTask);","lastModifiedDate":"2023-09-01"},{"lineNumber":116,"author":{"gitId":"Sebtey"},"content":" String newData;","lastModifiedDate":"2023-09-01"},{"lineNumber":117,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":118,"author":{"gitId":"Sebtey"},"content":" if (isNotFirstTask \u0026\u0026 isAddingTask) {","lastModifiedDate":"2023-09-01"},{"lineNumber":119,"author":{"gitId":"Sebtey"},"content":" //Add a new line containing the latest task","lastModifiedDate":"2023-09-01"},{"lineNumber":120,"author":{"gitId":"Sebtey"},"content":" newData \u003d (System.lineSeparator() + tasks.get(tasks.size() - 1).convertToStorageForm());","lastModifiedDate":"2023-09-01"},{"lineNumber":121,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":122,"author":{"gitId":"Sebtey"},"content":" } else if (!isNotFirstTask \u0026\u0026 isAddingTask) {","lastModifiedDate":"2023-09-01"},{"lineNumber":123,"author":{"gitId":"Sebtey"},"content":" newData \u003d tasks.get(tasks.size() - 1).convertToStorageForm();","lastModifiedDate":"2023-09-01"},{"lineNumber":124,"author":{"gitId":"Sebtey"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":125,"author":{"gitId":"Sebtey"},"content":" //Overwrite the file","lastModifiedDate":"2023-09-01"},{"lineNumber":126,"author":{"gitId":"Sebtey"},"content":" newData \u003d \"\";","lastModifiedDate":"2023-09-01"},{"lineNumber":127,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":128,"author":{"gitId":"Sebtey"},"content":" //Iterate through tasks and convertToStorageForm","lastModifiedDate":"2023-09-01"},{"lineNumber":129,"author":{"gitId":"Sebtey"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-09-01"},{"lineNumber":130,"author":{"gitId":"Sebtey"},"content":" newData +\u003d tasks.get(i).convertToStorageForm();","lastModifiedDate":"2023-09-01"},{"lineNumber":131,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":132,"author":{"gitId":"Sebtey"},"content":" if (i !\u003d tasks.size() - 1) {","lastModifiedDate":"2023-09-01"},{"lineNumber":133,"author":{"gitId":"Sebtey"},"content":" newData +\u003d System.lineSeparator();","lastModifiedDate":"2023-09-01"},{"lineNumber":134,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":135,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":136,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":137,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":138,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":139,"author":{"gitId":"Sebtey"},"content":" writer.write(newData);","lastModifiedDate":"2023-09-01"},{"lineNumber":140,"author":{"gitId":"Sebtey"},"content":" writer.close();","lastModifiedDate":"2023-09-01"},{"lineNumber":141,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":142,"author":{"gitId":"Sebtey"},"content":" return true;","lastModifiedDate":"2023-09-01"},{"lineNumber":143,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":144,"author":{"gitId":"Sebtey"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":145,"author":{"gitId":"Sebtey"},"content":" writer.close();","lastModifiedDate":"2023-09-01"},{"lineNumber":146,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"Failed to update tasks on disk.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":147,"author":{"gitId":"Sebtey"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-01"},{"lineNumber":148,"author":{"gitId":"Sebtey"},"content":" return false;","lastModifiedDate":"2023-09-01"},{"lineNumber":149,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":150,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":151,"author":{"gitId":"Sebtey"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Sebtey":151}},{"path":"src/main/java/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sebtey"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"Sebtey"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Sebtey"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"Sebtey"},"content":"import java.util.List;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"Sebtey"},"content":"import java.util.stream.Collectors;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"Sebtey"},"content":"import tasks.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"Sebtey"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"Sebtey"},"content":" * TaskList encapsulates the task lists and operations related to the task lists.","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"Sebtey"},"content":" * @author Sebastian Tay","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"Sebtey"},"content":"public class TaskList {","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"Sebtey"},"content":" private ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e(100);","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"Sebtey"},"content":" private Storage storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"Sebtey"},"content":" public TaskList(Storage storage) {","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"Sebtey"},"content":" this.storage \u003d storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"Sebtey"},"content":" public ArrayList\u003cTask\u003e getTasks() {","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"Sebtey"},"content":" return this.tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"Sebtey"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"Sebtey"},"content":" * Retrieves the saved data from file.","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"Sebtey"},"content":" * @return true if successful. Otherwise, false.","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"Sebtey"},"content":" public boolean load() {","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"Sebtey"},"content":" if (storage.checkFileExists()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"Sebtey"},"content":" //File does exist","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"Sebtey"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"Sebtey"},"content":" tasks \u003d storage.retrieveTasks();","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"Sebtey"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"Unable to find file.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"Sebtey"},"content":" return false;","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"Sebtey"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"Sebtey"},"content":" //File does not exist","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"Sebtey"},"content":" storage.addFile();","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"Sebtey"},"content":" return true;","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"Sebtey"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"Sebtey"},"content":" * Deletes the task at the given index of the list.","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"Sebtey"},"content":" * @param taskIndex is null if encounter an exception.","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"Sebtey"},"content":" * @return Task that was deleted from the list.","lastModifiedDate":"2023-09-10"},{"lineNumber":54,"author":{"gitId":"Sebtey"},"content":" * @throws IndexOutOfBoundsException when taskIndex is invalid.","lastModifiedDate":"2023-09-10"},{"lineNumber":55,"author":{"gitId":"Sebtey"},"content":" * @throws IOException when the program is unable to write to the saved file.","lastModifiedDate":"2023-09-10"},{"lineNumber":56,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"Sebtey"},"content":" public Task deleteTask(int taskIndex) throws","lastModifiedDate":"2023-09-10"},{"lineNumber":58,"author":{"gitId":"Sebtey"},"content":" IndexOutOfBoundsException, IOException {","lastModifiedDate":"2023-09-10"},{"lineNumber":59,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":60,"author":{"gitId":"Sebtey"},"content":" Task task \u003d tasks.remove(taskIndex);","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"Sebtey"},"content":" storage.updateData(tasks, false);","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"Sebtey"},"content":" return task;","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"Sebtey"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"Sebtey"},"content":" * Adds the given task into the list of tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"Sebtey"},"content":" * @param task to be added.","lastModifiedDate":"2023-09-10"},{"lineNumber":70,"author":{"gitId":"Sebtey"},"content":" * @return String denoting status of the operation.","lastModifiedDate":"2023-09-10"},{"lineNumber":71,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"Sebtey"},"content":" public String addTask(Task task) {","lastModifiedDate":"2023-09-10"},{"lineNumber":73,"author":{"gitId":"Sebtey"},"content":" if (task !\u003d null \u0026\u0026 tasks.add(task)) {","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"Sebtey"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"Sebtey"},"content":" storage.updateData(tasks, true);","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"Sebtey"},"content":" return \"added in mission:\\n\" + task;","lastModifiedDate":"2023-09-10"},{"lineNumber":77,"author":{"gitId":"Sebtey"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"Sebtey"},"content":" return \"Error writing to file.\";","lastModifiedDate":"2023-09-10"},{"lineNumber":79,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"Sebtey"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"Sebtey"},"content":" return \"System is unable to accommodate the new mission\";","lastModifiedDate":"2023-09-10"},{"lineNumber":82,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"Sebtey"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"Sebtey"},"content":" * Marks the task at the given index as done.","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"Sebtey"},"content":" * @param taskIndex is the index of the task to be marked.","lastModifiedDate":"2023-09-03"},{"lineNumber":89,"author":{"gitId":"Sebtey"},"content":" * @return String indicating the status from this operation.","lastModifiedDate":"2023-09-10"},{"lineNumber":90,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"Sebtey"},"content":" public String markAsDone(int taskIndex) {","lastModifiedDate":"2023-09-10"},{"lineNumber":92,"author":{"gitId":"Sebtey"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"Sebtey"},"content":" Task task \u003d tasks.get(taskIndex);","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":95,"author":{"gitId":"Sebtey"},"content":" if (task.isDone()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":96,"author":{"gitId":"Sebtey"},"content":" //Events.Task already marked as done","lastModifiedDate":"2023-09-02"},{"lineNumber":97,"author":{"gitId":"Sebtey"},"content":" return \"Mission has been completed previously.\";","lastModifiedDate":"2023-09-10"},{"lineNumber":98,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":99,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":100,"author":{"gitId":"Sebtey"},"content":" task.updateCompletionStatus();","lastModifiedDate":"2023-09-02"},{"lineNumber":101,"author":{"gitId":"Sebtey"},"content":" storage.updateData(tasks, false);","lastModifiedDate":"2023-09-10"},{"lineNumber":102,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"Sebtey"},"content":" return \"Mission status updated! Mission completed successfully.\\n\" + task;","lastModifiedDate":"2023-09-10"},{"lineNumber":104,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":105,"author":{"gitId":"Sebtey"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":106,"author":{"gitId":"Sebtey"},"content":" return \"Invalid index! Please ensure you correctly key in your target index.\";","lastModifiedDate":"2023-09-10"},{"lineNumber":107,"author":{"gitId":"Sebtey"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":108,"author":{"gitId":"Sebtey"},"content":" return \"Unable to update file.\";","lastModifiedDate":"2023-09-10"},{"lineNumber":109,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":110,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":111,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":112,"author":{"gitId":"Sebtey"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":113,"author":{"gitId":"Sebtey"},"content":" * Marks the task at the given index as undone.","lastModifiedDate":"2023-09-02"},{"lineNumber":114,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":115,"author":{"gitId":"Sebtey"},"content":" * @param taskIndex is the index of the task to be unmarked.","lastModifiedDate":"2023-09-03"},{"lineNumber":116,"author":{"gitId":"Sebtey"},"content":" * @return String indicating the status from this operation.","lastModifiedDate":"2023-09-10"},{"lineNumber":117,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":118,"author":{"gitId":"Sebtey"},"content":" public String markAsUndone(int taskIndex) {","lastModifiedDate":"2023-09-10"},{"lineNumber":119,"author":{"gitId":"Sebtey"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":120,"author":{"gitId":"Sebtey"},"content":" Task task \u003d tasks.get(taskIndex);","lastModifiedDate":"2023-09-02"},{"lineNumber":121,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":122,"author":{"gitId":"Sebtey"},"content":" if (!(task.isDone())) {","lastModifiedDate":"2023-09-02"},{"lineNumber":123,"author":{"gitId":"Sebtey"},"content":" //task already marked as undone","lastModifiedDate":"2023-09-02"},{"lineNumber":124,"author":{"gitId":"Sebtey"},"content":" return \"Mission is already marked as undone!\";","lastModifiedDate":"2023-09-10"},{"lineNumber":125,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":126,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":127,"author":{"gitId":"Sebtey"},"content":" task.updateCompletionStatus();","lastModifiedDate":"2023-09-02"},{"lineNumber":128,"author":{"gitId":"Sebtey"},"content":" storage.updateData(tasks, false);","lastModifiedDate":"2023-09-10"},{"lineNumber":129,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":130,"author":{"gitId":"Sebtey"},"content":" return \"Mission status updated! Mission completion status reverted.\\n\" + task;","lastModifiedDate":"2023-09-10"},{"lineNumber":131,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":132,"author":{"gitId":"Sebtey"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":133,"author":{"gitId":"Sebtey"},"content":" return \"Invalid index! Please ensure you correctly key in your target index.\";","lastModifiedDate":"2023-09-10"},{"lineNumber":134,"author":{"gitId":"Sebtey"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":135,"author":{"gitId":"Sebtey"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-02"},{"lineNumber":136,"author":{"gitId":"Sebtey"},"content":" return \"Unable to update file.\";","lastModifiedDate":"2023-09-10"},{"lineNumber":137,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":138,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":139,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":140,"author":{"gitId":"Sebtey"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":141,"author":{"gitId":"Sebtey"},"content":" * Returns an ArrayList containing tasks that contains the keyword.","lastModifiedDate":"2023-09-03"},{"lineNumber":142,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":143,"author":{"gitId":"Sebtey"},"content":" * @param keyword is the word that we are searching for amongst the tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":144,"author":{"gitId":"Sebtey"},"content":" * @return an ArrayList of tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":145,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":146,"author":{"gitId":"Sebtey"},"content":" public ArrayList\u003cTask\u003e findKeyword(String keyword) {","lastModifiedDate":"2023-09-03"},{"lineNumber":147,"author":{"gitId":"Sebtey"},"content":" //Filter out the tasks without the keyword using Stream","lastModifiedDate":"2023-09-03"},{"lineNumber":148,"author":{"gitId":"Sebtey"},"content":" List\u003cTask\u003e results \u003d tasks","lastModifiedDate":"2023-09-03"},{"lineNumber":149,"author":{"gitId":"Sebtey"},"content":" .stream()","lastModifiedDate":"2023-09-03"},{"lineNumber":150,"author":{"gitId":"Sebtey"},"content":" .filter((task) -\u003e task.getDescription().toLowerCase().contains(keyword))","lastModifiedDate":"2023-09-03"},{"lineNumber":151,"author":{"gitId":"Sebtey"},"content":" .collect(Collectors.toList());","lastModifiedDate":"2023-09-03"},{"lineNumber":152,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":153,"author":{"gitId":"Sebtey"},"content":" return new ArrayList\u003c\u003e(results);","lastModifiedDate":"2023-09-03"},{"lineNumber":154,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":155,"author":{"gitId":"Sebtey"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"Sebtey":155}},{"path":"src/main/java/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sebtey"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Sebtey"},"content":"import tasks.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"Sebtey"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"Sebtey"},"content":" * Ui handles the interactions with user.","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"Sebtey"},"content":" * @author Sebastian Tay","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"Sebtey"},"content":"public class Ui {","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"Sebtey"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"Sebtey"},"content":" * Greets the user.","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"Sebtey"},"content":" * @return String containing the welcome message.","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"Sebtey"},"content":" public String getWelcomeMessage() {","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"Sebtey"},"content":" return \"Veda initialised. How may I help you?\";","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"Sebtey"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"Sebtey"},"content":" * Bids goodbye to the user.","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"Sebtey"},"content":" * @return String containing exit message","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"Sebtey"},"content":" public String getExitMessage() {","lastModifiedDate":"2023-09-10"},{"lineNumber":27,"author":{"gitId":"Sebtey"},"content":" return \"Bye. All the best for your mission!\";","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"Sebtey"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"Sebtey"},"content":" * Informs user that command is unrecognised.","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":33,"author":{"gitId":"Sebtey"},"content":" * @return String informing user that their input is not recognised.","lastModifiedDate":"2023-09-10"},{"lineNumber":34,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"Sebtey"},"content":" public String getUnrecognisedInputMessage() {","lastModifiedDate":"2023-09-10"},{"lineNumber":36,"author":{"gitId":"Sebtey"},"content":" return \"Unrecognised command.\";","lastModifiedDate":"2023-09-10"},{"lineNumber":37,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"Sebtey"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"Sebtey"},"content":" * List out the missions in tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"Sebtey"},"content":" * @param tasks contains the missions to be listed.","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"Sebtey"},"content":" * @return a String containing the list of missions.","lastModifiedDate":"2023-09-10"},{"lineNumber":45,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"Sebtey"},"content":" public String getListOfMissions(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-09-10"},{"lineNumber":47,"author":{"gitId":"Sebtey"},"content":" String list \u003d \"Missions: \\n\";","lastModifiedDate":"2023-09-10"},{"lineNumber":48,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"Sebtey"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-09-10"},{"lineNumber":50,"author":{"gitId":"Sebtey"},"content":" Task task \u003d tasks.get(i);","lastModifiedDate":"2023-09-10"},{"lineNumber":51,"author":{"gitId":"Sebtey"},"content":" list +\u003d ((tasks.indexOf(task) + 1) + \".\" + task + \"\\n\");","lastModifiedDate":"2023-09-10"},{"lineNumber":52,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":53,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"Sebtey"},"content":" return list;","lastModifiedDate":"2023-09-10"},{"lineNumber":55,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"Sebtey"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"Sebtey"},"content":" * List out the missions in tasks with the message at the top.","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"Sebtey"},"content":" * @param tasks contains the missions to be listed.","lastModifiedDate":"2023-09-10"},{"lineNumber":61,"author":{"gitId":"Sebtey"},"content":" * @param message stating what keyword is being searched for.","lastModifiedDate":"2023-09-10"},{"lineNumber":62,"author":{"gitId":"Sebtey"},"content":" * @return String containing the list of missions","lastModifiedDate":"2023-09-10"},{"lineNumber":63,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"Sebtey"},"content":" public String getListOfMissions(ArrayList\u003cTask\u003e tasks, String message) {","lastModifiedDate":"2023-09-10"},{"lineNumber":65,"author":{"gitId":"Sebtey"},"content":" String list \u003d message + \"\\n\";","lastModifiedDate":"2023-09-10"},{"lineNumber":66,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":67,"author":{"gitId":"Sebtey"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-09-10"},{"lineNumber":68,"author":{"gitId":"Sebtey"},"content":" Task task \u003d tasks.get(i);","lastModifiedDate":"2023-09-10"},{"lineNumber":69,"author":{"gitId":"Sebtey"},"content":" list +\u003d ((tasks.indexOf(task) + 1) + \".\" + task + \"\\n\");","lastModifiedDate":"2023-09-10"},{"lineNumber":70,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":71,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"Sebtey"},"content":" return list;","lastModifiedDate":"2023-09-10"},{"lineNumber":73,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"Sebtey"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"Sebtey":75}},{"path":"src/main/java/Veda.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sebtey"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-10"},{"lineNumber":2,"author":{"gitId":"Sebtey"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"Sebtey"},"content":"import exceptions.IncorrectInputException;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"Sebtey"},"content":"import exceptions.NoDescriptionException;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"Sebtey"},"content":"import tasks.Task;","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"Sebtey"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"Sebtey"},"content":" * Veda is the main class for the chatbot application \"Veda\".","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"Sebtey"},"content":" * @author Sebastian Tay","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"Sebtey"},"content":"public class Veda {","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"Sebtey"},"content":" private static final Storage storage \u003d new Storage();","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"Sebtey"},"content":" private static final TaskList tasks \u003d new TaskList(storage);","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"Sebtey"},"content":" private static final Ui ui \u003d new Ui();","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"Sebtey"},"content":" private static boolean hasNotRetrieveTask \u003d true;","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"Sebtey"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":21,"author":{"gitId":"Sebtey"},"content":" * Initialises the logic and cached data of the system.","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"Sebtey"},"content":" * @return String containing a welcome message for the user.","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"Sebtey"},"content":" public String initialise() {","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"Sebtey"},"content":" tasks.load();","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"Sebtey"},"content":" hasNotRetrieveTask \u003d false;","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"Sebtey"},"content":" return ui.getWelcomeMessage();","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":30,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":31,"author":{"gitId":"Sebtey"},"content":" public String getResponse(String input) {","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"Sebtey"},"content":" if (hasNotRetrieveTask) {","lastModifiedDate":"2023-09-10"},{"lineNumber":33,"author":{"gitId":"Sebtey"},"content":" initialise();","lastModifiedDate":"2023-09-10"},{"lineNumber":34,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":35,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":36,"author":{"gitId":"Sebtey"},"content":" int method \u003d Parser.parse(input); //Get which commands to perform based on user\u0027s input","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"Sebtey"},"content":" switch (method) {","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"Sebtey"},"content":" case -1:","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"Sebtey"},"content":" //Unrecognised input","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"Sebtey"},"content":" return ui.getUnrecognisedInputMessage();","lastModifiedDate":"2023-09-10"},{"lineNumber":42,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":43,"author":{"gitId":"Sebtey"},"content":" case 0:","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"Sebtey"},"content":" //User wishes to exit the program","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"Sebtey"},"content":" return ui.getExitMessage();","lastModifiedDate":"2023-09-10"},{"lineNumber":46,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":47,"author":{"gitId":"Sebtey"},"content":" case 1:","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"Sebtey"},"content":" //User wishes to see listed missions","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"Sebtey"},"content":" return ui.getListOfMissions(tasks.getTasks());","lastModifiedDate":"2023-09-10"},{"lineNumber":50,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":51,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":52,"author":{"gitId":"Sebtey"},"content":" case 2:","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"Sebtey"},"content":" //User wishes to mark task as done","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"Sebtey"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"Sebtey"},"content":" return tasks.markAsDone(Parser.getTargetIndex(input));","lastModifiedDate":"2023-09-10"},{"lineNumber":56,"author":{"gitId":"Sebtey"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"Sebtey"},"content":" return \"Invalid index! Please ensure you correctly key in your target index.\";","lastModifiedDate":"2023-09-10"},{"lineNumber":58,"author":{"gitId":"Sebtey"},"content":" } catch (NoDescriptionException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"Sebtey"},"content":" return e.toString();","lastModifiedDate":"2023-09-10"},{"lineNumber":60,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":61,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":62,"author":{"gitId":"Sebtey"},"content":" case 3:","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"Sebtey"},"content":" //User wishes to mark task as undone","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"Sebtey"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"Sebtey"},"content":" return tasks.markAsUndone(Parser.getTargetIndex(input));","lastModifiedDate":"2023-09-10"},{"lineNumber":66,"author":{"gitId":"Sebtey"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"Sebtey"},"content":" return \"Invalid index! Please ensure you correctly key in your target index.\";","lastModifiedDate":"2023-09-10"},{"lineNumber":68,"author":{"gitId":"Sebtey"},"content":" } catch (NoDescriptionException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"Sebtey"},"content":" return e.getMessage();","lastModifiedDate":"2023-09-10"},{"lineNumber":70,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":71,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":72,"author":{"gitId":"Sebtey"},"content":" case 4:","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"Sebtey"},"content":" //User wishes to delete a task","lastModifiedDate":"2023-08-25"},{"lineNumber":74,"author":{"gitId":"Sebtey"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"Sebtey"},"content":" Task task \u003d tasks.deleteTask(Parser.getTargetIndex(input));","lastModifiedDate":"2023-09-10"},{"lineNumber":76,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":77,"author":{"gitId":"Sebtey"},"content":" return \"Noted. I have removed the following mission:\\n\" + task;","lastModifiedDate":"2023-09-10"},{"lineNumber":78,"author":{"gitId":"Sebtey"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"Sebtey"},"content":" return \"Invalid index! Please ensure you correctly key in your target index.\";","lastModifiedDate":"2023-09-10"},{"lineNumber":80,"author":{"gitId":"Sebtey"},"content":" } catch (NoDescriptionException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"Sebtey"},"content":" return e.getMessage();","lastModifiedDate":"2023-09-10"},{"lineNumber":82,"author":{"gitId":"Sebtey"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-10"},{"lineNumber":83,"author":{"gitId":"Sebtey"},"content":" return \"Invalid index! Please ensure you correctly key in your target index.\";","lastModifiedDate":"2023-09-10"},{"lineNumber":84,"author":{"gitId":"Sebtey"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-10"},{"lineNumber":85,"author":{"gitId":"Sebtey"},"content":" return \"Unable to update file.\";","lastModifiedDate":"2023-09-10"},{"lineNumber":86,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":87,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":88,"author":{"gitId":"Sebtey"},"content":" case 5:","lastModifiedDate":"2023-09-02"},{"lineNumber":89,"author":{"gitId":"Sebtey"},"content":" //User wishes to add a new task","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"Sebtey"},"content":" try {","lastModifiedDate":"2023-08-25"},{"lineNumber":91,"author":{"gitId":"Sebtey"},"content":" return tasks.addTask(Parser.getTask(input));","lastModifiedDate":"2023-09-10"},{"lineNumber":92,"author":{"gitId":"Sebtey"},"content":" } catch (IncorrectInputException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":93,"author":{"gitId":"Sebtey"},"content":" return e.toString();","lastModifiedDate":"2023-09-10"},{"lineNumber":94,"author":{"gitId":"Sebtey"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":95,"author":{"gitId":"Sebtey"},"content":" return \"Ensure your deadline is of the format {dd/MM/yyyy HHmm}\";","lastModifiedDate":"2023-09-10"},{"lineNumber":96,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":97,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":98,"author":{"gitId":"Sebtey"},"content":" case 6:","lastModifiedDate":"2023-09-03"},{"lineNumber":99,"author":{"gitId":"Sebtey"},"content":" //User wishes to find a task by a keyword","lastModifiedDate":"2023-09-03"},{"lineNumber":100,"author":{"gitId":"Sebtey"},"content":" final String keyword \u003d Parser.getKeyword(input);","lastModifiedDate":"2023-09-03"},{"lineNumber":101,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":102,"author":{"gitId":"Sebtey"},"content":" return ui.getListOfMissions(","lastModifiedDate":"2023-09-10"},{"lineNumber":103,"author":{"gitId":"Sebtey"},"content":" tasks.findKeyword(keyword),","lastModifiedDate":"2023-09-03"},{"lineNumber":104,"author":{"gitId":"Sebtey"},"content":" \"Retrieved the following missions containing the keyword \\\"\" + keyword + \"\\\":\"","lastModifiedDate":"2023-09-03"},{"lineNumber":105,"author":{"gitId":"Sebtey"},"content":" );","lastModifiedDate":"2023-09-03"},{"lineNumber":106,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":107,"author":{"gitId":"Sebtey"},"content":" default:","lastModifiedDate":"2023-09-03"},{"lineNumber":108,"author":{"gitId":"Sebtey"},"content":" break;","lastModifiedDate":"2023-09-03"},{"lineNumber":109,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":110,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":111,"author":{"gitId":"Sebtey"},"content":" return \"\";","lastModifiedDate":"2023-09-10"},{"lineNumber":112,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":113,"author":{"gitId":"Sebtey"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"Sebtey":113}},{"path":"src/main/java/exceptions/ExcessiveArgumentException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sebtey"},"content":"package exceptions;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"Sebtey"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"Sebtey"},"content":" * ExcessiveArgumentException is a form of IncorrectInputException that is thrown when the user provides more arguments","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"Sebtey"},"content":" * than the command requires.","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"Sebtey"},"content":" * @author Sebastian Tay","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"Sebtey"},"content":"public class ExcessiveArgumentException extends IncorrectInputException {","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"Sebtey"},"content":" public ExcessiveArgumentException(String message) {","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"Sebtey"},"content":" super(message);","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"Sebtey"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"Sebtey"},"content":" public String toString() {","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"Sebtey"},"content":" return super.getMessage();","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"Sebtey"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"Sebtey":18}},{"path":"src/main/java/exceptions/IncorrectInputException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sebtey"},"content":"package exceptions;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Sebtey"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"Sebtey"},"content":" * IncorrectInputException is a form of RuntimeException that is thrown when the user provide an invalid input.","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"Sebtey"},"content":" * @author Sebastian Tay","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"Sebtey"},"content":"public class IncorrectInputException extends RuntimeException {","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Sebtey"},"content":" public IncorrectInputException(String message) {","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Sebtey"},"content":" super(message);","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Sebtey"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Sebtey"},"content":" public String toString() {","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"Sebtey"},"content":" return \"Please ensure that you key in your arguments correctly.\";","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"Sebtey"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"Sebtey":17}},{"path":"src/main/java/exceptions/NoDescriptionException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sebtey"},"content":"package exceptions;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Sebtey"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"Sebtey"},"content":" * NoDescriptionException is a form of IncorrectInputException that is thrown when the user omits certain description","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"Sebtey"},"content":" * in their input.","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"Sebtey"},"content":" * @author Sebastian Tay","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"Sebtey"},"content":"public class NoDescriptionException extends IncorrectInputException {","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Sebtey"},"content":" public NoDescriptionException(String message) {","lastModifiedDate":"2023-08-25"},{"lineNumber":11,"author":{"gitId":"Sebtey"},"content":" super(message);","lastModifiedDate":"2023-08-25"},{"lineNumber":12,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":13,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":14,"author":{"gitId":"Sebtey"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":15,"author":{"gitId":"Sebtey"},"content":" public String toString() {","lastModifiedDate":"2023-08-25"},{"lineNumber":16,"author":{"gitId":"Sebtey"},"content":" return super.getMessage();","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":18,"author":{"gitId":"Sebtey"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"Sebtey":18}},{"path":"src/main/java/tasks/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sebtey"},"content":"package tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Sebtey"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Sebtey"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Sebtey"},"content":"/**","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"Sebtey"},"content":" * Tasks that need to be done before a specific date/time.","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"Sebtey"},"content":" * @author Sebastian Tay","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":11,"author":{"gitId":"Sebtey"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-25"},{"lineNumber":12,"author":{"gitId":"Sebtey"},"content":" static final String SYMBOL \u003d \"D\";","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"Sebtey"},"content":" protected String by;","lastModifiedDate":"2023-08-25"},{"lineNumber":14,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":15,"author":{"gitId":"Sebtey"},"content":" protected LocalDateTime deadline;","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"Sebtey"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"Sebtey"},"content":" * Constructor for deadline task that is used for user inputs.","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"Sebtey"},"content":" * @param description is the description of the task.","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"Sebtey"},"content":" * @param by deadline for the task.","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"Sebtey"},"content":" public Deadline(String description, String by) {","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"Sebtey"},"content":" super(description);","lastModifiedDate":"2023-08-25"},{"lineNumber":25,"author":{"gitId":"Sebtey"},"content":" this.by \u003d by;","lastModifiedDate":"2023-08-25"},{"lineNumber":26,"author":{"gitId":"Sebtey"},"content":" this.deadline \u003d LocalDateTime.parse(by, DateTimeFormatter.ofPattern(\"dd/MM/yyyy HHmm\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":28,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":29,"author":{"gitId":"Sebtey"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"Sebtey"},"content":" * Constructor for deadline task that is used when retrieving tasks from the saved file.","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"Sebtey"},"content":" * @param description is the description of the task.","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"Sebtey"},"content":" * @param by deadline for the task.","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"Sebtey"},"content":" * @param isDone indicates whether the task has been completed.","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"Sebtey"},"content":" public Deadline(String description, String by, boolean isDone) {","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"Sebtey"},"content":" super(description, isDone);","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"Sebtey"},"content":" this.by \u003d by;","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"Sebtey"},"content":" this.deadline \u003d LocalDateTime.parse(by, DateTimeFormatter.ofPattern(\"dd/MM/yyyy HHmm\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":43,"author":{"gitId":"Sebtey"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":44,"author":{"gitId":"Sebtey"},"content":" public String getType() {","lastModifiedDate":"2023-08-25"},{"lineNumber":45,"author":{"gitId":"Sebtey"},"content":" return SYMBOL;","lastModifiedDate":"2023-08-25"},{"lineNumber":46,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":47,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":48,"author":{"gitId":"Sebtey"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":49,"author":{"gitId":"Sebtey"},"content":" public String toString() {","lastModifiedDate":"2023-08-25"},{"lineNumber":50,"author":{"gitId":"Sebtey"},"content":" return \"[D]\"","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"Sebtey"},"content":" + super.toString()","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"Sebtey"},"content":" + \"(by: \" + this.deadline.format(DateTimeFormatter.ofPattern(\"dd MMMM yyyy HHmm\")) + \"H)\";","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":54,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"Sebtey"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"Sebtey"},"content":" public String convertToStorageForm() {","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"Sebtey"},"content":" final String separator \u003d \"::\";","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"Sebtey"},"content":" final String status \u003d isDone() ? \"1\" : \"0\";","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"Sebtey"},"content":" //D::0::return book::June 6th","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"Sebtey"},"content":" return SYMBOL + separator + status + separator + getDescription() + separator + this.by;","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"Sebtey"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"Sebtey":63}},{"path":"src/main/java/tasks/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sebtey"},"content":"package tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Sebtey"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Sebtey"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Sebtey"},"content":"/**","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"Sebtey"},"content":" * Tasks that start at a specific date/time and ends at a specific date/time.","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"Sebtey"},"content":" * @author Sebastian Tay","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":11,"author":{"gitId":"Sebtey"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-25"},{"lineNumber":12,"author":{"gitId":"Sebtey"},"content":" static final String SYMBOL \u003d \"E\";","lastModifiedDate":"2023-08-25"},{"lineNumber":13,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":14,"author":{"gitId":"Sebtey"},"content":" protected String from;","lastModifiedDate":"2023-08-25"},{"lineNumber":15,"author":{"gitId":"Sebtey"},"content":" protected LocalDateTime start;","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"Sebtey"},"content":" protected String to;","lastModifiedDate":"2023-08-25"},{"lineNumber":17,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":18,"author":{"gitId":"Sebtey"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"Sebtey"},"content":" * Constructor for event class, using user input.","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"Sebtey"},"content":" * @param description is the description of the task.","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"Sebtey"},"content":" * @param from is the starting time of the event.","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"Sebtey"},"content":" * @param to is the ending time of the event.","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"Sebtey"},"content":" public Event(String description, String from, String to) {","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"Sebtey"},"content":" super(description);","lastModifiedDate":"2023-08-25"},{"lineNumber":27,"author":{"gitId":"Sebtey"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-25"},{"lineNumber":28,"author":{"gitId":"Sebtey"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-25"},{"lineNumber":29,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"Sebtey"},"content":" this.start \u003d LocalDateTime.parse(from, DateTimeFormatter.ofPattern(\"dd/MM/yyyy HHmm\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":33,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":34,"author":{"gitId":"Sebtey"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"Sebtey"},"content":" * Constructor for event class, using the data from the saved file.","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"Sebtey"},"content":" * @param description is the description of the task.","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"Sebtey"},"content":" * @param period is the string containing the start and end time of the event.","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"Sebtey"},"content":" * @param isDone denotes whether the task has been completed.","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"Sebtey"},"content":" public Event(String description, String period, boolean isDone) {","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"Sebtey"},"content":" super(description, isDone);","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"Sebtey"},"content":" this.from \u003d period.split(\"-\")[0];","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"Sebtey"},"content":" this.to \u003d period.split(\"-\")[1];","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"Sebtey"},"content":" this.start \u003d LocalDateTime.parse(from, DateTimeFormatter.ofPattern(\"dd/MM/yyyy HHmm\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"Sebtey"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":50,"author":{"gitId":"Sebtey"},"content":" public String getType() {","lastModifiedDate":"2023-08-25"},{"lineNumber":51,"author":{"gitId":"Sebtey"},"content":" return SYMBOL;","lastModifiedDate":"2023-08-25"},{"lineNumber":52,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":53,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":54,"author":{"gitId":"Sebtey"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":55,"author":{"gitId":"Sebtey"},"content":" public String toString() {","lastModifiedDate":"2023-08-25"},{"lineNumber":56,"author":{"gitId":"Sebtey"},"content":" return \"[E][\" + getStatusIcon() + \"] \"","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"Sebtey"},"content":" + super.getDescription()","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"Sebtey"},"content":" + \"(from: \"","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"Sebtey"},"content":" + this.start.format(DateTimeFormatter.ofPattern(\"dd MMMM yyyy HHmm\"))","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"Sebtey"},"content":" + \"H to: \"","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"Sebtey"},"content":" + this.to","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"Sebtey"},"content":" + \"H)\";","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"Sebtey"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"Sebtey"},"content":" public String convertToStorageForm() {","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"Sebtey"},"content":" final String separator \u003d \"::\";","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"Sebtey"},"content":" final String status \u003d isDone() ? \"1\" : \"0\";","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"Sebtey"},"content":" final String period \u003d this.from + \"-\" + this.to;","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"Sebtey"},"content":" //E::0::project meeting::Aug 6th 2pm-4pm","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"Sebtey"},"content":" return SYMBOL + separator + status + separator + getDescription() + separator + period;","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":74,"author":{"gitId":"Sebtey"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"Sebtey":74}},{"path":"src/main/java/tasks/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sebtey"},"content":"package tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Sebtey"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"Sebtey"},"content":" * Task is the abstract class that encapsulates the common methods related to other Task classes.","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"Sebtey"},"content":" * @author Sebastian Tay","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"Sebtey"},"content":"public abstract class Task {","lastModifiedDate":"2023-08-25"},{"lineNumber":9,"author":{"gitId":"Sebtey"},"content":" private boolean isDone;","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"Sebtey"},"content":" private String description;","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"Sebtey"},"content":" Task(String description) {","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"Sebtey"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"Sebtey"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"Sebtey"},"content":" Task(String description, boolean isDone) {","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"Sebtey"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"Sebtey"},"content":" this.isDone \u003d isDone;","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"Sebtey"},"content":" public String getDescription() {","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Sebtey"},"content":" return this.description;","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"Sebtey"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"Sebtey"},"content":" * Changes the current completion status of the task to true or false if it is currently false or true respectively.","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"Sebtey"},"content":" public void updateCompletionStatus() {","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"Sebtey"},"content":" //If done, change to not done or false","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"Sebtey"},"content":" //Else, change to done or true","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"Sebtey"},"content":" this.isDone \u003d !(this.isDone);","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"Sebtey"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"Sebtey"},"content":" //Events.Task is marked as done with an \"X\"","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"Sebtey"},"content":" return isDone","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"Sebtey"},"content":" ? \"X\"","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"Sebtey"},"content":" : \" \";","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":42,"author":{"gitId":"Sebtey"},"content":" public boolean isDone() {","lastModifiedDate":"2023-08-25"},{"lineNumber":43,"author":{"gitId":"Sebtey"},"content":" return this.isDone;","lastModifiedDate":"2023-08-25"},{"lineNumber":44,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":45,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":46,"author":{"gitId":"Sebtey"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":47,"author":{"gitId":"Sebtey"},"content":" public String toString() {","lastModifiedDate":"2023-08-25"},{"lineNumber":48,"author":{"gitId":"Sebtey"},"content":" return \"[\" + getStatusIcon() + \"] \" + getDescription();","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":50,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"Sebtey"},"content":" public abstract String getType();","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"Sebtey"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"Sebtey"},"content":" * Converts the task into a String containing all its information that will be stored in the saved file.","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"Sebtey"},"content":" * @return a String that represents the task instance in the saved file.","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"Sebtey"},"content":" public abstract String convertToStorageForm();","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"Sebtey"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Sebtey":59}},{"path":"src/main/java/tasks/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sebtey"},"content":"package tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Sebtey"},"content":"/**","lastModifiedDate":"2023-08-25"},{"lineNumber":4,"author":{"gitId":"Sebtey"},"content":" * ToDos are tasks that have no date/time attached to them.","lastModifiedDate":"2023-08-25"},{"lineNumber":5,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"Sebtey"},"content":" * @author Sebastian Tay","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"Sebtey"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-25"},{"lineNumber":9,"author":{"gitId":"Sebtey"},"content":" static final String SYMBOL \u003d \"T\";","lastModifiedDate":"2023-08-25"},{"lineNumber":10,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":11,"author":{"gitId":"Sebtey"},"content":" public ToDo(String description) {","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"Sebtey"},"content":" super(description);","lastModifiedDate":"2023-08-25"},{"lineNumber":13,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":14,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":15,"author":{"gitId":"Sebtey"},"content":" public ToDo(String description, boolean isDone) {","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"Sebtey"},"content":" super(description, isDone);","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"Sebtey"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":20,"author":{"gitId":"Sebtey"},"content":" public String getType() {","lastModifiedDate":"2023-08-25"},{"lineNumber":21,"author":{"gitId":"Sebtey"},"content":" return SYMBOL;","lastModifiedDate":"2023-08-25"},{"lineNumber":22,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":23,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":24,"author":{"gitId":"Sebtey"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":25,"author":{"gitId":"Sebtey"},"content":" public String toString() {","lastModifiedDate":"2023-08-25"},{"lineNumber":26,"author":{"gitId":"Sebtey"},"content":" return \"[T][\" + getStatusIcon() + \"] \" + super.getDescription();","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"Sebtey"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"Sebtey"},"content":" public String convertToStorageForm() {","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"Sebtey"},"content":" final String separator \u003d \"::\";","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"Sebtey"},"content":" final String status \u003d isDone() ? \"1\" : \"0\";","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"Sebtey"},"content":" return SYMBOL + separator + status + separator + getDescription();","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":36,"author":{"gitId":"Sebtey"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"Sebtey":36}},{"path":"src/main/java/vedaGui/VedaGui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sebtey"},"content":"//import javafx.application.Application;","lastModifiedDate":"2023-09-10"},{"lineNumber":2,"author":{"gitId":"Sebtey"},"content":"//import javafx.fxml.FXML;","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"Sebtey"},"content":"//import javafx.scene.Scene;","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"Sebtey"},"content":"//import javafx.scene.control.Button;","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"Sebtey"},"content":"//import javafx.scene.control.Label;","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"Sebtey"},"content":"//import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"Sebtey"},"content":"//import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"Sebtey"},"content":"//import javafx.scene.image.Image;","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"Sebtey"},"content":"//import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"Sebtey"},"content":"//import javafx.scene.layout.Region;","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"Sebtey"},"content":"//import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"Sebtey"},"content":"//import javafx.stage.Stage;","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"Sebtey"},"content":"//","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"Sebtey"},"content":"//public class VedaGui extends Application {","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"Sebtey"},"content":"// @FXML","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"Sebtey"},"content":"// private ScrollPane scrollPane;","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"Sebtey"},"content":"// @FXML","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"Sebtey"},"content":"// private VBox dialogContainer;","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"Sebtey"},"content":"// @FXML","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"Sebtey"},"content":"// private TextField userInput;","lastModifiedDate":"2023-09-10"},{"lineNumber":21,"author":{"gitId":"Sebtey"},"content":"// @FXML","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"Sebtey"},"content":"// private Button sendButton;","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"Sebtey"},"content":"// @FXML","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"Sebtey"},"content":"// private Scene scene;","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"Sebtey"},"content":"//","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"Sebtey"},"content":"// private Image Veda \u003d new Image(this.getClass().getResourceAsStream(\"/images/Veda.png\"));","lastModifiedDate":"2023-09-10"},{"lineNumber":27,"author":{"gitId":"Sebtey"},"content":"// private Image user \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaUser.png\"));","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"Sebtey"},"content":"//","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"Sebtey"},"content":"// @Override","lastModifiedDate":"2023-09-10"},{"lineNumber":30,"author":{"gitId":"Sebtey"},"content":"// public void start(Stage primaryStage) {","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"Sebtey"},"content":"// //Sets up","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"Sebtey"},"content":"// setUpNodes();","lastModifiedDate":"2023-09-10"},{"lineNumber":33,"author":{"gitId":"Sebtey"},"content":"// Region mainLayout \u003d setUpLayout();","lastModifiedDate":"2023-09-10"},{"lineNumber":34,"author":{"gitId":"Sebtey"},"content":"// setUpStage(primaryStage);","lastModifiedDate":"2023-09-10"},{"lineNumber":35,"author":{"gitId":"Sebtey"},"content":"// insertFunctionality();","lastModifiedDate":"2023-09-10"},{"lineNumber":36,"author":{"gitId":"Sebtey"},"content":"//","lastModifiedDate":"2023-09-10"},{"lineNumber":37,"author":{"gitId":"Sebtey"},"content":"// this.scene \u003d new Scene(mainLayout);","lastModifiedDate":"2023-09-10"},{"lineNumber":38,"author":{"gitId":"Sebtey"},"content":"// primaryStage.setScene(scene); //Setting the stage to show scene","lastModifiedDate":"2023-09-10"},{"lineNumber":39,"author":{"gitId":"Sebtey"},"content":"//","lastModifiedDate":"2023-09-10"},{"lineNumber":40,"author":{"gitId":"Sebtey"},"content":"// primaryStage.show(); //Render the stage","lastModifiedDate":"2023-09-10"},{"lineNumber":41,"author":{"gitId":"Sebtey"},"content":"// }","lastModifiedDate":"2023-09-10"},{"lineNumber":42,"author":{"gitId":"Sebtey"},"content":"//","lastModifiedDate":"2023-09-10"},{"lineNumber":43,"author":{"gitId":"Sebtey"},"content":"// @FXML","lastModifiedDate":"2023-09-10"},{"lineNumber":44,"author":{"gitId":"Sebtey"},"content":"// /**","lastModifiedDate":"2023-09-10"},{"lineNumber":45,"author":{"gitId":"Sebtey"},"content":"// * Iteration 1:","lastModifiedDate":"2023-09-10"},{"lineNumber":46,"author":{"gitId":"Sebtey"},"content":"// * Creates a label with the specified text and adds it to the dialog container.","lastModifiedDate":"2023-09-10"},{"lineNumber":47,"author":{"gitId":"Sebtey"},"content":"// *","lastModifiedDate":"2023-09-10"},{"lineNumber":48,"author":{"gitId":"Sebtey"},"content":"// * @param text String containing text to add.","lastModifiedDate":"2023-09-10"},{"lineNumber":49,"author":{"gitId":"Sebtey"},"content":"// * @return a label with the specified text that has word wrap enabled.","lastModifiedDate":"2023-09-10"},{"lineNumber":50,"author":{"gitId":"Sebtey"},"content":"// */","lastModifiedDate":"2023-09-10"},{"lineNumber":51,"author":{"gitId":"Sebtey"},"content":"// private Label getDialogLabel(String text) {","lastModifiedDate":"2023-09-10"},{"lineNumber":52,"author":{"gitId":"Sebtey"},"content":"// Label textToAdd \u003d new Label(text);","lastModifiedDate":"2023-09-10"},{"lineNumber":53,"author":{"gitId":"Sebtey"},"content":"// textToAdd.setWrapText(true);","lastModifiedDate":"2023-09-10"},{"lineNumber":54,"author":{"gitId":"Sebtey"},"content":"//","lastModifiedDate":"2023-09-10"},{"lineNumber":55,"author":{"gitId":"Sebtey"},"content":"// return textToAdd;","lastModifiedDate":"2023-09-10"},{"lineNumber":56,"author":{"gitId":"Sebtey"},"content":"// }","lastModifiedDate":"2023-09-10"},{"lineNumber":57,"author":{"gitId":"Sebtey"},"content":"//","lastModifiedDate":"2023-09-10"},{"lineNumber":58,"author":{"gitId":"Sebtey"},"content":"// @FXML","lastModifiedDate":"2023-09-10"},{"lineNumber":59,"author":{"gitId":"Sebtey"},"content":"// /**","lastModifiedDate":"2023-09-10"},{"lineNumber":60,"author":{"gitId":"Sebtey"},"content":"// * Adds functionality to handle user input","lastModifiedDate":"2023-09-10"},{"lineNumber":61,"author":{"gitId":"Sebtey"},"content":"// */","lastModifiedDate":"2023-09-10"},{"lineNumber":62,"author":{"gitId":"Sebtey"},"content":"// private void insertFunctionality() {","lastModifiedDate":"2023-09-10"},{"lineNumber":63,"author":{"gitId":"Sebtey"},"content":"// sendButton.setOnMouseClicked((event) -\u003e {","lastModifiedDate":"2023-09-10"},{"lineNumber":64,"author":{"gitId":"Sebtey"},"content":"// handleUserInput();","lastModifiedDate":"2023-09-10"},{"lineNumber":65,"author":{"gitId":"Sebtey"},"content":"// });","lastModifiedDate":"2023-09-10"},{"lineNumber":66,"author":{"gitId":"Sebtey"},"content":"//","lastModifiedDate":"2023-09-10"},{"lineNumber":67,"author":{"gitId":"Sebtey"},"content":"// userInput.setOnAction((event) -\u003e {","lastModifiedDate":"2023-09-10"},{"lineNumber":68,"author":{"gitId":"Sebtey"},"content":"// handleUserInput();","lastModifiedDate":"2023-09-10"},{"lineNumber":69,"author":{"gitId":"Sebtey"},"content":"// });","lastModifiedDate":"2023-09-10"},{"lineNumber":70,"author":{"gitId":"Sebtey"},"content":"//","lastModifiedDate":"2023-09-10"},{"lineNumber":71,"author":{"gitId":"Sebtey"},"content":"// //Scroll down to the end every time dialogContainer\u0027s height changes","lastModifiedDate":"2023-09-10"},{"lineNumber":72,"author":{"gitId":"Sebtey"},"content":"// dialogContainer.heightProperty().addListener((observable -\u003e scrollPane.setVvalue(1.0)));","lastModifiedDate":"2023-09-10"},{"lineNumber":73,"author":{"gitId":"Sebtey"},"content":"// }","lastModifiedDate":"2023-09-10"},{"lineNumber":74,"author":{"gitId":"Sebtey"},"content":"//","lastModifiedDate":"2023-09-10"},{"lineNumber":75,"author":{"gitId":"Sebtey"},"content":"// @FXML","lastModifiedDate":"2023-09-10"},{"lineNumber":76,"author":{"gitId":"Sebtey"},"content":"// /**","lastModifiedDate":"2023-09-10"},{"lineNumber":77,"author":{"gitId":"Sebtey"},"content":"// * Iteration 2 and 3:","lastModifiedDate":"2023-09-10"},{"lineNumber":78,"author":{"gitId":"Sebtey"},"content":"// * Creates two dialog boxes, one echoing the user input and the other containing Veda\u0027s reply and then","lastModifiedDate":"2023-09-10"},{"lineNumber":79,"author":{"gitId":"Sebtey"},"content":"// * appends them to the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-10"},{"lineNumber":80,"author":{"gitId":"Sebtey"},"content":"// */","lastModifiedDate":"2023-09-10"},{"lineNumber":81,"author":{"gitId":"Sebtey"},"content":"// private void handleUserInput() {","lastModifiedDate":"2023-09-10"},{"lineNumber":82,"author":{"gitId":"Sebtey"},"content":"// //TODO link to Veda logic","lastModifiedDate":"2023-09-10"},{"lineNumber":83,"author":{"gitId":"Sebtey"},"content":"// if (userInput.getText().equals(\"\")) {","lastModifiedDate":"2023-09-10"},{"lineNumber":84,"author":{"gitId":"Sebtey"},"content":"// return;","lastModifiedDate":"2023-09-10"},{"lineNumber":85,"author":{"gitId":"Sebtey"},"content":"// }","lastModifiedDate":"2023-09-10"},{"lineNumber":86,"author":{"gitId":"Sebtey"},"content":"//","lastModifiedDate":"2023-09-10"},{"lineNumber":87,"author":{"gitId":"Sebtey"},"content":"// //Create Label nodes to show the enter-ed texts","lastModifiedDate":"2023-09-10"},{"lineNumber":88,"author":{"gitId":"Sebtey"},"content":"// Label userText \u003d getDialogLabel(userInput.getText());","lastModifiedDate":"2023-09-10"},{"lineNumber":89,"author":{"gitId":"Sebtey"},"content":"// Label vedaText \u003d getDialogLabel(getResponse(userInput.getText()));","lastModifiedDate":"2023-09-10"},{"lineNumber":90,"author":{"gitId":"Sebtey"},"content":"//","lastModifiedDate":"2023-09-10"},{"lineNumber":91,"author":{"gitId":"Sebtey"},"content":"// //Update dialogContainer","lastModifiedDate":"2023-09-10"},{"lineNumber":92,"author":{"gitId":"Sebtey"},"content":"// dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-10"},{"lineNumber":93,"author":{"gitId":"Sebtey"},"content":"//// DialogBox.getUserDialog(userText, new ImageView(this.user)),","lastModifiedDate":"2023-09-10"},{"lineNumber":94,"author":{"gitId":"Sebtey"},"content":"//// DialogBox.getDukeDialog(vedaText, new ImageView(this.Veda))","lastModifiedDate":"2023-09-10"},{"lineNumber":95,"author":{"gitId":"Sebtey"},"content":"// DialogBox.getUserDialog(userInput.getText(), this.user),","lastModifiedDate":"2023-09-10"},{"lineNumber":96,"author":{"gitId":"Sebtey"},"content":"// DialogBox.getDukeDialog(getResponse(userInput.getText()), this.Veda)","lastModifiedDate":"2023-09-10"},{"lineNumber":97,"author":{"gitId":"Sebtey"},"content":"// );","lastModifiedDate":"2023-09-10"},{"lineNumber":98,"author":{"gitId":"Sebtey"},"content":"//","lastModifiedDate":"2023-09-10"},{"lineNumber":99,"author":{"gitId":"Sebtey"},"content":"// //Clear the userInput for next input","lastModifiedDate":"2023-09-10"},{"lineNumber":100,"author":{"gitId":"Sebtey"},"content":"// userInput.clear();","lastModifiedDate":"2023-09-10"},{"lineNumber":101,"author":{"gitId":"Sebtey"},"content":"// }","lastModifiedDate":"2023-09-10"},{"lineNumber":102,"author":{"gitId":"Sebtey"},"content":"//","lastModifiedDate":"2023-09-10"},{"lineNumber":103,"author":{"gitId":"Sebtey"},"content":"// /**","lastModifiedDate":"2023-09-10"},{"lineNumber":104,"author":{"gitId":"Sebtey"},"content":"// * Sets up and format the different nodes that form the GUI","lastModifiedDate":"2023-09-10"},{"lineNumber":105,"author":{"gitId":"Sebtey"},"content":"// */","lastModifiedDate":"2023-09-10"},{"lineNumber":106,"author":{"gitId":"Sebtey"},"content":"// private void setUpNodes() {","lastModifiedDate":"2023-09-10"},{"lineNumber":107,"author":{"gitId":"Sebtey"},"content":"// this.scrollPane \u003d new ScrollPane();","lastModifiedDate":"2023-09-10"},{"lineNumber":108,"author":{"gitId":"Sebtey"},"content":"// this.dialogContainer \u003d new VBox();","lastModifiedDate":"2023-09-10"},{"lineNumber":109,"author":{"gitId":"Sebtey"},"content":"// this.scrollPane.setContent(dialogContainer);","lastModifiedDate":"2023-09-10"},{"lineNumber":110,"author":{"gitId":"Sebtey"},"content":"//","lastModifiedDate":"2023-09-10"},{"lineNumber":111,"author":{"gitId":"Sebtey"},"content":"// this.userInput \u003d new TextField();","lastModifiedDate":"2023-09-10"},{"lineNumber":112,"author":{"gitId":"Sebtey"},"content":"// sendButton \u003d new Button(\"Send\");","lastModifiedDate":"2023-09-10"},{"lineNumber":113,"author":{"gitId":"Sebtey"},"content":"//","lastModifiedDate":"2023-09-10"},{"lineNumber":114,"author":{"gitId":"Sebtey"},"content":"// scrollPane.setPrefSize(385, 535);","lastModifiedDate":"2023-09-10"},{"lineNumber":115,"author":{"gitId":"Sebtey"},"content":"// scrollPane.setHbarPolicy(ScrollPane.ScrollBarPolicy.NEVER);","lastModifiedDate":"2023-09-10"},{"lineNumber":116,"author":{"gitId":"Sebtey"},"content":"// scrollPane.setVbarPolicy(ScrollPane.ScrollBarPolicy.ALWAYS);","lastModifiedDate":"2023-09-10"},{"lineNumber":117,"author":{"gitId":"Sebtey"},"content":"//","lastModifiedDate":"2023-09-10"},{"lineNumber":118,"author":{"gitId":"Sebtey"},"content":"// scrollPane.setVvalue(1.0);","lastModifiedDate":"2023-09-10"},{"lineNumber":119,"author":{"gitId":"Sebtey"},"content":"// scrollPane.setFitToWidth(true);","lastModifiedDate":"2023-09-10"},{"lineNumber":120,"author":{"gitId":"Sebtey"},"content":"//","lastModifiedDate":"2023-09-10"},{"lineNumber":121,"author":{"gitId":"Sebtey"},"content":"// dialogContainer.setPrefHeight(Region.USE_COMPUTED_SIZE);","lastModifiedDate":"2023-09-10"},{"lineNumber":122,"author":{"gitId":"Sebtey"},"content":"//","lastModifiedDate":"2023-09-10"},{"lineNumber":123,"author":{"gitId":"Sebtey"},"content":"// userInput.setPrefWidth(325.0);","lastModifiedDate":"2023-09-10"},{"lineNumber":124,"author":{"gitId":"Sebtey"},"content":"//","lastModifiedDate":"2023-09-10"},{"lineNumber":125,"author":{"gitId":"Sebtey"},"content":"// sendButton.setPrefWidth(55.0);","lastModifiedDate":"2023-09-10"},{"lineNumber":126,"author":{"gitId":"Sebtey"},"content":"// }","lastModifiedDate":"2023-09-10"},{"lineNumber":127,"author":{"gitId":"Sebtey"},"content":"//","lastModifiedDate":"2023-09-10"},{"lineNumber":128,"author":{"gitId":"Sebtey"},"content":"// /**","lastModifiedDate":"2023-09-10"},{"lineNumber":129,"author":{"gitId":"Sebtey"},"content":"// * Prepares the main layout for us to use in our scene.","lastModifiedDate":"2023-09-10"},{"lineNumber":130,"author":{"gitId":"Sebtey"},"content":"// * @return a Region that composes the different nodes of our GUI.","lastModifiedDate":"2023-09-10"},{"lineNumber":131,"author":{"gitId":"Sebtey"},"content":"// */","lastModifiedDate":"2023-09-10"},{"lineNumber":132,"author":{"gitId":"Sebtey"},"content":"// private Region setUpLayout() {","lastModifiedDate":"2023-09-10"},{"lineNumber":133,"author":{"gitId":"Sebtey"},"content":"// AnchorPane mainLayout \u003d new AnchorPane();","lastModifiedDate":"2023-09-10"},{"lineNumber":134,"author":{"gitId":"Sebtey"},"content":"// mainLayout.getChildren().addAll(scrollPane, userInput, sendButton);","lastModifiedDate":"2023-09-10"},{"lineNumber":135,"author":{"gitId":"Sebtey"},"content":"//","lastModifiedDate":"2023-09-10"},{"lineNumber":136,"author":{"gitId":"Sebtey"},"content":"// mainLayout.setPrefSize(400.0, 600.0);","lastModifiedDate":"2023-09-10"},{"lineNumber":137,"author":{"gitId":"Sebtey"},"content":"//","lastModifiedDate":"2023-09-10"},{"lineNumber":138,"author":{"gitId":"Sebtey"},"content":"// AnchorPane.setTopAnchor(scrollPane, 1.0);","lastModifiedDate":"2023-09-10"},{"lineNumber":139,"author":{"gitId":"Sebtey"},"content":"//","lastModifiedDate":"2023-09-10"},{"lineNumber":140,"author":{"gitId":"Sebtey"},"content":"// AnchorPane.setBottomAnchor(sendButton,1.0);","lastModifiedDate":"2023-09-10"},{"lineNumber":141,"author":{"gitId":"Sebtey"},"content":"// AnchorPane.setRightAnchor(sendButton, 1.0);","lastModifiedDate":"2023-09-10"},{"lineNumber":142,"author":{"gitId":"Sebtey"},"content":"//","lastModifiedDate":"2023-09-10"},{"lineNumber":143,"author":{"gitId":"Sebtey"},"content":"// AnchorPane.setLeftAnchor(userInput, 1.0);","lastModifiedDate":"2023-09-10"},{"lineNumber":144,"author":{"gitId":"Sebtey"},"content":"// AnchorPane.setBottomAnchor(userInput, 1.0);","lastModifiedDate":"2023-09-10"},{"lineNumber":145,"author":{"gitId":"Sebtey"},"content":"//","lastModifiedDate":"2023-09-10"},{"lineNumber":146,"author":{"gitId":"Sebtey"},"content":"// return mainLayout;","lastModifiedDate":"2023-09-10"},{"lineNumber":147,"author":{"gitId":"Sebtey"},"content":"// }","lastModifiedDate":"2023-09-10"},{"lineNumber":148,"author":{"gitId":"Sebtey"},"content":"//}","lastModifiedDate":"2023-09-10"},{"lineNumber":149,"author":{"gitId":"Sebtey"},"content":"//","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"Sebtey":149}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"Sebtey"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":2,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"Sebtey"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"Sebtey"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"Sebtey"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"Sebtey"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"Sebtey"},"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/20.0.1\" xmlns:fx\u003d\"http://javafx.com/fxml/1\"\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"Sebtey"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"Sebtey"},"content":" \u003cLabel fx:id\u003d\"dialog\" text\u003d\"Label\" wrapText\u003d\"true\"\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"Sebtey"},"content":" \u003cHBox.margin\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"Sebtey"},"content":" \u003cInsets bottom\u003d\"5.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"5.0\" /\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"Sebtey"},"content":" \u003c/HBox.margin\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"Sebtey"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"Sebtey"},"content":" \u003cInsets bottom\u003d\"5.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"5.0\" /\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"Sebtey"},"content":" \u003c/padding\u003e\u003c/Label\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"Sebtey"},"content":" \u003cImageView fx:id\u003d\"displayPicture\" fitHeight\u003d\"100.0\" fitWidth\u003d\"100.0\" pickOnBounds\u003d\"true\" preserveRatio\u003d\"true\"\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"Sebtey"},"content":" \u003cHBox.margin\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"Sebtey"},"content":" \u003cInsets bottom\u003d\"5.0\" top\u003d\"5.0\" /\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"Sebtey"},"content":" \u003c/HBox.margin\u003e\u003c/ImageView\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":21,"author":{"gitId":"Sebtey"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"Sebtey"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"Sebtey"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"Sebtey"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"Sebtey"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"Sebtey":25}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"Sebtey"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":2,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"Sebtey"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"Sebtey"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"Sebtey"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"Sebtey"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"Sebtey"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"Sebtey"},"content":"\u003cAnchorPane id\u003d\"Veda\" 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\"MainWindow\"\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"Sebtey"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"Sebtey"},"content":" \u003cTextField fx:id\u003d\"userInput\" layoutY\u003d\"558.0\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"41.0\" prefWidth\u003d\"325.0\" promptText\u003d\"User input\" AnchorPane.bottomAnchor\u003d\"1.0\" /\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"Sebtey"},"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\"75.0\" text\u003d\"Send\" /\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"Sebtey"},"content":" \u003cScrollPane fx:id\u003d\"scrollPane\" fitToWidth\u003d\"true\" hbarPolicy\u003d\"NEVER\" hvalue\u003d\"1.0\" prefHeight\u003d\"557.0\" prefWidth\u003d\"400.0\" vbarPolicy\u003d\"ALWAYS\" vvalue\u003d\"1.0\"\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"Sebtey"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"Sebtey"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"552.0\" prefWidth\u003d\"388.0\" /\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"Sebtey"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"Sebtey"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"Sebtey"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"Sebtey"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"Sebtey":19}},{"path":"src/test/java/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sebtey"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"Sebtey"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"Sebtey"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"Sebtey"},"content":"import exceptions.ExcessiveArgumentException;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"Sebtey"},"content":"import exceptions.IncorrectInputException;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"Sebtey"},"content":"import exceptions.NoDescriptionException;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"Sebtey"},"content":"import tasks.Deadline;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"Sebtey"},"content":"import tasks.Event;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"Sebtey"},"content":"import tasks.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"Sebtey"},"content":"import tasks.ToDo;","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"Sebtey"},"content":"public class ParserTest {","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"Sebtey"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"Sebtey"},"content":" public void parse_emptyInput_negativeOne() {","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"Sebtey"},"content":" int methodType \u003d Parser.parse(\"\");","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"Sebtey"},"content":" assertEquals(-1, methodType);","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"Sebtey"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"Sebtey"},"content":" public void parse_exit_one() {","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"Sebtey"},"content":" int methodType \u003d Parser.parse(\"bye\");","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"Sebtey"},"content":" assertEquals(0, methodType);","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"Sebtey"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"Sebtey"},"content":" public void parse_statementWithExitFront_returnNegativeOne() {","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"Sebtey"},"content":" int methodType \u003d Parser.parse(\"bye world\");","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"Sebtey"},"content":" assertEquals(-1, methodType);","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"Sebtey"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"Sebtey"},"content":" public void parse_statementWithExitMiddle_returnNegativeOne() {","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"Sebtey"},"content":" int methodType \u003d Parser.parse(\"good bye cruel world\");","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"Sebtey"},"content":" assertEquals(-1, methodType);","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"Sebtey"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"Sebtey"},"content":" public void parse_listCall_returnOne() {","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"Sebtey"},"content":" int methodType \u003d Parser.parse(\"list\");","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"Sebtey"},"content":" assertEquals(1, methodType);","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"Sebtey"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"Sebtey"},"content":" public void parse_instantiateNewTask_fiveFiveFive() {","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"Sebtey"},"content":" int methodTypeOne \u003d Parser.parse(\"todo hello world\");","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"Sebtey"},"content":" int methodTypeTwo \u003d Parser.parse(\"deadline see you /by 08/12/2023 0800\");","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"Sebtey"},"content":" int methodTypeThree \u003d Parser.parse(\"event bye world /from 08/12/2023 0900 /to 0900\");","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"Sebtey"},"content":" String actualOutput \u003d String.valueOf(methodTypeOne)","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"Sebtey"},"content":" + String.valueOf(methodTypeTwo)","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"Sebtey"},"content":" + String.valueOf(methodTypeThree);","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"Sebtey"},"content":" assertEquals(\"555\", actualOutput);","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"Sebtey"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"Sebtey"},"content":" public void getTargetIndex_excessiveArguments_throwExcessiveArgumentException() {","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"Sebtey"},"content":" assertThrows(ExcessiveArgumentException.class, () -\u003e Parser.getTargetIndex(\"mark 1 remove\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"Sebtey"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"Sebtey"},"content":" public void getTargetIndex_stringArgumentIndex_throwNumberFormatException() {","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"Sebtey"},"content":" assertThrows(NumberFormatException.class, () -\u003e Parser.getTargetIndex(\"mark 1t\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"Sebtey"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"Sebtey"},"content":" public void getTargetIndex_noArgumentIndex_throwNoDescriptionException() {","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"Sebtey"},"content":" assertThrows(NoDescriptionException.class, () -\u003e Parser.getTargetIndex(\"mark \"));","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":78,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":79,"author":{"gitId":"Sebtey"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":80,"author":{"gitId":"Sebtey"},"content":" public void getTargetIndex_invalidArgumentIndex_throwIncorrectInputException() {","lastModifiedDate":"2023-09-03"},{"lineNumber":81,"author":{"gitId":"Sebtey"},"content":" assertThrows(IncorrectInputException.class, () -\u003e Parser.getTargetIndex(\"mark -1\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":82,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":83,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":84,"author":{"gitId":"Sebtey"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":85,"author":{"gitId":"Sebtey"},"content":" public void getTargetIndex_correctArgumentIndex_correctIndex() {","lastModifiedDate":"2023-09-03"},{"lineNumber":86,"author":{"gitId":"Sebtey"},"content":" int index \u003d Parser.getTargetIndex(\"mark 4\");","lastModifiedDate":"2023-09-03"},{"lineNumber":87,"author":{"gitId":"Sebtey"},"content":" // argument index is offset by +1 from actual index of task for user-friendliness","lastModifiedDate":"2023-09-03"},{"lineNumber":88,"author":{"gitId":"Sebtey"},"content":" assertEquals(3, index);","lastModifiedDate":"2023-09-03"},{"lineNumber":89,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":90,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":91,"author":{"gitId":"Sebtey"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":92,"author":{"gitId":"Sebtey"},"content":" public void getTask_todoTaskArgument_todoTask() {","lastModifiedDate":"2023-09-03"},{"lineNumber":93,"author":{"gitId":"Sebtey"},"content":" Task task \u003d Parser.getTask(\"todo test mission\");","lastModifiedDate":"2023-09-03"},{"lineNumber":94,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":95,"author":{"gitId":"Sebtey"},"content":" //We test if they are equal if they return the same storage form","lastModifiedDate":"2023-09-03"},{"lineNumber":96,"author":{"gitId":"Sebtey"},"content":" assertEquals(new ToDo(\"test mission\").convertToStorageForm(), task.convertToStorageForm());","lastModifiedDate":"2023-09-03"},{"lineNumber":97,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":98,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":99,"author":{"gitId":"Sebtey"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":100,"author":{"gitId":"Sebtey"},"content":" public void getTask_deadlineTaskArgument_deadlineTask() {","lastModifiedDate":"2023-09-03"},{"lineNumber":101,"author":{"gitId":"Sebtey"},"content":" final String arg \u003d \"deadline test mission /by 08/08/2023 0800\";","lastModifiedDate":"2023-09-05"},{"lineNumber":102,"author":{"gitId":"Sebtey"},"content":" final Task actualTask \u003d Parser.getTask(arg);","lastModifiedDate":"2023-09-05"},{"lineNumber":103,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":104,"author":{"gitId":"Sebtey"},"content":" //We test if they are equal if they return the same storage form","lastModifiedDate":"2023-09-03"},{"lineNumber":105,"author":{"gitId":"Sebtey"},"content":" assertEquals(new Deadline(","lastModifiedDate":"2023-09-05"},{"lineNumber":106,"author":{"gitId":"Sebtey"},"content":" \"test mission\",","lastModifiedDate":"2023-09-05"},{"lineNumber":107,"author":{"gitId":"Sebtey"},"content":" \"08/08/2023 0800\").convertToStorageForm(),","lastModifiedDate":"2023-09-05"},{"lineNumber":108,"author":{"gitId":"Sebtey"},"content":" actualTask.convertToStorageForm());","lastModifiedDate":"2023-09-05"},{"lineNumber":109,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":110,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":111,"author":{"gitId":"Sebtey"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":112,"author":{"gitId":"Sebtey"},"content":" public void getTask_eventTaskArgument_eventTask() {","lastModifiedDate":"2023-09-03"},{"lineNumber":113,"author":{"gitId":"Sebtey"},"content":" final String arg \u003d \"event test mission /from 08/08/2023 0800 /to 0900\";","lastModifiedDate":"2023-09-05"},{"lineNumber":114,"author":{"gitId":"Sebtey"},"content":" final Task actualTask \u003d Parser.getTask(arg);","lastModifiedDate":"2023-09-05"},{"lineNumber":115,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":116,"author":{"gitId":"Sebtey"},"content":" //We test if they are equal if they return the same storage form","lastModifiedDate":"2023-09-03"},{"lineNumber":117,"author":{"gitId":"Sebtey"},"content":" assertEquals(new Event(","lastModifiedDate":"2023-09-05"},{"lineNumber":118,"author":{"gitId":"Sebtey"},"content":" \"test mission\",","lastModifiedDate":"2023-09-05"},{"lineNumber":119,"author":{"gitId":"Sebtey"},"content":" \"08/08/2023 0800\",","lastModifiedDate":"2023-09-05"},{"lineNumber":120,"author":{"gitId":"Sebtey"},"content":" \"0900\")","lastModifiedDate":"2023-09-05"},{"lineNumber":121,"author":{"gitId":"Sebtey"},"content":" .convertToStorageForm(), actualTask.convertToStorageForm());","lastModifiedDate":"2023-09-05"},{"lineNumber":122,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":123,"author":{"gitId":"Sebtey"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"Sebtey":123}},{"path":"src/test/java/TaskListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sebtey"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"Sebtey"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"Sebtey"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"Sebtey"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"Sebtey"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"Sebtey"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"Sebtey"},"content":"import tasks.Deadline;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"Sebtey"},"content":"import tasks.Event;","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"Sebtey"},"content":"import tasks.Task;","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"Sebtey"},"content":"import tasks.ToDo;","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"Sebtey"},"content":"public class TaskListTest {","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"Sebtey"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"Sebtey"},"content":" * StorageStub is used to emulate ./Storage to allow unit testing of TaskList.","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"Sebtey"},"content":" private class StorageStub extends Storage {","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"Sebtey"},"content":" private String[] data;","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"Sebtey"},"content":" protected StorageStub() {","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"Sebtey"},"content":" super();","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"Sebtey"},"content":" data \u003d new String[] {","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"Sebtey"},"content":" \"T::0::sing a song\",","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"Sebtey"},"content":" \"D::0::hi world ::05/09/2023 2359\",","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"Sebtey"},"content":" \"E::0::apocalypse ::03/09/2023 0100-03/09/2023 1200\"","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"Sebtey"},"content":" };","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"Sebtey"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"Sebtey"},"content":" public boolean checkFileExists() {","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"Sebtey"},"content":" return true;","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"Sebtey"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"Sebtey"},"content":" public ArrayList\u003cTask\u003e retrieveTasks() throws FileNotFoundException {","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"Sebtey"},"content":" ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"Sebtey"},"content":" for (int i \u003d 0; i \u003c data.length; i++) {","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"Sebtey"},"content":" char type \u003d data[i].charAt(0);","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"Sebtey"},"content":" String[] descriptions \u003d data[i].split(\"::\"); //:: demarcates a different field","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"Sebtey"},"content":" switch (type) {","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"Sebtey"},"content":" case \u0027T\u0027:","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"Sebtey"},"content":" tasks.add(new ToDo(descriptions[2], descriptions[1].matches(\"1\")));","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"Sebtey"},"content":" break;","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"Sebtey"},"content":" case \u0027D\u0027:","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"Sebtey"},"content":" //Events.Deadline","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"Sebtey"},"content":" tasks.add(new Deadline(descriptions[2], descriptions[3], descriptions[1].matches(\"1\")));","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"Sebtey"},"content":" break;","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"Sebtey"},"content":" case \u0027E\u0027:","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"Sebtey"},"content":" //Events.Event","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"Sebtey"},"content":" tasks.add(new Event(descriptions[2], descriptions[3], descriptions[1].matches(\"1\")));","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"Sebtey"},"content":" break;","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"Sebtey"},"content":" default:","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"Wrong file format\");","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"Sebtey"},"content":" return tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"Sebtey"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"Sebtey"},"content":" public boolean updateData(ArrayList\u003cTask\u003e tasks, boolean isAddingTask) throws IOException {","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"Sebtey"},"content":" return true;","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"Sebtey"},"content":" private TaskList tasks \u003d new TaskList(new StorageStub());","lastModifiedDate":"2023-09-05"},{"lineNumber":73,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"Sebtey"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"Sebtey"},"content":" public void load_readFromStorageStub_true() {","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"Sebtey"},"content":" assertEquals(true, tasks.load());","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":78,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":79,"author":{"gitId":"Sebtey"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":80,"author":{"gitId":"Sebtey"},"content":" public void deleteTask_invalidIndex_returnNull() {","lastModifiedDate":"2023-09-05"},{"lineNumber":81,"author":{"gitId":"Sebtey"},"content":" //tasks have only 3 tasks","lastModifiedDate":"2023-09-03"},{"lineNumber":82,"author":{"gitId":"Sebtey"},"content":" assertThrows(IndexOutOfBoundsException.class, () -\u003e tasks.deleteTask(5));","lastModifiedDate":"2023-09-10"},{"lineNumber":83,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":84,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":85,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":86,"author":{"gitId":"Sebtey"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":87,"author":{"gitId":"Sebtey"},"content":" public void deleteTask_validIndex_returnTodoTask() {","lastModifiedDate":"2023-09-05"},{"lineNumber":88,"author":{"gitId":"Sebtey"},"content":" //task at index 0 is a todotask with description \"sing a song\"","lastModifiedDate":"2023-09-03"},{"lineNumber":89,"author":{"gitId":"Sebtey"},"content":" try {","lastModifiedDate":"2023-09-10"},{"lineNumber":90,"author":{"gitId":"Sebtey"},"content":" tasks.load();","lastModifiedDate":"2023-09-03"},{"lineNumber":91,"author":{"gitId":"Sebtey"},"content":" final Task deletedTask \u003d tasks.deleteTask(0);","lastModifiedDate":"2023-09-05"},{"lineNumber":92,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":93,"author":{"gitId":"Sebtey"},"content":" assertEquals(new ToDo(\"sing a song\").convertToStorageForm(), deletedTask.convertToStorageForm());","lastModifiedDate":"2023-09-05"},{"lineNumber":94,"author":{"gitId":"Sebtey"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-10"},{"lineNumber":95,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"Error\");","lastModifiedDate":"2023-09-10"},{"lineNumber":96,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":97,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":98,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":99,"author":{"gitId":"Sebtey"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":100,"author":{"gitId":"Sebtey"},"content":" public void deleteTask_postDeletionLength_two() {","lastModifiedDate":"2023-09-03"},{"lineNumber":101,"author":{"gitId":"Sebtey"},"content":" tasks.load();","lastModifiedDate":"2023-09-03"},{"lineNumber":102,"author":{"gitId":"Sebtey"},"content":" Task expected \u003d tasks.getTasks().get(0);","lastModifiedDate":"2023-09-10"},{"lineNumber":103,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":104,"author":{"gitId":"Sebtey"},"content":" try {","lastModifiedDate":"2023-09-10"},{"lineNumber":105,"author":{"gitId":"Sebtey"},"content":" final Task actual \u003d tasks.deleteTask(0);","lastModifiedDate":"2023-09-10"},{"lineNumber":106,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":107,"author":{"gitId":"Sebtey"},"content":" assertEquals(expected, actual);","lastModifiedDate":"2023-09-10"},{"lineNumber":108,"author":{"gitId":"Sebtey"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-10"},{"lineNumber":109,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"Error\");","lastModifiedDate":"2023-09-10"},{"lineNumber":110,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":111,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":112,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":113,"author":{"gitId":"Sebtey"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":114,"author":{"gitId":"Sebtey"},"content":" public void markAsDone_taskIsNotDone_true() {","lastModifiedDate":"2023-09-03"},{"lineNumber":115,"author":{"gitId":"Sebtey"},"content":" tasks.load();","lastModifiedDate":"2023-09-03"},{"lineNumber":116,"author":{"gitId":"Sebtey"},"content":" final String message \u003d tasks.markAsDone(0);","lastModifiedDate":"2023-09-10"},{"lineNumber":117,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":118,"author":{"gitId":"Sebtey"},"content":" assertEquals(","lastModifiedDate":"2023-09-10"},{"lineNumber":119,"author":{"gitId":"Sebtey"},"content":" \"Mission status updated! Mission completed successfully.\\n\" + tasks.getTasks().get(0),","lastModifiedDate":"2023-09-10"},{"lineNumber":120,"author":{"gitId":"Sebtey"},"content":" message);","lastModifiedDate":"2023-09-10"},{"lineNumber":121,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":122,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":123,"author":{"gitId":"Sebtey"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":124,"author":{"gitId":"Sebtey"},"content":" public void markAsDone_taskIsDone_true() {","lastModifiedDate":"2023-09-03"},{"lineNumber":125,"author":{"gitId":"Sebtey"},"content":" tasks.load();","lastModifiedDate":"2023-09-03"},{"lineNumber":126,"author":{"gitId":"Sebtey"},"content":" tasks.markAsDone(0);","lastModifiedDate":"2023-09-03"},{"lineNumber":127,"author":{"gitId":"Sebtey"},"content":" final String message \u003d tasks.markAsDone(0);","lastModifiedDate":"2023-09-10"},{"lineNumber":128,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":129,"author":{"gitId":"Sebtey"},"content":" assertEquals(","lastModifiedDate":"2023-09-10"},{"lineNumber":130,"author":{"gitId":"Sebtey"},"content":" \"Mission has been completed previously.\",","lastModifiedDate":"2023-09-10"},{"lineNumber":131,"author":{"gitId":"Sebtey"},"content":" message);","lastModifiedDate":"2023-09-10"},{"lineNumber":132,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":133,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":134,"author":{"gitId":"Sebtey"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":135,"author":{"gitId":"Sebtey"},"content":" public void markAsDone_taskIndexInvalid_false() {","lastModifiedDate":"2023-09-03"},{"lineNumber":136,"author":{"gitId":"Sebtey"},"content":" tasks.load();","lastModifiedDate":"2023-09-03"},{"lineNumber":137,"author":{"gitId":"Sebtey"},"content":" final String message \u003d tasks.markAsDone(5);","lastModifiedDate":"2023-09-10"},{"lineNumber":138,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":139,"author":{"gitId":"Sebtey"},"content":" assertEquals(","lastModifiedDate":"2023-09-10"},{"lineNumber":140,"author":{"gitId":"Sebtey"},"content":" \"Invalid index! Please ensure you correctly key in your target index.\",","lastModifiedDate":"2023-09-10"},{"lineNumber":141,"author":{"gitId":"Sebtey"},"content":" message);","lastModifiedDate":"2023-09-10"},{"lineNumber":142,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":143,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":144,"author":{"gitId":"Sebtey"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":145,"author":{"gitId":"Sebtey"},"content":" public void markAsUndone_taskIsDone_true() {","lastModifiedDate":"2023-09-10"},{"lineNumber":146,"author":{"gitId":"Sebtey"},"content":" tasks.load();","lastModifiedDate":"2023-09-03"},{"lineNumber":147,"author":{"gitId":"Sebtey"},"content":" tasks.markAsDone(0);","lastModifiedDate":"2023-09-03"},{"lineNumber":148,"author":{"gitId":"Sebtey"},"content":" final String message \u003d tasks.markAsUndone(0);","lastModifiedDate":"2023-09-10"},{"lineNumber":149,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":150,"author":{"gitId":"Sebtey"},"content":" assertEquals(","lastModifiedDate":"2023-09-10"},{"lineNumber":151,"author":{"gitId":"Sebtey"},"content":" \"Mission status updated! Mission completion status reverted.\\n\" + tasks.getTasks().get(0),","lastModifiedDate":"2023-09-10"},{"lineNumber":152,"author":{"gitId":"Sebtey"},"content":" message);","lastModifiedDate":"2023-09-10"},{"lineNumber":153,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":154,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":155,"author":{"gitId":"Sebtey"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":156,"author":{"gitId":"Sebtey"},"content":" public void markAsUndone_taskIsNotDone_true() {","lastModifiedDate":"2023-09-10"},{"lineNumber":157,"author":{"gitId":"Sebtey"},"content":" tasks.load();","lastModifiedDate":"2023-09-03"},{"lineNumber":158,"author":{"gitId":"Sebtey"},"content":" final String message \u003d tasks.markAsUndone(0);","lastModifiedDate":"2023-09-10"},{"lineNumber":159,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":160,"author":{"gitId":"Sebtey"},"content":" assertEquals(","lastModifiedDate":"2023-09-10"},{"lineNumber":161,"author":{"gitId":"Sebtey"},"content":" \"Mission is already marked as undone!\",","lastModifiedDate":"2023-09-10"},{"lineNumber":162,"author":{"gitId":"Sebtey"},"content":" message);","lastModifiedDate":"2023-09-10"},{"lineNumber":163,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":164,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":165,"author":{"gitId":"Sebtey"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":166,"author":{"gitId":"Sebtey"},"content":" public void markAsUndone_taskIndexInvalid_false() {","lastModifiedDate":"2023-09-10"},{"lineNumber":167,"author":{"gitId":"Sebtey"},"content":" tasks.load();","lastModifiedDate":"2023-09-03"},{"lineNumber":168,"author":{"gitId":"Sebtey"},"content":" final String message \u003d tasks.markAsUndone(5);","lastModifiedDate":"2023-09-10"},{"lineNumber":169,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":170,"author":{"gitId":"Sebtey"},"content":" assertEquals(","lastModifiedDate":"2023-09-10"},{"lineNumber":171,"author":{"gitId":"Sebtey"},"content":" \"Invalid index! Please ensure you correctly key in your target index.\",","lastModifiedDate":"2023-09-10"},{"lineNumber":172,"author":{"gitId":"Sebtey"},"content":" message);","lastModifiedDate":"2023-09-10"},{"lineNumber":173,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":174,"author":{"gitId":"Sebtey"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"Sebtey":174}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"Sebtey"},"content":"todo testing123","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"Sebtey"},"content":"list","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"Sebtey"},"content":"mark 1","lastModifiedDate":"2023-08-25"},{"lineNumber":4,"author":{"gitId":"Sebtey"},"content":"list","lastModifiedDate":"2023-08-25"},{"lineNumber":5,"author":{"gitId":"Sebtey"},"content":"unmark 1","lastModifiedDate":"2023-08-25"},{"lineNumber":6,"author":{"gitId":"Sebtey"},"content":"list","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"Sebtey"},"content":"bye","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"Sebtey":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":"Sebtey"},"content":"java -classpath ..\\bin Veda \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-08-25"},{"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":{"Sebtey":1,"-":20}}] diff --git a/Sebtey_ip_master/commits.json b/Sebtey_ip_master/commits.json index fe9c0a34..027e5d4d 100644 --- a/Sebtey_ip_master/commits.json +++ b/Sebtey_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"Sebtey":[{"date":"2023-08-23","commitResults":[{"hash":"78649d5f247dd30c1823567b412fbcd6e7e05e70","isMergeCommit":false,"messageTitle":"Implemented Level 0","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":16,"deletions":10}}},{"hash":"895ba0beda2df1ca501282f88268ac9d025a4d97","isMergeCommit":false,"messageTitle":"echo feature","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":3}}},{"hash":"385cee9485f0b439a1a24a60d7128a9014b09b55","isMergeCommit":false,"messageTitle":"Add, List feature","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":2}}}]},{"date":"2023-08-24","commitResults":[{"hash":"a0ec1247c7c30ac11fd25676f11d6278f7ca4cce","isMergeCommit":false,"messageTitle":"Mark as Done","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":65,"deletions":4}}}]},{"date":"2023-08-25","commitResults":[{"hash":"41a206536fec747ea66de6a5fcf173db465d4cf3","isMergeCommit":false,"messageTitle":"ToDos, Events, Deadlines","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":136,"deletions":6}}},{"hash":"608a123b587487c4fedf9b64259540440cfafeef","isMergeCommit":false,"messageTitle":"Added in simple automated CLI testing","messageBody":"","tags":["A-TextUITesting"],"fileTypesAndContributionMap":{"txt":{"insertions":7,"deletions":0},"java":{"insertions":1,"deletions":1},"bat":{"insertions":1,"deletions":1}}},{"hash":"9cce85327cfb82f8bf04f5b702bc75d754f947fc","isMergeCommit":false,"messageTitle":"Added in error handling features","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":58,"deletions":22}}},{"hash":"9f6ded6b5b197dbc4a29e2929b75b6eb5b704ec3","isMergeCommit":false,"messageTitle":"Add in deletion of task feature","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":2}}}]},{"date":"2023-08-31","commitResults":[{"hash":"a143d4c8e95f53da48fc3cda5a50688a6f5298f0","isMergeCommit":false,"messageTitle":"Implement file systems","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":75,"deletions":0}}},{"hash":"a0b01da241a3b5680010f75cad3d63d1f26b21c3","isMergeCommit":false,"messageTitle":"Add file reading mechanism","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":105,"deletions":57}}}]},{"date":"2023-09-01","commitResults":[{"hash":"ed1a587dcb61b763324a4aff93afe686424892a6","isMergeCommit":false,"messageTitle":"Add autosaving feature","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":175,"deletions":66}}},{"hash":"094200ffe6d88002684681fc11a6e7345067deb4","isMergeCommit":false,"messageTitle":"Rename saved tasks file naming convention","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"java":{"insertions":21,"deletions":13}}},{"hash":"b61a4bf88386145378aa02e77b6fca53ac65657b","isMergeCommit":false,"messageTitle":"Implement date time support for deadline tasks","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":30,"deletions":10}}},{"hash":"304472a6ca0734975a986e56386fa8b6ab89777d","isMergeCommit":false,"messageTitle":"Add dateTime support for event tasks","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"java":{"insertions":20,"deletions":6}}}]},{"date":"2023-09-02","commitResults":[{"hash":"9a79510b76947b6221cec0082d84d21dd2ca7867","isMergeCommit":false,"messageTitle":"OOP TaskList","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":185,"deletions":108}}},{"hash":"3e5cf9819183dde479b655b577675c00fb8a8d66","isMergeCommit":false,"messageTitle":"Code refactoring into OOP","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"java":{"insertions":208,"deletions":111}}},{"hash":"3ff8a3c3280dff475993662d69a6b35ecae97d2d","isMergeCommit":false,"messageTitle":"Package the files into repective packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":53,"deletions":26}}},{"hash":"80f2cf0cdfdabbc4e5c4eec2b7749bb1728bd234","isMergeCommit":false,"messageTitle":"Add header comments","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":21,"deletions":4}}},{"hash":"fce9c129e54241e340b60082be4e15b504905d25","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027 of https://github.com/Sebtey/ip into add-gradle-support","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"d8a547b7d9e875eabc6307e76226c0edc7708347","isMergeCommit":false,"messageTitle":"Set up gradle","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":0}}}]},{"date":"2023-09-03","commitResults":[{"hash":"ea7d0a805657d6c19d6b50837c45bb941cb25ba7","isMergeCommit":false,"messageTitle":"Add JUnit testing for Parser and TaskList","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"gradle":{"insertions":0,"deletions":1},"java":{"insertions":315,"deletions":25}}},{"hash":"d12653d2d33ec3e2e2e7fdfb47198a119c56d114","isMergeCommit":false,"messageTitle":"Tweek file output name for shadow dependency in build gradle","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":4,"deletions":2}}},{"hash":"d3641bdd242c682a637aa8c6524f5a35ceb75790","isMergeCommit":false,"messageTitle":"Add find functionality","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":87,"deletions":7}}},{"hash":"cc28af8d105b0da2e376e5197290b3802f626668","isMergeCommit":false,"messageTitle":"Remove dead code","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":17}}},{"hash":"9ef6ccd1a223945528f126142f273ed43d00a2c9","isMergeCommit":false,"messageTitle":"Complete javaDocs for Tasks package","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":5}}},{"hash":"b639c767b6f6a3544b6a2ca5c4842a4dbe53b9a6","isMergeCommit":false,"messageTitle":"Complete javaDocs for VedaExceptions package","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":0}}},{"hash":"b5d3f91d1e810cc2fdce2e310ef1a142334691fa","isMergeCommit":false,"messageTitle":"Complete javaDocs for Parser, Storage, TaskList, Ui and Veda","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":1}}},{"hash":"17514c103835981c6b6ef320bdeb0cb34a6f9069","isMergeCommit":false,"messageTitle":"Add checkstyle into build.gradle","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":0}}},{"hash":"bf2270b0041b13f53b1ca261883cf04905575e43","isMergeCommit":false,"messageTitle":"Fix coding standard for Parser class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":37,"deletions":35}}},{"hash":"f7f7220b5b667566a2e11082a9df644003c1a0e0","isMergeCommit":false,"messageTitle":"Fix coding standards for Storage class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":21,"deletions":21}}},{"hash":"e120f093bc7ffd0c647b5693a77ec99c8e1f9788","isMergeCommit":false,"messageTitle":"Fix coding standards for TaskList class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":6}}},{"hash":"f40067bfbfcf4c3d9b0cab4c78a335c755abcd08","isMergeCommit":false,"messageTitle":"Fix code standards","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":140,"deletions":97}}},{"hash":"93bea141446009e4514ea39a7437f0b98b2a0020","isMergeCommit":true,"messageTitle":"Merged branch-A-JavaDoc","messageBody":"","tags":["A-JavaDoc","A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"725d34d1b454ef232742d66301054bdc6d8dd1cf","isMergeCommit":true,"messageTitle":"Merge branch-A-CodingStandard","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-05","commitResults":[{"hash":"6a5a06977d7878dfb3e87ba2d165983cd81a5ab8","isMergeCommit":false,"messageTitle":"Fix minor code styling issues","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":88,"deletions":74}}}]}]},"authorFileTypeContributionMap":{"Sebtey":{"java":1236,"md":0,"fxml":0,"sh":0,"bat":1,"gradle":9,"txt":7}},"authorContributionVariance":{"Sebtey":62245.625},"authorDisplayNameMap":{"Sebtey":"CS2103T-T17-1 SEBA.. XUN"}} +{"authorDailyContributionsMap":{"Sebtey":[{"date":"2023-08-23","commitResults":[{"hash":"78649d5f247dd30c1823567b412fbcd6e7e05e70","isMergeCommit":false,"messageTitle":"Implemented Level 0","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":16,"deletions":10}}},{"hash":"895ba0beda2df1ca501282f88268ac9d025a4d97","isMergeCommit":false,"messageTitle":"echo feature","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":3}}},{"hash":"385cee9485f0b439a1a24a60d7128a9014b09b55","isMergeCommit":false,"messageTitle":"Add, List feature","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":2}}}]},{"date":"2023-08-24","commitResults":[{"hash":"a0ec1247c7c30ac11fd25676f11d6278f7ca4cce","isMergeCommit":false,"messageTitle":"Mark as Done","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":65,"deletions":4}}}]},{"date":"2023-08-25","commitResults":[{"hash":"41a206536fec747ea66de6a5fcf173db465d4cf3","isMergeCommit":false,"messageTitle":"ToDos, Events, Deadlines","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":136,"deletions":6}}},{"hash":"608a123b587487c4fedf9b64259540440cfafeef","isMergeCommit":false,"messageTitle":"Added in simple automated CLI testing","messageBody":"","tags":["A-TextUITesting"],"fileTypesAndContributionMap":{"txt":{"insertions":7,"deletions":0},"java":{"insertions":1,"deletions":1},"bat":{"insertions":1,"deletions":1}}},{"hash":"9cce85327cfb82f8bf04f5b702bc75d754f947fc","isMergeCommit":false,"messageTitle":"Added in error handling features","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":58,"deletions":22}}},{"hash":"9f6ded6b5b197dbc4a29e2929b75b6eb5b704ec3","isMergeCommit":false,"messageTitle":"Add in deletion of task feature","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":2}}}]},{"date":"2023-08-31","commitResults":[{"hash":"a143d4c8e95f53da48fc3cda5a50688a6f5298f0","isMergeCommit":false,"messageTitle":"Implement file systems","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":75,"deletions":0}}},{"hash":"a0b01da241a3b5680010f75cad3d63d1f26b21c3","isMergeCommit":false,"messageTitle":"Add file reading mechanism","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":105,"deletions":57}}}]},{"date":"2023-09-01","commitResults":[{"hash":"ed1a587dcb61b763324a4aff93afe686424892a6","isMergeCommit":false,"messageTitle":"Add autosaving feature","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":175,"deletions":66}}},{"hash":"094200ffe6d88002684681fc11a6e7345067deb4","isMergeCommit":false,"messageTitle":"Rename saved tasks file naming convention","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"java":{"insertions":21,"deletions":13}}},{"hash":"b61a4bf88386145378aa02e77b6fca53ac65657b","isMergeCommit":false,"messageTitle":"Implement date time support for deadline tasks","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":30,"deletions":10}}},{"hash":"304472a6ca0734975a986e56386fa8b6ab89777d","isMergeCommit":false,"messageTitle":"Add dateTime support for event tasks","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"java":{"insertions":20,"deletions":6}}}]},{"date":"2023-09-02","commitResults":[{"hash":"9a79510b76947b6221cec0082d84d21dd2ca7867","isMergeCommit":false,"messageTitle":"OOP TaskList","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":185,"deletions":108}}},{"hash":"3e5cf9819183dde479b655b577675c00fb8a8d66","isMergeCommit":false,"messageTitle":"Code refactoring into OOP","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"java":{"insertions":208,"deletions":111}}},{"hash":"3ff8a3c3280dff475993662d69a6b35ecae97d2d","isMergeCommit":false,"messageTitle":"Package the files into repective packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":53,"deletions":26}}},{"hash":"80f2cf0cdfdabbc4e5c4eec2b7749bb1728bd234","isMergeCommit":false,"messageTitle":"Add header comments","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":21,"deletions":4}}},{"hash":"fce9c129e54241e340b60082be4e15b504905d25","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027 of https://github.com/Sebtey/ip into add-gradle-support","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"d8a547b7d9e875eabc6307e76226c0edc7708347","isMergeCommit":false,"messageTitle":"Set up gradle","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":0}}}]},{"date":"2023-09-03","commitResults":[{"hash":"ea7d0a805657d6c19d6b50837c45bb941cb25ba7","isMergeCommit":false,"messageTitle":"Add JUnit testing for Parser and TaskList","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"gradle":{"insertions":0,"deletions":1},"java":{"insertions":315,"deletions":25}}},{"hash":"d12653d2d33ec3e2e2e7fdfb47198a119c56d114","isMergeCommit":false,"messageTitle":"Tweek file output name for shadow dependency in build gradle","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":4,"deletions":2}}},{"hash":"d3641bdd242c682a637aa8c6524f5a35ceb75790","isMergeCommit":false,"messageTitle":"Add find functionality","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":87,"deletions":7}}},{"hash":"cc28af8d105b0da2e376e5197290b3802f626668","isMergeCommit":false,"messageTitle":"Remove dead code","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":17}}},{"hash":"9ef6ccd1a223945528f126142f273ed43d00a2c9","isMergeCommit":false,"messageTitle":"Complete javaDocs for Tasks package","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":5}}},{"hash":"b639c767b6f6a3544b6a2ca5c4842a4dbe53b9a6","isMergeCommit":false,"messageTitle":"Complete javaDocs for VedaExceptions package","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":0}}},{"hash":"b5d3f91d1e810cc2fdce2e310ef1a142334691fa","isMergeCommit":false,"messageTitle":"Complete javaDocs for Parser, Storage, TaskList, Ui and Veda","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":1}}},{"hash":"17514c103835981c6b6ef320bdeb0cb34a6f9069","isMergeCommit":false,"messageTitle":"Add checkstyle into build.gradle","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":0}}},{"hash":"bf2270b0041b13f53b1ca261883cf04905575e43","isMergeCommit":false,"messageTitle":"Fix coding standard for Parser class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":37,"deletions":35}}},{"hash":"f7f7220b5b667566a2e11082a9df644003c1a0e0","isMergeCommit":false,"messageTitle":"Fix coding standards for Storage class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":21,"deletions":21}}},{"hash":"e120f093bc7ffd0c647b5693a77ec99c8e1f9788","isMergeCommit":false,"messageTitle":"Fix coding standards for TaskList class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":6}}},{"hash":"f40067bfbfcf4c3d9b0cab4c78a335c755abcd08","isMergeCommit":false,"messageTitle":"Fix code standards","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":140,"deletions":97}}},{"hash":"93bea141446009e4514ea39a7437f0b98b2a0020","isMergeCommit":true,"messageTitle":"Merged branch-A-JavaDoc","messageBody":"","tags":["A-JavaDoc","A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"725d34d1b454ef232742d66301054bdc6d8dd1cf","isMergeCommit":true,"messageTitle":"Merge branch-A-CodingStandard","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-05","commitResults":[{"hash":"6a5a06977d7878dfb3e87ba2d165983cd81a5ab8","isMergeCommit":false,"messageTitle":"Fix minor code styling issues","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":88,"deletions":74}}}]},{"date":"2023-09-07","commitResults":[{"hash":"25da44755a8e3083527f65a3c6e6ce19cc0452d4","isMergeCommit":false,"messageTitle":"Add a functional GUI for Veda","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":14,"deletions":0},"java":{"insertions":186,"deletions":3}}}]},{"date":"2023-09-10","commitResults":[{"hash":"32c3089f52416397bbf2fea98298ce658c529547","isMergeCommit":false,"messageTitle":"Link Veda logic to GUI","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{"fxml":{"insertions":44,"deletions":0},"java":{"insertions":484,"deletions":350}}}]}]},"authorFileTypeContributionMap":{"Sebtey":{"java":1553,"md":0,"fxml":44,"sh":0,"bat":1,"gradle":23,"txt":7}},"authorContributionVariance":{"Sebtey":74238.0},"authorDisplayNameMap":{"Sebtey":"CS2103T-T17-1 SEBA.. XUN"}} diff --git a/StevenLiudw_ip_master/authorship.json b/StevenLiudw_ip_master/authorship.json index 9371c97f..4d0d60a0 100644 --- a/StevenLiudw_ip_master/authorship.json +++ b/StevenLiudw_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":"StevenLiudw"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"StevenLiudw"},"content":"checkstyle {","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"StevenLiudw"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":18,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":19,"author":{"gitId":"StevenLiudw"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"StevenLiudw"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"StevenLiudw"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"StevenLiudw"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"StevenLiudw"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"StevenLiudw"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"StevenLiudw"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"StevenLiudw"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"StevenLiudw"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"StevenLiudw"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"StevenLiudw"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"StevenLiudw"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"StevenLiudw"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","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":"","lastModifiedDate":"2020-05-25"},{"lineNumber":49,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":50,"author":{"gitId":"StevenLiudw"},"content":" mainClass.set(\"duke.Duke\")","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":52,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":53,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":54,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":55,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":56,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":57,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":58,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":59,"author":{"gitId":"-"},"content":"run {","lastModifiedDate":"2020-05-25"},{"lineNumber":60,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":61,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"StevenLiudw":18,"-":43}},{"path":"data/duke.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"StevenLiudw"},"content":"T # 0 # borrow book","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"StevenLiudw"},"content":"T # 1 # sdfsgf","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"StevenLiudw"},"content":"D # 0 # return book # 2019-09-09","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"StevenLiudw"},"content":"T # 0 # borrow book","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"StevenLiudw"},"content":"T # 0 # haha book","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"StevenLiudw"},"content":"T # 0 # makabaka book","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"StevenLiudw"},"content":"T # 0 # book hahaweafefa","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"StevenLiudw"},"content":"D # 0 # return book # 2012-10-12","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"StevenLiudw":8}},{"path":"src/main/java/duke/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"StevenLiudw"},"content":"package duke;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"StevenLiudw"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"StevenLiudw"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"StevenLiudw"},"content":"import duke.ui.MainWindow;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"StevenLiudw"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"StevenLiudw"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"StevenLiudw"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"StevenLiudw"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"StevenLiudw"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"StevenLiudw"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"StevenLiudw"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"StevenLiudw"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"StevenLiudw"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"StevenLiudw"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"StevenLiudw"},"content":"import javafx.scene.shape.Circle;","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"StevenLiudw"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"StevenLiudw"},"content":" * An example of a custom control using FXML.","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"StevenLiudw"},"content":" * This control represents a dialog box consisting of an ImageView to represent the speaker\u0027s face and a label","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"StevenLiudw"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"StevenLiudw"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"StevenLiudw"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"StevenLiudw"},"content":" private Label dialog;","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"StevenLiudw"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"StevenLiudw"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"StevenLiudw"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"StevenLiudw"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"StevenLiudw"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"StevenLiudw"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"StevenLiudw"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"StevenLiudw"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"StevenLiudw"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"StevenLiudw"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"StevenLiudw"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"StevenLiudw"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"StevenLiudw"},"content":" double radius \u003d 25.0;","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"StevenLiudw"},"content":" Circle clip \u003d new Circle(radius, radius, radius);","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"StevenLiudw"},"content":" displayPicture.setClip(clip);","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"StevenLiudw"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"StevenLiudw"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"StevenLiudw"},"content":" private void flip() {","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"StevenLiudw"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"StevenLiudw"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"StevenLiudw"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"StevenLiudw"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"StevenLiudw"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"StevenLiudw"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"StevenLiudw"},"content":" public static DialogBox getDukeDialog(String text, Image img) {","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"StevenLiudw"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"StevenLiudw"},"content":" db.flip();","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"StevenLiudw"},"content":" return db;","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"StevenLiudw"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"StevenLiudw":67}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"StevenLiudw"},"content":"package duke;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"StevenLiudw"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"StevenLiudw"},"content":"import duke.command.Command;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"StevenLiudw"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"StevenLiudw"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"StevenLiudw"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"StevenLiudw"},"content":" * The main class for the Duke program.","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"StevenLiudw"},"content":" * It manages the initialization, execution, and termination of the program.","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":14,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"StevenLiudw"},"content":" /** Handles reading and storing tasks. */","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"StevenLiudw"},"content":" private Storage storage;","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"StevenLiudw"},"content":" /** List of tasks managed by Duke. */","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"StevenLiudw"},"content":" private TaskList tasks;","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":20,"author":{"gitId":"StevenLiudw"},"content":" /** User interface for interactions. */","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"StevenLiudw"},"content":" private final Ui ui;","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"StevenLiudw"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"StevenLiudw"},"content":" * Constructs a new Duke instance with the specified file path for storage.","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"StevenLiudw"},"content":" public Duke() {","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"StevenLiudw"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"StevenLiudw"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"StevenLiudw"},"content":" storage \u003d new Storage(\"./data/duke.txt\");","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"StevenLiudw"},"content":" tasks \u003d new TaskList(storage.loadTasks());","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"StevenLiudw"},"content":" } catch (IOException ie) {","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"StevenLiudw"},"content":" System.exit(0);","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"StevenLiudw"},"content":" } catch (DukeException de) {","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"StevenLiudw"},"content":" ui.showLoadingError();","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"StevenLiudw"},"content":" tasks \u003d new TaskList();","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":38,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":39,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":40,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"StevenLiudw"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"StevenLiudw"},"content":" * You should have your own function to generate a response to user input.","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"StevenLiudw"},"content":" * Replace this stub with your completed method.","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"StevenLiudw"},"content":" public String getResponse(String input) {","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"StevenLiudw"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"StevenLiudw"},"content":" ui.showLine(); // show the divider line (\"_______\")","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"StevenLiudw"},"content":" Command c \u003d Parser.parse(input);","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"StevenLiudw"},"content":" return c.execute(tasks, ui, storage);","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"StevenLiudw"},"content":" } catch (IOException ie) {","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"StevenLiudw"},"content":" return ui.showError(ie.getMessage());","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"StevenLiudw"},"content":" } catch (DukeException de) {","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"StevenLiudw"},"content":" return ui.showError(de.getMessage());","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"StevenLiudw"},"content":" } finally {","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"StevenLiudw"},"content":" ui.showLine();","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":58,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":59,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":60,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"StevenLiudw":58,"-":2}},{"path":"src/main/java/duke/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"StevenLiudw"},"content":"package duke;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"StevenLiudw"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"StevenLiudw"},"content":" * Represents exceptions that are specific to the Duke application.","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"StevenLiudw"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"StevenLiudw"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"StevenLiudw"},"content":" * Constructs a new DukeException with the specified error message.","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"StevenLiudw"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"StevenLiudw"},"content":" * @param errorMessages The specific error message for this exception.","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"StevenLiudw"},"content":" public DukeException(String... errorMessages) {","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"StevenLiudw"},"content":" super(String.join(\", \", errorMessages));","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"StevenLiudw"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"StevenLiudw"},"content":" * Retrieves the error message of this exception, prefixed with \"OOPS! :(\".","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"StevenLiudw"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"StevenLiudw"},"content":" * @return The prefixed error message.","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"StevenLiudw"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"StevenLiudw"},"content":" public String getMessage() {","lastModifiedDate":"2023-08-23"},{"lineNumber":23,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"StevenLiudw"},"content":" return \"OOPS! :( \" + super.getMessage();","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":26,"author":{"gitId":"StevenLiudw"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"StevenLiudw":26}},{"path":"src/main/java/duke/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"StevenLiudw"},"content":"package duke;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"StevenLiudw"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"StevenLiudw"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"StevenLiudw"},"content":" * A launcher class to workaround classpath issues.","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"StevenLiudw"},"content":"public class Launcher {","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"StevenLiudw"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"StevenLiudw"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"StevenLiudw"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"StevenLiudw":12}},{"path":"src/main/java/duke/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"StevenLiudw"},"content":"package duke;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"StevenLiudw"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"StevenLiudw"},"content":"import duke.ui.MainWindow;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"StevenLiudw"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"StevenLiudw"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"StevenLiudw"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"StevenLiudw"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"StevenLiudw"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"StevenLiudw"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"StevenLiudw"},"content":" * A GUI for Duke using FXML.","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"StevenLiudw"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"StevenLiudw"},"content":" private Duke duke \u003d new Duke();","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"StevenLiudw"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"StevenLiudw"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"StevenLiudw"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"StevenLiudw"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"StevenLiudw"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"StevenLiudw"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"StevenLiudw"},"content":" stage.setTitle(\"Iron Man\");","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"StevenLiudw"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"StevenLiudw"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setDuke(duke);","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"StevenLiudw"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().printIntroduction();","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"StevenLiudw"},"content":" stage.show();","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"StevenLiudw"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"StevenLiudw"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"StevenLiudw"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"StevenLiudw":33}},{"path":"src/main/java/duke/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"StevenLiudw"},"content":"package duke;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"StevenLiudw"},"content":"import duke.command.AddCommand;","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"StevenLiudw"},"content":"import duke.command.Command;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"StevenLiudw"},"content":"import duke.command.DeleteCommand;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"StevenLiudw"},"content":"import duke.command.ExitCommand;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"StevenLiudw"},"content":"import duke.command.FindCommand;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"StevenLiudw"},"content":"import duke.command.ListCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"StevenLiudw"},"content":"import duke.command.MarkCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"StevenLiudw"},"content":"import duke.command.UnMarkCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"StevenLiudw"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"StevenLiudw"},"content":"import duke.task.Event;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"StevenLiudw"},"content":"import duke.task.Todo;","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"StevenLiudw"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"StevenLiudw"},"content":" * Represents a parser that makes sense of user commands.","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"StevenLiudw"},"content":"public class Parser {","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"StevenLiudw"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"StevenLiudw"},"content":" * Parses the user\u0027s command and returns the corresponding command object.","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"StevenLiudw"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"StevenLiudw"},"content":" * @param fullCommand The full string command provided by the user.","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"StevenLiudw"},"content":" * @return The corresponding Command object.","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"StevenLiudw"},"content":" * @throws DukeException If the command is unrecognized or invalid.","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"StevenLiudw"},"content":" public static Command parse(String fullCommand) throws DukeException {","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"StevenLiudw"},"content":" String[] splits \u003d fullCommand.split(\" \", 2);","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"StevenLiudw"},"content":" switch (splits[0].trim()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"StevenLiudw"},"content":" case (\"bye\"):","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"StevenLiudw"},"content":" return new ExitCommand();","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"StevenLiudw"},"content":" case (\"list\"):","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"StevenLiudw"},"content":" return new ListCommand();","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"StevenLiudw"},"content":" case (\"mark\"):","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"StevenLiudw"},"content":" return new MarkCommand(Integer.parseInt(splits[1].trim()) - 1);","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"StevenLiudw"},"content":" case (\"unmark\"):","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"StevenLiudw"},"content":" return new UnMarkCommand(Integer.parseInt(splits[1].trim()) - 1);","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"StevenLiudw"},"content":" case (\"todo\"):","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"StevenLiudw"},"content":" return new AddCommand(new Todo(splits[1].trim()));","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"StevenLiudw"},"content":" case (\"event\"):","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"StevenLiudw"},"content":" String[] temfirst \u003d splits[1].split(\"/from\", 2);","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"StevenLiudw"},"content":" String[] temsecond \u003d temfirst[1].split(\"/to\", 2);","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"StevenLiudw"},"content":" String description \u003d temfirst[0].trim();","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"StevenLiudw"},"content":" String start \u003d temsecond[0].trim();","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"StevenLiudw"},"content":" String end \u003d temsecond[1].trim();","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"StevenLiudw"},"content":" return new AddCommand(new Event(start, end, description));","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"StevenLiudw"},"content":" case (\"deadline\"): {","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"StevenLiudw"},"content":" String[] tem \u003d splits[1].split(\"/by\", 2);","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"StevenLiudw"},"content":" String deadlineDescription \u003d tem[0].trim();","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"StevenLiudw"},"content":" String time \u003d tem[1].trim();","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"StevenLiudw"},"content":" return new AddCommand(new Deadline(deadlineDescription, time));","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"StevenLiudw"},"content":" case (\"delete\"):","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"StevenLiudw"},"content":" return new DeleteCommand(Integer.parseInt(splits[1].trim()));","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"StevenLiudw"},"content":" case (\"find\"):","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"StevenLiudw"},"content":" return new FindCommand(splits[1].trim());","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"StevenLiudw"},"content":" default:","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"StevenLiudw"},"content":" throw new DukeException(\"☹ I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":59,"author":{"gitId":"StevenLiudw"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"StevenLiudw":59}},{"path":"src/main/java/duke/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"StevenLiudw"},"content":"package duke;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"StevenLiudw"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"StevenLiudw"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"StevenLiudw"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"StevenLiudw"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"StevenLiudw"},"content":" * Represents a list of tasks in Duke. Provides methods to manipulate and access the tasks.","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"StevenLiudw"},"content":"public class TaskList {","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"StevenLiudw"},"content":" private ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"StevenLiudw"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"StevenLiudw"},"content":" * Initializes an empty task list.","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"StevenLiudw"},"content":" public TaskList() {","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"StevenLiudw"},"content":" tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"StevenLiudw"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"StevenLiudw"},"content":" * Initializes the task list with given tasks.","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"StevenLiudw"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"StevenLiudw"},"content":" * @param tasks An ArrayList of tasks.","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"StevenLiudw"},"content":" public TaskList(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"StevenLiudw"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"StevenLiudw"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"StevenLiudw"},"content":" * Marks a task as done.","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"StevenLiudw"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"StevenLiudw"},"content":" * @param taskIndex The index of the task in the list.","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"StevenLiudw"},"content":" public void mark(int taskIndex) {","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"StevenLiudw"},"content":" tasks.get(taskIndex).mark();","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"StevenLiudw"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"StevenLiudw"},"content":" * Retrieves a task based on its index.","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"StevenLiudw"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"StevenLiudw"},"content":" * @param taskIndex The index of the task in the list.","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"StevenLiudw"},"content":" * @return The Task object at the given index.","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"StevenLiudw"},"content":" public Task getTask(int taskIndex) {","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"StevenLiudw"},"content":" return tasks.get(taskIndex);","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"StevenLiudw"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"StevenLiudw"},"content":" * Returns the number of tasks in the list.","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"StevenLiudw"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"StevenLiudw"},"content":" * @return An integer representing the size of the list.","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"StevenLiudw"},"content":" public int getSize() {","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"StevenLiudw"},"content":" return this.tasks.size();","lastModifiedDate":"2023-08-27"},{"lineNumber":60,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"StevenLiudw"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":63,"author":{"gitId":"StevenLiudw"},"content":" * Returns the entire list of tasks.","lastModifiedDate":"2023-08-27"},{"lineNumber":64,"author":{"gitId":"StevenLiudw"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":65,"author":{"gitId":"StevenLiudw"},"content":" * @return An ArrayList of Task objects.","lastModifiedDate":"2023-08-27"},{"lineNumber":66,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":67,"author":{"gitId":"StevenLiudw"},"content":" public ArrayList\u003cTask\u003e getTasks() {","lastModifiedDate":"2023-08-27"},{"lineNumber":68,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"StevenLiudw"},"content":" return this.tasks;","lastModifiedDate":"2023-08-27"},{"lineNumber":70,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":71,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":72,"author":{"gitId":"StevenLiudw"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":73,"author":{"gitId":"StevenLiudw"},"content":" * Unmarks a task (i.e., sets it as not done).","lastModifiedDate":"2023-08-27"},{"lineNumber":74,"author":{"gitId":"StevenLiudw"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":75,"author":{"gitId":"StevenLiudw"},"content":" * @param taskIndex The index of the task in the list.","lastModifiedDate":"2023-08-27"},{"lineNumber":76,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":77,"author":{"gitId":"StevenLiudw"},"content":" public void unmark(int taskIndex) {","lastModifiedDate":"2023-08-27"},{"lineNumber":78,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":79,"author":{"gitId":"StevenLiudw"},"content":" tasks.get(taskIndex).unmark();","lastModifiedDate":"2023-08-27"},{"lineNumber":80,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":81,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":82,"author":{"gitId":"StevenLiudw"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":83,"author":{"gitId":"StevenLiudw"},"content":" * Adds a new task to the list.","lastModifiedDate":"2023-08-27"},{"lineNumber":84,"author":{"gitId":"StevenLiudw"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":85,"author":{"gitId":"StevenLiudw"},"content":" * @param task The Task object to be added.","lastModifiedDate":"2023-08-27"},{"lineNumber":86,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":87,"author":{"gitId":"StevenLiudw"},"content":" public void addTask(Task task) {","lastModifiedDate":"2023-08-27"},{"lineNumber":88,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":89,"author":{"gitId":"StevenLiudw"},"content":" tasks.add(task);","lastModifiedDate":"2023-08-27"},{"lineNumber":90,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":91,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":92,"author":{"gitId":"StevenLiudw"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":93,"author":{"gitId":"StevenLiudw"},"content":" * Deletes a task from the list and returns it.","lastModifiedDate":"2023-08-27"},{"lineNumber":94,"author":{"gitId":"StevenLiudw"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":95,"author":{"gitId":"StevenLiudw"},"content":" * @param taskNum The index of the task in the list.","lastModifiedDate":"2023-08-27"},{"lineNumber":96,"author":{"gitId":"StevenLiudw"},"content":" * @return The Task object that was removed.","lastModifiedDate":"2023-08-27"},{"lineNumber":97,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":98,"author":{"gitId":"StevenLiudw"},"content":" public Task deleteTask(int taskNum) {","lastModifiedDate":"2023-08-27"},{"lineNumber":99,"author":{"gitId":"StevenLiudw"},"content":" Task tem \u003d tasks.get(taskNum);","lastModifiedDate":"2023-08-27"},{"lineNumber":100,"author":{"gitId":"StevenLiudw"},"content":" tasks.remove(taskNum);","lastModifiedDate":"2023-08-27"},{"lineNumber":101,"author":{"gitId":"StevenLiudw"},"content":" return tem;","lastModifiedDate":"2023-08-27"},{"lineNumber":102,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":103,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":104,"author":{"gitId":"StevenLiudw"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":105,"author":{"gitId":"StevenLiudw"},"content":" * Finds tasks by keyword and displays them using the UI.","lastModifiedDate":"2023-08-29"},{"lineNumber":106,"author":{"gitId":"StevenLiudw"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":107,"author":{"gitId":"StevenLiudw"},"content":" * @param keyword The search keyword.","lastModifiedDate":"2023-08-29"},{"lineNumber":108,"author":{"gitId":"StevenLiudw"},"content":" * @param ui The UI object to display results.","lastModifiedDate":"2023-08-29"},{"lineNumber":109,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":110,"author":{"gitId":"StevenLiudw"},"content":" public String findTasks(String keyword, Ui ui) {","lastModifiedDate":"2023-09-04"},{"lineNumber":111,"author":{"gitId":"StevenLiudw"},"content":" ArrayList\u003cTask\u003e matchedTasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-29"},{"lineNumber":112,"author":{"gitId":"StevenLiudw"},"content":" for (Task task : tasks) {","lastModifiedDate":"2023-08-29"},{"lineNumber":113,"author":{"gitId":"StevenLiudw"},"content":" if (task.getDescription().contains(keyword)) {","lastModifiedDate":"2023-08-29"},{"lineNumber":114,"author":{"gitId":"StevenLiudw"},"content":" matchedTasks.add(task);","lastModifiedDate":"2023-08-29"},{"lineNumber":115,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":116,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":117,"author":{"gitId":"StevenLiudw"},"content":" return ui.showFoundTasks(matchedTasks);","lastModifiedDate":"2023-09-04"},{"lineNumber":118,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":119,"author":{"gitId":"StevenLiudw"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"StevenLiudw":119}},{"path":"src/main/java/duke/command/AddCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"StevenLiudw"},"content":"package duke.command;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"StevenLiudw"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"StevenLiudw"},"content":"import duke.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"StevenLiudw"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"StevenLiudw"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"StevenLiudw"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"StevenLiudw"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"StevenLiudw"},"content":" * Represents an add command.","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"StevenLiudw"},"content":" * The add command is used to add tasks to the task list.","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"StevenLiudw"},"content":"public class AddCommand extends Command {","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"StevenLiudw"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"StevenLiudw"},"content":" * The task to be added.","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"StevenLiudw"},"content":" private final Task task;","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"StevenLiudw"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"StevenLiudw"},"content":" * Creates a new AddCommand with the specified task.","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"StevenLiudw"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"StevenLiudw"},"content":" * @param task The task to be added.","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"StevenLiudw"},"content":" public AddCommand(Task task) {","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"StevenLiudw"},"content":" this.task \u003d task;","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"StevenLiudw"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"StevenLiudw"},"content":" * Indicates whether this command will exit the application.","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"StevenLiudw"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"StevenLiudw"},"content":" * @return false since this command does not exit the application.","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"StevenLiudw"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"StevenLiudw"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"StevenLiudw"},"content":" return false;","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"StevenLiudw"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"StevenLiudw"},"content":" * Executes the add command, adding the task to the task list,","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"StevenLiudw"},"content":" * saving the task list, and notifying the user.","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"StevenLiudw"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"StevenLiudw"},"content":" * @param tasks The list of tasks.","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"StevenLiudw"},"content":" * @param ui The user interface.","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"StevenLiudw"},"content":" * @param storage The storage to save tasks.","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"StevenLiudw"},"content":" * @throws IOException If there\u0027s an error saving the tasks.","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"StevenLiudw"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"StevenLiudw"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) throws IOException {","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"StevenLiudw"},"content":" tasks.addTask(task);","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"StevenLiudw"},"content":" storage.save(tasks);","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"StevenLiudw"},"content":" return ui.showAddedTask(task);","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"StevenLiudw"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"StevenLiudw":58}},{"path":"src/main/java/duke/command/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"StevenLiudw"},"content":"package duke.command;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"StevenLiudw"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"StevenLiudw"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"StevenLiudw"},"content":"import duke.TaskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"StevenLiudw"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"StevenLiudw"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"StevenLiudw"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"StevenLiudw"},"content":" * Represents an abstract command to be executed in the Duke program.","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"StevenLiudw"},"content":" * This class provides a template for specific commands like adding or deleting tasks.","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"StevenLiudw"},"content":"public abstract class Command {","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"StevenLiudw"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"StevenLiudw"},"content":" * Indicates whether the command will cause the program to exit.","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"StevenLiudw"},"content":" private boolean isExit \u003d false;","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"StevenLiudw"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"StevenLiudw"},"content":" * Executes the specific command.","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"StevenLiudw"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"StevenLiudw"},"content":" * @param tasks The list of tasks.","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"StevenLiudw"},"content":" * @param ui The user interface handler.","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"StevenLiudw"},"content":" * @param storage The storage handler to load or save tasks.","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"StevenLiudw"},"content":" * @throws IOException If there\u0027s an error accessing or modifying the storage.","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"StevenLiudw"},"content":" * @throws DukeException If there are issues executing the command.","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"StevenLiudw"},"content":" public abstract String execute(TaskList tasks, Ui ui, Storage storage) throws IOException, DukeException;","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"StevenLiudw"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"StevenLiudw"},"content":" * Determines if Duke should continue listening for commands or terminate.","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"StevenLiudw"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"StevenLiudw"},"content":" * @return true if Duke should exit, false otherwise.","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"StevenLiudw"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"StevenLiudw"},"content":" return this.isExit;","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"StevenLiudw"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"StevenLiudw":43}},{"path":"src/main/java/duke/command/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"StevenLiudw"},"content":"package duke.command;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"StevenLiudw"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"StevenLiudw"},"content":"import duke.DukeException;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"StevenLiudw"},"content":"import duke.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"StevenLiudw"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"StevenLiudw"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"StevenLiudw"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"StevenLiudw"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"StevenLiudw"},"content":" * Represents a command to delete a task from the task list in the Duke program.","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"StevenLiudw"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"StevenLiudw"},"content":" /** Index of the task to be deleted from the task list. */","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"StevenLiudw"},"content":" private final int taskIndex;","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"StevenLiudw"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"StevenLiudw"},"content":" * Constructs a new DeleteCommand with the specified task index.","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"StevenLiudw"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"StevenLiudw"},"content":" * @param taskIndex Index of the task to be deleted.","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"StevenLiudw"},"content":" public DeleteCommand(int taskIndex) {","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"StevenLiudw"},"content":" this.taskIndex \u003d taskIndex;","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"StevenLiudw"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"StevenLiudw"},"content":" * Determines if the Duke program should exit.","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"StevenLiudw"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"StevenLiudw"},"content":" * @return false since the delete command should not terminate the program.","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"StevenLiudw"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"StevenLiudw"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"StevenLiudw"},"content":" return false;","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"StevenLiudw"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"StevenLiudw"},"content":" * Executes the delete command, removing a task from the task list,","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"StevenLiudw"},"content":" * saving the updated list and then notifying the user.","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"StevenLiudw"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"StevenLiudw"},"content":" * @param tasks The list of tasks.","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"StevenLiudw"},"content":" * @param ui The user interface handler.","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"StevenLiudw"},"content":" * @param storage The storage handler.","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"StevenLiudw"},"content":" * @throws IOException If there\u0027s an error saving the tasks.","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"StevenLiudw"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"StevenLiudw"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) throws IOException {","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"StevenLiudw"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"StevenLiudw"},"content":" if (taskIndex \u003c 0 || taskIndex \u003e\u003d tasks.getSize()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"StevenLiudw"},"content":" throw new DukeException(\"Invalid task number!\");","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"StevenLiudw"},"content":" Task removedTask \u003d tasks.deleteTask(taskIndex);","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"StevenLiudw"},"content":" storage.save(tasks);","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"StevenLiudw"},"content":" return ui.showDeletedTask(removedTask);","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":59,"author":{"gitId":"StevenLiudw"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":60,"author":{"gitId":"StevenLiudw"},"content":" return ui.showError(e.getMessage());","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":63,"author":{"gitId":"StevenLiudw"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"StevenLiudw":63}},{"path":"src/main/java/duke/command/ExitCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"StevenLiudw"},"content":"package duke.command;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"StevenLiudw"},"content":"import duke.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"StevenLiudw"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"StevenLiudw"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"StevenLiudw"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"StevenLiudw"},"content":" * Represents a command to exit the application.","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"StevenLiudw"},"content":"public class ExitCommand extends Command {","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"StevenLiudw"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"StevenLiudw"},"content":" * Indicates that this command should cause the application to exit.","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"StevenLiudw"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"StevenLiudw"},"content":" * @return true, as this is an exit command.","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"StevenLiudw"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"StevenLiudw"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"StevenLiudw"},"content":" return true;","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"StevenLiudw"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"StevenLiudw"},"content":" * Executes the exit command. Optionally save tasks or do any clean up here if needed.","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"StevenLiudw"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"StevenLiudw"},"content":" * @param tasks The list of tasks.","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"StevenLiudw"},"content":" * @param ui The user interface handler.","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"StevenLiudw"},"content":" * @param storage The storage handler.","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"StevenLiudw"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"StevenLiudw"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"StevenLiudw"},"content":" return ui.showGoodbye();","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"StevenLiudw"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"StevenLiudw":34}},{"path":"src/main/java/duke/command/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"StevenLiudw"},"content":"package duke.command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"StevenLiudw"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"StevenLiudw"},"content":"import duke.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"StevenLiudw"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"StevenLiudw"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"StevenLiudw"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"StevenLiudw"},"content":" * Represents a command to search and display tasks that contain a specific keyword.","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"StevenLiudw"},"content":"public class FindCommand extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"StevenLiudw"},"content":" private final String keyword;","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"StevenLiudw"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"StevenLiudw"},"content":" * Constructs a new FindCommand instance with a specified keyword to search for.","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"StevenLiudw"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"StevenLiudw"},"content":" * @param keyword The keyword to match tasks against.","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"StevenLiudw"},"content":" public FindCommand(String keyword) {","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"StevenLiudw"},"content":" this.keyword \u003d keyword;","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"StevenLiudw"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"StevenLiudw"},"content":" * Executes the find command, searching the tasks for any that contain the keyword.","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"StevenLiudw"},"content":" * Matching tasks are then displayed to the user via the UI.","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"StevenLiudw"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"StevenLiudw"},"content":" * @param tasks The list of tasks to search through.","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"StevenLiudw"},"content":" * @param ui The UI instance to display matching tasks to the user.","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"StevenLiudw"},"content":" * @param storage The storage instance, not used in this command but needed for command interface.","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"StevenLiudw"},"content":" * @throws IOException If there\u0027s an issue with input or output operations.","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"StevenLiudw"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"StevenLiudw"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) throws IOException {","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"StevenLiudw"},"content":" return tasks.findTasks(keyword, ui);","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"StevenLiudw"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"StevenLiudw":39}},{"path":"src/main/java/duke/command/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"StevenLiudw"},"content":"package duke.command;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"StevenLiudw"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"StevenLiudw"},"content":"import duke.TaskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"StevenLiudw"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"StevenLiudw"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"StevenLiudw"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"StevenLiudw"},"content":" * Represents a command to list out all the tasks.","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"StevenLiudw"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"StevenLiudw"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"StevenLiudw"},"content":" * Executes the list command by printing out all the tasks.","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"StevenLiudw"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"StevenLiudw"},"content":" * @param tasks The list of tasks to be printed.","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"StevenLiudw"},"content":" * @param ui The user interface handler.","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"StevenLiudw"},"content":" * @param storage The storage handler.","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"StevenLiudw"},"content":" * @throws DukeException If there\u0027s an issue executing the list command.","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"StevenLiudw"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"StevenLiudw"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"StevenLiudw"},"content":" StringBuilder result \u003d new StringBuilder(\"Here are the matching tasks in your list:\\n\");","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"StevenLiudw"},"content":" for (int i \u003d 0; i \u003c tasks.getSize(); i++) {","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"StevenLiudw"},"content":" result.append((i + 1)).append(\".\").append(tasks.getTask(i).toString()).append(\"\\n\");","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"StevenLiudw"},"content":" return result.toString();","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"StevenLiudw"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"StevenLiudw"},"content":" * Indicates whether the command should exit the application.","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"StevenLiudw"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"StevenLiudw"},"content":" * @return false, as \u0027list\u0027 command doesn\u0027t terminate the application.","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"StevenLiudw"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"StevenLiudw"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"StevenLiudw"},"content":" return false;","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"StevenLiudw"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"StevenLiudw":40}},{"path":"src/main/java/duke/command/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"StevenLiudw"},"content":"package duke.command;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"StevenLiudw"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"StevenLiudw"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"StevenLiudw"},"content":"import duke.TaskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"StevenLiudw"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"StevenLiudw"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"StevenLiudw"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"StevenLiudw"},"content":" * Represents a command to mark a task as completed.","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"StevenLiudw"},"content":"public class MarkCommand extends Command {","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"StevenLiudw"},"content":" private final int taskIndex;","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"StevenLiudw"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"StevenLiudw"},"content":" * Initializes a new instance of the MarkCommand with the specified task index.","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"StevenLiudw"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"StevenLiudw"},"content":" * @param taskIndex The index of the task to be marked as completed.","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"StevenLiudw"},"content":" public MarkCommand(int taskIndex) {","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"StevenLiudw"},"content":" this.taskIndex \u003d taskIndex;","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"StevenLiudw"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"StevenLiudw"},"content":" * Indicates whether the command should exit the application.","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"StevenLiudw"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"StevenLiudw"},"content":" * @return false, as the \u0027mark\u0027 command doesn\u0027t terminate the application.","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"StevenLiudw"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"StevenLiudw"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"StevenLiudw"},"content":" return false;","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"StevenLiudw"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"StevenLiudw"},"content":" * Executes the mark command by marking a task as completed.","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"StevenLiudw"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"StevenLiudw"},"content":" * @param tasks The list of tasks.","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"StevenLiudw"},"content":" * @param ui The user interface handler.","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"StevenLiudw"},"content":" * @param storage The storage handler.","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"StevenLiudw"},"content":" * @throws IOException If there is an issue with file IO.","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"StevenLiudw"},"content":" * @throws DukeException If there\u0027s an issue executing the mark command.","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"StevenLiudw"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"StevenLiudw"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) throws IOException, DukeException {","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"StevenLiudw"},"content":" if (taskIndex \u003c 0 || taskIndex \u003e\u003d tasks.getSize()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"StevenLiudw"},"content":" throw new DukeException(\"Invalid input number. :( Please provide a valid task number.\");","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"StevenLiudw"},"content":" tasks.mark(taskIndex);","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"StevenLiudw"},"content":" storage.save(tasks);","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"StevenLiudw"},"content":" return ui.showMarkedTask(tasks.getTask(taskIndex));","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"StevenLiudw"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"StevenLiudw":56}},{"path":"src/main/java/duke/command/UnMarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"StevenLiudw"},"content":"package duke.command;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"StevenLiudw"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"StevenLiudw"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"StevenLiudw"},"content":"import duke.TaskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"StevenLiudw"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"StevenLiudw"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"StevenLiudw"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"StevenLiudw"},"content":" * Represents a command to unmark a task as done.","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"StevenLiudw"},"content":"public class UnMarkCommand extends Command {","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"StevenLiudw"},"content":" /** Index of the task to unmark in the task list. */","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"StevenLiudw"},"content":" private final int taskIndex;","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"StevenLiudw"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"StevenLiudw"},"content":" * Constructs a new UnMarkCommand with the specified task index.","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"StevenLiudw"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"StevenLiudw"},"content":" * @param taskIndex Index of the task in the task list to unmark as done.","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"StevenLiudw"},"content":" public UnMarkCommand(int taskIndex) {","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"StevenLiudw"},"content":" this.taskIndex \u003d taskIndex;","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"StevenLiudw"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"StevenLiudw"},"content":" * Indicates whether this command should terminate the application.","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"StevenLiudw"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"StevenLiudw"},"content":" * @return false since this command does not exit the application.","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"StevenLiudw"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"StevenLiudw"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"StevenLiudw"},"content":" return false;","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"StevenLiudw"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"StevenLiudw"},"content":" * Executes the unmark command by unmarking the specified task in the task list.","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"StevenLiudw"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"StevenLiudw"},"content":" * @param tasks The list of tasks.","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"StevenLiudw"},"content":" * @param ui The user interface used to interact with the user.","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"StevenLiudw"},"content":" * @param storage The storage system used to save and load tasks.","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"StevenLiudw"},"content":" * @throws IOException If there\u0027s an error saving the tasks.","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"StevenLiudw"},"content":" * @throws DukeException If there\u0027s an error related to Duke\u0027s operation, such as invalid task number.","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"StevenLiudw"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"StevenLiudw"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) throws IOException, DukeException {","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"StevenLiudw"},"content":" if (taskIndex \u003c 0 || taskIndex \u003e\u003d tasks.getSize()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"StevenLiudw"},"content":" throw new DukeException(\"Invalid input number. :( Please provide a valid task number.\");","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"StevenLiudw"},"content":" tasks.unmark(taskIndex);","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"StevenLiudw"},"content":" storage.save(tasks);","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"StevenLiudw"},"content":" return ui.showUnmarkedTask(tasks.getTask(taskIndex));","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":59,"author":{"gitId":"StevenLiudw"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"StevenLiudw":59}},{"path":"src/main/java/duke/storage/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"StevenLiudw"},"content":"package duke.storage;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"StevenLiudw"},"content":"import java.io.File;","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"StevenLiudw"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"StevenLiudw"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"StevenLiudw"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"StevenLiudw"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"StevenLiudw"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"StevenLiudw"},"content":"import duke.DukeException;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"StevenLiudw"},"content":"import duke.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"StevenLiudw"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"StevenLiudw"},"content":"import duke.task.Event;","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"StevenLiudw"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"StevenLiudw"},"content":"import duke.task.Todo;","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"StevenLiudw"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"StevenLiudw"},"content":" * Represents a storage that deals with loading tasks from the file and saving tasks in the file.","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"StevenLiudw"},"content":"public class Storage {","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"StevenLiudw"},"content":" private final File file;","lastModifiedDate":"2023-08-26"},{"lineNumber":24,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"StevenLiudw"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"StevenLiudw"},"content":" * Creates a new Storage object.","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"StevenLiudw"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"StevenLiudw"},"content":" * @param file_Path The path to the file used for storage.","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"StevenLiudw"},"content":" * @throws IOException When there\u0027s an error with file operations.","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"StevenLiudw"},"content":" * @throws DukeException When there\u0027s an error specific to the Duke application.","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"StevenLiudw"},"content":" public Storage(String file_Path) throws IOException, DukeException {","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"StevenLiudw"},"content":" File savedFile \u003d new File(file_Path);","lastModifiedDate":"2023-08-26"},{"lineNumber":34,"author":{"gitId":"StevenLiudw"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":35,"author":{"gitId":"StevenLiudw"},"content":" if (!savedFile.exists() \u0026\u0026 !savedFile.createNewFile()) {","lastModifiedDate":"2023-08-26"},{"lineNumber":36,"author":{"gitId":"StevenLiudw"},"content":" throw new IOException(\"Failed to create a new file.\");","lastModifiedDate":"2023-08-26"},{"lineNumber":37,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":38,"author":{"gitId":"StevenLiudw"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":39,"author":{"gitId":"StevenLiudw"},"content":" throw new DukeException(\"Error while saving the file: \" + e.getMessage());","lastModifiedDate":"2023-08-26"},{"lineNumber":40,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"StevenLiudw"},"content":" this.file \u003d savedFile;","lastModifiedDate":"2023-08-26"},{"lineNumber":42,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":43,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":44,"author":{"gitId":"StevenLiudw"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"StevenLiudw"},"content":" * Loads tasks from the file.","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"StevenLiudw"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"StevenLiudw"},"content":" * @return An ArrayList of Task objects.","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"StevenLiudw"},"content":" * @throws FileNotFoundException When the file is not found.","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"StevenLiudw"},"content":" * @throws DukeException For other errors.","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"StevenLiudw"},"content":" public ArrayList\u003cTask\u003e loadTasks() throws FileNotFoundException, DukeException {","lastModifiedDate":"2023-08-26"},{"lineNumber":52,"author":{"gitId":"StevenLiudw"},"content":" ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-26"},{"lineNumber":53,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":54,"author":{"gitId":"StevenLiudw"},"content":" try (Scanner sc \u003d new Scanner(this.file)) {","lastModifiedDate":"2023-08-26"},{"lineNumber":55,"author":{"gitId":"StevenLiudw"},"content":" while (sc.hasNext()) {","lastModifiedDate":"2023-08-26"},{"lineNumber":56,"author":{"gitId":"StevenLiudw"},"content":" String curLine \u003d sc.nextLine();","lastModifiedDate":"2023-08-26"},{"lineNumber":57,"author":{"gitId":"StevenLiudw"},"content":" String[] splits \u003d curLine.split(\"#\");","lastModifiedDate":"2023-08-26"},{"lineNumber":58,"author":{"gitId":"StevenLiudw"},"content":" switch (splits[0].trim()) {","lastModifiedDate":"2023-08-26"},{"lineNumber":59,"author":{"gitId":"StevenLiudw"},"content":" case \"T\":","lastModifiedDate":"2023-08-27"},{"lineNumber":60,"author":{"gitId":"StevenLiudw"},"content":" Task newTask_Todo \u003d new Todo(splits[2].trim(), (splits[1].trim().equals(\"1\")));","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"StevenLiudw"},"content":" tasks.add(newTask_Todo);","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"StevenLiudw"},"content":" break;","lastModifiedDate":"2023-08-26"},{"lineNumber":63,"author":{"gitId":"StevenLiudw"},"content":" case \"D\":","lastModifiedDate":"2023-08-27"},{"lineNumber":64,"author":{"gitId":"StevenLiudw"},"content":" Task newTask_Deadline \u003d","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"StevenLiudw"},"content":" new Deadline(splits[2].trim(), splits[3].trim(), (splits[1].trim().equals(\"1\")));","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"StevenLiudw"},"content":" tasks.add(newTask_Deadline);","lastModifiedDate":"2023-08-27"},{"lineNumber":67,"author":{"gitId":"StevenLiudw"},"content":" break;","lastModifiedDate":"2023-08-26"},{"lineNumber":68,"author":{"gitId":"StevenLiudw"},"content":" case \"E\":","lastModifiedDate":"2023-08-27"},{"lineNumber":69,"author":{"gitId":"StevenLiudw"},"content":" Task newTask_Event \u003d new Event(splits[2].trim(), splits[3].trim(), (splits[1].trim().equals(\"1\")));","lastModifiedDate":"2023-08-27"},{"lineNumber":70,"author":{"gitId":"StevenLiudw"},"content":" tasks.add(newTask_Event);","lastModifiedDate":"2023-08-27"},{"lineNumber":71,"author":{"gitId":"StevenLiudw"},"content":" break;","lastModifiedDate":"2023-08-26"},{"lineNumber":72,"author":{"gitId":"StevenLiudw"},"content":" default:","lastModifiedDate":"2023-08-27"},{"lineNumber":73,"author":{"gitId":"StevenLiudw"},"content":" throw new DukeException(\"Invalid task type in the data file.\");","lastModifiedDate":"2023-08-26"},{"lineNumber":74,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":75,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":76,"author":{"gitId":"StevenLiudw"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":77,"author":{"gitId":"StevenLiudw"},"content":" throw new DukeException(\"Storage file not found.\");","lastModifiedDate":"2023-08-26"},{"lineNumber":78,"author":{"gitId":"StevenLiudw"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":79,"author":{"gitId":"StevenLiudw"},"content":" throw new DukeException(\"Error occurred when reading the data file: \" + e.getMessage());","lastModifiedDate":"2023-08-26"},{"lineNumber":80,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":81,"author":{"gitId":"StevenLiudw"},"content":" return tasks;","lastModifiedDate":"2023-08-26"},{"lineNumber":82,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":83,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":84,"author":{"gitId":"StevenLiudw"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":85,"author":{"gitId":"StevenLiudw"},"content":" * Saves tasks to the file.","lastModifiedDate":"2023-08-27"},{"lineNumber":86,"author":{"gitId":"StevenLiudw"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":87,"author":{"gitId":"StevenLiudw"},"content":" * @param tasks The TaskList containing tasks to be saved.","lastModifiedDate":"2023-08-27"},{"lineNumber":88,"author":{"gitId":"StevenLiudw"},"content":" * @throws IOException When there\u0027s an error with file operations.","lastModifiedDate":"2023-08-27"},{"lineNumber":89,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":90,"author":{"gitId":"StevenLiudw"},"content":" public void save(TaskList tasks) throws IOException {","lastModifiedDate":"2023-08-27"},{"lineNumber":91,"author":{"gitId":"StevenLiudw"},"content":" FileWriter fw \u003d new FileWriter(this.file);","lastModifiedDate":"2023-08-26"},{"lineNumber":92,"author":{"gitId":"StevenLiudw"},"content":" String textToAdd \u003d translateToStore(tasks.getTasks());","lastModifiedDate":"2023-08-27"},{"lineNumber":93,"author":{"gitId":"StevenLiudw"},"content":" fw.write(textToAdd);","lastModifiedDate":"2023-08-26"},{"lineNumber":94,"author":{"gitId":"StevenLiudw"},"content":" fw.close();","lastModifiedDate":"2023-08-26"},{"lineNumber":95,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":96,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":97,"author":{"gitId":"StevenLiudw"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":98,"author":{"gitId":"StevenLiudw"},"content":" * Converts the list of tasks into a storable string format.","lastModifiedDate":"2023-08-27"},{"lineNumber":99,"author":{"gitId":"StevenLiudw"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":100,"author":{"gitId":"StevenLiudw"},"content":" * @param tasks The ArrayList of tasks to be converted.","lastModifiedDate":"2023-08-27"},{"lineNumber":101,"author":{"gitId":"StevenLiudw"},"content":" * @return A string in the storage format.","lastModifiedDate":"2023-08-27"},{"lineNumber":102,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":103,"author":{"gitId":"StevenLiudw"},"content":" public String translateToStore(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-08-26"},{"lineNumber":104,"author":{"gitId":"StevenLiudw"},"content":" StringBuilder result \u003d new StringBuilder();","lastModifiedDate":"2023-08-26"},{"lineNumber":105,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":106,"author":{"gitId":"StevenLiudw"},"content":" for (Task task : tasks) {","lastModifiedDate":"2023-08-26"},{"lineNumber":107,"author":{"gitId":"StevenLiudw"},"content":" switch (task.getType()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":108,"author":{"gitId":"StevenLiudw"},"content":" case TODO:","lastModifiedDate":"2023-08-26"},{"lineNumber":109,"author":{"gitId":"StevenLiudw"},"content":" result.append(\"T # \")","lastModifiedDate":"2023-08-26"},{"lineNumber":110,"author":{"gitId":"StevenLiudw"},"content":" .append(task.getIsDone() ? \"1\" : \"0\")","lastModifiedDate":"2023-09-03"},{"lineNumber":111,"author":{"gitId":"StevenLiudw"},"content":" .append(\" # \")","lastModifiedDate":"2023-08-26"},{"lineNumber":112,"author":{"gitId":"StevenLiudw"},"content":" .append(task.getTaskDescription())","lastModifiedDate":"2023-09-03"},{"lineNumber":113,"author":{"gitId":"StevenLiudw"},"content":" .append(\"\\n\");","lastModifiedDate":"2023-08-26"},{"lineNumber":114,"author":{"gitId":"StevenLiudw"},"content":" break;","lastModifiedDate":"2023-08-26"},{"lineNumber":115,"author":{"gitId":"StevenLiudw"},"content":" case DEADLINE:","lastModifiedDate":"2023-08-26"},{"lineNumber":116,"author":{"gitId":"StevenLiudw"},"content":" Deadline deadline \u003d (Deadline) task;","lastModifiedDate":"2023-08-26"},{"lineNumber":117,"author":{"gitId":"StevenLiudw"},"content":" result.append(\"D # \")","lastModifiedDate":"2023-08-26"},{"lineNumber":118,"author":{"gitId":"StevenLiudw"},"content":" .append(task.getIsDone() ? \"1\" : \"0\")","lastModifiedDate":"2023-09-03"},{"lineNumber":119,"author":{"gitId":"StevenLiudw"},"content":" .append(\" # \")","lastModifiedDate":"2023-08-26"},{"lineNumber":120,"author":{"gitId":"StevenLiudw"},"content":" .append(task.getTaskDescription())","lastModifiedDate":"2023-09-03"},{"lineNumber":121,"author":{"gitId":"StevenLiudw"},"content":" .append(\" # \")","lastModifiedDate":"2023-08-26"},{"lineNumber":122,"author":{"gitId":"StevenLiudw"},"content":" .append(deadline.getTime())","lastModifiedDate":"2023-09-03"},{"lineNumber":123,"author":{"gitId":"StevenLiudw"},"content":" .append(\"\\n\");","lastModifiedDate":"2023-08-26"},{"lineNumber":124,"author":{"gitId":"StevenLiudw"},"content":" break;","lastModifiedDate":"2023-08-26"},{"lineNumber":125,"author":{"gitId":"StevenLiudw"},"content":" case EVENT:","lastModifiedDate":"2023-08-26"},{"lineNumber":126,"author":{"gitId":"StevenLiudw"},"content":" Event event \u003d (Event) task;","lastModifiedDate":"2023-08-26"},{"lineNumber":127,"author":{"gitId":"StevenLiudw"},"content":" result.append(\"E # \")","lastModifiedDate":"2023-08-26"},{"lineNumber":128,"author":{"gitId":"StevenLiudw"},"content":" .append(task.getIsDone() ? \"1\" : \"0\")","lastModifiedDate":"2023-09-03"},{"lineNumber":129,"author":{"gitId":"StevenLiudw"},"content":" .append(\" # \")","lastModifiedDate":"2023-08-26"},{"lineNumber":130,"author":{"gitId":"StevenLiudw"},"content":" .append(task.getTaskDescription())","lastModifiedDate":"2023-09-03"},{"lineNumber":131,"author":{"gitId":"StevenLiudw"},"content":" .append(\" # \")","lastModifiedDate":"2023-08-26"},{"lineNumber":132,"author":{"gitId":"StevenLiudw"},"content":" .append(event.getE_start())","lastModifiedDate":"2023-09-03"},{"lineNumber":133,"author":{"gitId":"StevenLiudw"},"content":" .append(\" - \")","lastModifiedDate":"2023-08-26"},{"lineNumber":134,"author":{"gitId":"StevenLiudw"},"content":" .append(event.getE_end())","lastModifiedDate":"2023-09-03"},{"lineNumber":135,"author":{"gitId":"StevenLiudw"},"content":" .append(\"\\n\");","lastModifiedDate":"2023-08-26"},{"lineNumber":136,"author":{"gitId":"StevenLiudw"},"content":" break;","lastModifiedDate":"2023-08-26"},{"lineNumber":137,"author":{"gitId":"StevenLiudw"},"content":" default:","lastModifiedDate":"2023-08-26"},{"lineNumber":138,"author":{"gitId":"StevenLiudw"},"content":" throw new IllegalStateException(\"Unexpected task type: \" + task.getType());","lastModifiedDate":"2023-09-03"},{"lineNumber":139,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":140,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":141,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":142,"author":{"gitId":"StevenLiudw"},"content":" return result.toString();","lastModifiedDate":"2023-08-26"},{"lineNumber":143,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":144,"author":{"gitId":"StevenLiudw"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"StevenLiudw":144}},{"path":"src/main/java/duke/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"StevenLiudw"},"content":"package duke.task;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"StevenLiudw"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"StevenLiudw"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"StevenLiudw"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"StevenLiudw"},"content":"import duke.DukeException;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"StevenLiudw"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"StevenLiudw"},"content":" * Represents a Deadline task in the Duke program.","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"StevenLiudw"},"content":" * Each deadline has a description and a specific due time.","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"StevenLiudw"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":14,"author":{"gitId":"StevenLiudw"},"content":" /** Formatter to display the due time in the desired format. */","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"StevenLiudw"},"content":" private static final DateTimeFormatter OUTPUT_FORMATTER \u003d DateTimeFormatter.ofPattern(\"MMM dd yyyy\");","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"StevenLiudw"},"content":" /** Due date/time for the deadline. */","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"StevenLiudw"},"content":" private LocalDate deadlineTime;","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":20,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"StevenLiudw"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"StevenLiudw"},"content":" * Constructs a new Deadline task.","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"StevenLiudw"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"StevenLiudw"},"content":" * @param description Description of the deadline.","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"StevenLiudw"},"content":" * @param deadlineTime Due time for the deadline in \"yyyy-MM-dd\" format.","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"StevenLiudw"},"content":" * @throws DukeException If the due time is not in the expected format.","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"StevenLiudw"},"content":" public Deadline(String description, String deadlineTime) throws DukeException {","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"StevenLiudw"},"content":" super(description, TaskType.DEADLINE);","lastModifiedDate":"2023-08-23"},{"lineNumber":30,"author":{"gitId":"StevenLiudw"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"StevenLiudw"},"content":" this.deadlineTime \u003d LocalDate.parse(deadlineTime, DateTimeFormatter.ofPattern(\"yyyy-MM-dd\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"StevenLiudw"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"StevenLiudw"},"content":" throw new DukeException(\"Invalid time format for input: \" + deadlineTime);","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":36,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":37,"author":{"gitId":"StevenLiudw"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"StevenLiudw"},"content":" * Constructs a new Deadline task with an isDone status.","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"StevenLiudw"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"StevenLiudw"},"content":" * @param description Description of the deadline.","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"StevenLiudw"},"content":" * @param deadlineTime Due time for the deadline in \"yyyy-MM-dd\" format.","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"StevenLiudw"},"content":" * @param isDone Boolean indicating if the task has been completed.","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"StevenLiudw"},"content":" * @throws DukeException If the due time is not in the expected format.","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"StevenLiudw"},"content":" public Deadline(String description, String deadlineTime, boolean isDone) throws DukeException {","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"StevenLiudw"},"content":" super(description, TaskType.DEADLINE, isDone);","lastModifiedDate":"2023-08-26"},{"lineNumber":47,"author":{"gitId":"StevenLiudw"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"StevenLiudw"},"content":" this.deadlineTime \u003d LocalDate.parse(deadlineTime, DateTimeFormatter.ofPattern(\"yyyy-MM-dd\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"StevenLiudw"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"StevenLiudw"},"content":" throw new DukeException(\"Invalid time format for input: \" + deadlineTime);","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":53,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":54,"author":{"gitId":"StevenLiudw"},"content":" public LocalDate getTime() {","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"StevenLiudw"},"content":" return this.deadlineTime;","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"StevenLiudw"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":59,"author":{"gitId":"StevenLiudw"},"content":" * Returns the string representation of the deadline.","lastModifiedDate":"2023-08-27"},{"lineNumber":60,"author":{"gitId":"StevenLiudw"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"StevenLiudw"},"content":" * @return Formatted string representing the deadline.","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":63,"author":{"gitId":"StevenLiudw"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":64,"author":{"gitId":"StevenLiudw"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":65,"author":{"gitId":"StevenLiudw"},"content":" return \"[D]\" + super.toString() + \" (by: \" + deadlineTime.format(OUTPUT_FORMATTER) + \")\";","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":67,"author":{"gitId":"StevenLiudw"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"StevenLiudw":67}},{"path":"src/main/java/duke/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"StevenLiudw"},"content":"package duke.task;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"StevenLiudw"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"StevenLiudw"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"StevenLiudw"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"StevenLiudw"},"content":"import duke.DukeException;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"StevenLiudw"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"StevenLiudw"},"content":" * Represents an event task with a start and end date.","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"StevenLiudw"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":14,"author":{"gitId":"StevenLiudw"},"content":" private static final DateTimeFormatter FORMATTER \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd\");","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"StevenLiudw"},"content":" private static final DateTimeFormatter OUTPUT_FORMATTER \u003d DateTimeFormatter.ofPattern(\"MMM dd yyyy\");","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"StevenLiudw"},"content":" private LocalDate e_start;","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"StevenLiudw"},"content":" private LocalDate e_end;","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"StevenLiudw"},"content":" public LocalDate getE_start() {","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"StevenLiudw"},"content":" return e_start;","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"StevenLiudw"},"content":" public LocalDate getE_end() {","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"StevenLiudw"},"content":" return e_end;","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":27,"author":{"gitId":"StevenLiudw"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"StevenLiudw"},"content":" * Constructs a new Event with the specified description, start date, and end date.","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"StevenLiudw"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"StevenLiudw"},"content":" * @param e_start Start date of the event.","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"StevenLiudw"},"content":" * @param e_end End date of the event.","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"StevenLiudw"},"content":" * @param description Description of the event.","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"StevenLiudw"},"content":" * @throws DukeException If the given date format is invalid.","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"StevenLiudw"},"content":" public Event(String e_start, String e_end, String description) throws DukeException {","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"StevenLiudw"},"content":" super(description, TaskType.EVENT);","lastModifiedDate":"2023-08-23"},{"lineNumber":37,"author":{"gitId":"StevenLiudw"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"StevenLiudw"},"content":" this.e_start \u003d LocalDate.parse(e_start, FORMATTER);","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"StevenLiudw"},"content":" this.e_end \u003d LocalDate.parse(e_end, FORMATTER);","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"StevenLiudw"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"StevenLiudw"},"content":" throw new DukeException(\"Invalid time format.\");","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":44,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":45,"author":{"gitId":"StevenLiudw"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"StevenLiudw"},"content":" * Constructs a new Event with the specified description, combined time (start-end), and completion status.","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"StevenLiudw"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"StevenLiudw"},"content":" * @param description Description of the event.","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"StevenLiudw"},"content":" * @param time Combined start and end date in the format \u0027start-end\u0027.","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"StevenLiudw"},"content":" * @param isDone Boolean indicating the completion status of the event.","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"StevenLiudw"},"content":" * @throws DukeException If the given date format is invalid.","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"StevenLiudw"},"content":" public Event(String description, String time, Boolean isDone) throws DukeException {","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"StevenLiudw"},"content":" super(description, TaskType.EVENT, isDone);","lastModifiedDate":"2023-08-26"},{"lineNumber":55,"author":{"gitId":"StevenLiudw"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"StevenLiudw"},"content":" String[] splits \u003d time.split(\"-\");","lastModifiedDate":"2023-08-26"},{"lineNumber":57,"author":{"gitId":"StevenLiudw"},"content":" this.e_start \u003d LocalDate.parse(splits[0].trim(), FORMATTER);","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"StevenLiudw"},"content":" this.e_end \u003d LocalDate.parse(splits[1].trim(), FORMATTER);","lastModifiedDate":"2023-08-27"},{"lineNumber":59,"author":{"gitId":"StevenLiudw"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":60,"author":{"gitId":"StevenLiudw"},"content":" throw new DukeException(\"Invalid time format.\");","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":63,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":64,"author":{"gitId":"StevenLiudw"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":65,"author":{"gitId":"StevenLiudw"},"content":" * Returns a string representation of the event.","lastModifiedDate":"2023-08-27"},{"lineNumber":66,"author":{"gitId":"StevenLiudw"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":67,"author":{"gitId":"StevenLiudw"},"content":" * @return A string representing the event.","lastModifiedDate":"2023-08-27"},{"lineNumber":68,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":69,"author":{"gitId":"StevenLiudw"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":70,"author":{"gitId":"StevenLiudw"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":71,"author":{"gitId":"StevenLiudw"},"content":" return \"[E]\" + super.toString() + \" (from: \" + e_start.format(OUTPUT_FORMATTER)","lastModifiedDate":"2023-08-27"},{"lineNumber":72,"author":{"gitId":"StevenLiudw"},"content":" + \" to: \" + e_end.format(OUTPUT_FORMATTER) + \")\";","lastModifiedDate":"2023-08-27"},{"lineNumber":73,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":74,"author":{"gitId":"StevenLiudw"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"StevenLiudw":74}},{"path":"src/main/java/duke/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"StevenLiudw"},"content":"package duke.task;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"StevenLiudw"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"StevenLiudw"},"content":" * Represents a general task. It can be extended by other specific task types.","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"StevenLiudw"},"content":"public class Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":9,"author":{"gitId":"StevenLiudw"},"content":" private final String description;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"StevenLiudw"},"content":" private boolean isDone;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"StevenLiudw"},"content":" private final TaskType type;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":13,"author":{"gitId":"StevenLiudw"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"StevenLiudw"},"content":" * Initializes a task with the specified description and type.","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"StevenLiudw"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"StevenLiudw"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"StevenLiudw"},"content":" * @param type The type of the task.","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"StevenLiudw"},"content":" public Task(String description, TaskType type) {","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"StevenLiudw"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-22"},{"lineNumber":21,"author":{"gitId":"StevenLiudw"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-22"},{"lineNumber":22,"author":{"gitId":"StevenLiudw"},"content":" this.type \u003d type;","lastModifiedDate":"2023-08-23"},{"lineNumber":23,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":24,"author":{"gitId":"StevenLiudw"},"content":" public String getTaskDescription() {","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"StevenLiudw"},"content":" return this.description;","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"StevenLiudw"},"content":" public boolean getIsDone() {","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"StevenLiudw"},"content":" return this.isDone;","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"StevenLiudw"},"content":" public TaskType getType() {","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"StevenLiudw"},"content":" return this.type;","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"StevenLiudw"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"StevenLiudw"},"content":" * Initializes a task with the specified description, type, and completion status.","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"StevenLiudw"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"StevenLiudw"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"StevenLiudw"},"content":" * @param type The type of the task.","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"StevenLiudw"},"content":" * @param isDone The completion status of the task.","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"StevenLiudw"},"content":" public Task(String description, TaskType type, Boolean isDone) {","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"StevenLiudw"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-26"},{"lineNumber":42,"author":{"gitId":"StevenLiudw"},"content":" this.type \u003d type;","lastModifiedDate":"2023-08-26"},{"lineNumber":43,"author":{"gitId":"StevenLiudw"},"content":" this.isDone \u003d isDone;","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":45,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":46,"author":{"gitId":"StevenLiudw"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"StevenLiudw"},"content":" * Gets the status icon for the task.","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"StevenLiudw"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"StevenLiudw"},"content":" * @return \"X\" if the task is completed, else \" \".","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"StevenLiudw"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-22"},{"lineNumber":52,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"StevenLiudw"},"content":" return (isDone ? \"X\" : \" \"); // mark done task with X","lastModifiedDate":"2023-08-22"},{"lineNumber":54,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":55,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":56,"author":{"gitId":"StevenLiudw"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"StevenLiudw"},"content":" * Marks the task as completed.","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":59,"author":{"gitId":"StevenLiudw"},"content":" public void mark() {","lastModifiedDate":"2023-08-22"},{"lineNumber":60,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"StevenLiudw"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-22"},{"lineNumber":62,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":63,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":64,"author":{"gitId":"StevenLiudw"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":65,"author":{"gitId":"StevenLiudw"},"content":" * Marks the task as not completed.","lastModifiedDate":"2023-08-27"},{"lineNumber":66,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":67,"author":{"gitId":"StevenLiudw"},"content":" public void unmark() {","lastModifiedDate":"2023-08-22"},{"lineNumber":68,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"StevenLiudw"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-22"},{"lineNumber":70,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":71,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":72,"author":{"gitId":"StevenLiudw"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"StevenLiudw"},"content":" * Gets the description","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":75,"author":{"gitId":"StevenLiudw"},"content":" public String getDescription() {","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"StevenLiudw"},"content":" return this.description;","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":79,"author":{"gitId":"StevenLiudw"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":80,"author":{"gitId":"StevenLiudw"},"content":" * Returns the string representation of the task.","lastModifiedDate":"2023-08-27"},{"lineNumber":81,"author":{"gitId":"StevenLiudw"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":82,"author":{"gitId":"StevenLiudw"},"content":" * @return A string representing the task\u0027s status and description.","lastModifiedDate":"2023-08-27"},{"lineNumber":83,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":84,"author":{"gitId":"StevenLiudw"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":85,"author":{"gitId":"StevenLiudw"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":86,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":87,"author":{"gitId":"StevenLiudw"},"content":" return \"[\" + getStatusIcon() + \"] \" + description;","lastModifiedDate":"2023-08-22"},{"lineNumber":88,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":89,"author":{"gitId":"StevenLiudw"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"StevenLiudw":89}},{"path":"src/main/java/duke/task/TaskType.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"StevenLiudw"},"content":"package duke.task;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"StevenLiudw"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"StevenLiudw"},"content":" * Enumerates the different types of tasks.","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"StevenLiudw"},"content":"public enum TaskType {","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"StevenLiudw"},"content":" TODO, DEADLINE, EVENT","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"StevenLiudw"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"StevenLiudw":8}},{"path":"src/main/java/duke/task/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"StevenLiudw"},"content":"package duke.task;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"StevenLiudw"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"StevenLiudw"},"content":" * Represents a \"to-do\" type of task.","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"StevenLiudw"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":6,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"StevenLiudw"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"StevenLiudw"},"content":" * Initializes a new \"to-do\" task with the specified description.","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"StevenLiudw"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"StevenLiudw"},"content":" * @param description The description of the \"to-do\" task.","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"StevenLiudw"},"content":" public Todo(String description) {","lastModifiedDate":"2023-08-22"},{"lineNumber":13,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"StevenLiudw"},"content":" super(description, TaskType.TODO);","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":16,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":17,"author":{"gitId":"StevenLiudw"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"StevenLiudw"},"content":" * Initializes a new \"to-do\" task with the specified name and completion status.","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"StevenLiudw"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"StevenLiudw"},"content":" * @param name The name of the \"to-do\" task.","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"StevenLiudw"},"content":" * @param isDone The completion status of the task.","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"StevenLiudw"},"content":" public Todo(String name, boolean isDone) {","lastModifiedDate":"2023-08-26"},{"lineNumber":24,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"StevenLiudw"},"content":" super(name, TaskType.TODO, isDone);","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"StevenLiudw"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"StevenLiudw"},"content":" * Returns the string representation of the \"to-do\" task.","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"StevenLiudw"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"StevenLiudw"},"content":" * @return A string representing the \"to-do\" task\u0027s type, status, and description.","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"StevenLiudw"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":34,"author":{"gitId":"StevenLiudw"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":35,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"StevenLiudw"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-22"},{"lineNumber":37,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":38,"author":{"gitId":"StevenLiudw"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"StevenLiudw":38}},{"path":"src/main/java/duke/ui/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"StevenLiudw"},"content":"package duke.ui;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"StevenLiudw"},"content":"import duke.Duke;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"StevenLiudw"},"content":"import duke.DialogBox;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"StevenLiudw"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"StevenLiudw"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"StevenLiudw"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"StevenLiudw"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"StevenLiudw"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"StevenLiudw"},"content":"import javafx.scene.layout.*;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"StevenLiudw"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"StevenLiudw"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"StevenLiudw"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"StevenLiudw"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"StevenLiudw"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"StevenLiudw"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"StevenLiudw"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"StevenLiudw"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"StevenLiudw"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"StevenLiudw"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"StevenLiudw"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"StevenLiudw"},"content":" private Duke duke;","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"StevenLiudw"},"content":" private Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/Tony.png\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"StevenLiudw"},"content":" private Image dukeImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/jarvis.png\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"StevenLiudw"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"StevenLiudw"},"content":" public void initialize() {","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"StevenLiudw"},"content":" dialogContainer.heightProperty().addListener((observable) -\u003e {","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"StevenLiudw"},"content":" scrollPane.setVvalue(1.0);","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"StevenLiudw"},"content":" });","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"StevenLiudw"},"content":" public void setDuke(Duke d) {","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"StevenLiudw"},"content":" duke \u003d d;","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"StevenLiudw"},"content":" public void printIntroduction() {","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"StevenLiudw"},"content":" dialogContainer.getChildren().add(DialogBox.getDukeDialog(Ui.showWelcome(), dukeImage));","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"StevenLiudw"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"StevenLiudw"},"content":" * Creates two dialog boxes, one echoing user input and the other containing Duke\u0027s reply and then appends them to","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"StevenLiudw"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"StevenLiudw"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"StevenLiudw"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"StevenLiudw"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"StevenLiudw"},"content":" String response \u003d duke.getResponse(input);","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"StevenLiudw"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"StevenLiudw"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"StevenLiudw"},"content":" DialogBox.getDukeDialog(response, dukeImage)","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"StevenLiudw"},"content":" );","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"StevenLiudw"},"content":" userInput.clear();","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"StevenLiudw"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"StevenLiudw":61}},{"path":"src/main/java/duke/ui/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"StevenLiudw"},"content":"package duke.ui;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"StevenLiudw"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"StevenLiudw"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"StevenLiudw"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"StevenLiudw"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"StevenLiudw"},"content":" * Deals with interactions with the user","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"StevenLiudw"},"content":" * Return messages to user from Duke.","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"StevenLiudw"},"content":"public class Ui {","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"StevenLiudw"},"content":" private Scanner scanner;","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"StevenLiudw"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"StevenLiudw"},"content":" * Constructor for Ui class. Initializes the Scanner object.","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"StevenLiudw"},"content":" public Ui() {","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"StevenLiudw"},"content":" this.scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"StevenLiudw"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"StevenLiudw"},"content":" * Returns the welcome greetings.","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"StevenLiudw"},"content":" public static String showWelcome() {","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"StevenLiudw"},"content":" String logo \u003d \" ____ _ \\n\"","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"StevenLiudw"},"content":" + \"| _ \\\\ _ _| | _____ \\n\"","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"StevenLiudw"},"content":" + \"| | | | | | | |/ / _ \\\\\\n\"","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"StevenLiudw"},"content":" + \"| |_| | |_| | \u003c __/\\n\"","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"StevenLiudw"},"content":" + \"|____/ \\\\__,_|_|\\\\_\\\\___|\\n\";","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"StevenLiudw"},"content":" return \"Hello from\\n\" + logo","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"StevenLiudw"},"content":" + \"_____________________________________\\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"StevenLiudw"},"content":" + \"Hello! I \u0027m Jarvis.\\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"StevenLiudw"},"content":" + \"What can I do for you?\\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"StevenLiudw"},"content":" + \"_____________________________________\\n\";","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"StevenLiudw"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"StevenLiudw"},"content":" * Reads a command entered by the user.","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"StevenLiudw"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"StevenLiudw"},"content":" * @return A string representing the user\u0027s command.","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"StevenLiudw"},"content":" public String readCommand() {","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"StevenLiudw"},"content":" return scanner.nextLine();","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"StevenLiudw"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"StevenLiudw"},"content":" * Returns a line to format the UI.","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"StevenLiudw"},"content":" public String showLine() {","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"StevenLiudw"},"content":" return \"______________________________\";","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"StevenLiudw"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"StevenLiudw"},"content":" * Returns an error message when there\u0027s an issue loading tasks.","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"StevenLiudw"},"content":" public String showLoadingError() {","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"StevenLiudw"},"content":" return \"Error loading tasks. Starting with an empty task list.\";","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"StevenLiudw"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":63,"author":{"gitId":"StevenLiudw"},"content":" * Returns an error message.","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"StevenLiudw"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":65,"author":{"gitId":"StevenLiudw"},"content":" * @param message The error message.","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":67,"author":{"gitId":"StevenLiudw"},"content":" public String showError(String message) {","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"StevenLiudw"},"content":" return \"Error: \" + message;","lastModifiedDate":"2023-09-04"},{"lineNumber":69,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":70,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":71,"author":{"gitId":"StevenLiudw"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":72,"author":{"gitId":"StevenLiudw"},"content":" * Returns the Goodbye message.","lastModifiedDate":"2023-08-27"},{"lineNumber":73,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":74,"author":{"gitId":"StevenLiudw"},"content":" public String showGoodbye() {","lastModifiedDate":"2023-09-04"},{"lineNumber":75,"author":{"gitId":"StevenLiudw"},"content":" return \"Bye. Hope to see you again soon!\";","lastModifiedDate":"2023-09-04"},{"lineNumber":76,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":77,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":78,"author":{"gitId":"StevenLiudw"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":79,"author":{"gitId":"StevenLiudw"},"content":" * Returns the message for a deleted task.","lastModifiedDate":"2023-09-04"},{"lineNumber":80,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":81,"author":{"gitId":"StevenLiudw"},"content":" public String showDeletedTask(Task task) {","lastModifiedDate":"2023-09-04"},{"lineNumber":82,"author":{"gitId":"StevenLiudw"},"content":" return \"Noted. I\u0027ve removed this task:\\n \" + task;","lastModifiedDate":"2023-09-04"},{"lineNumber":83,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":84,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":85,"author":{"gitId":"StevenLiudw"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":86,"author":{"gitId":"StevenLiudw"},"content":" * Returns the message for an added task.","lastModifiedDate":"2023-09-04"},{"lineNumber":87,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":88,"author":{"gitId":"StevenLiudw"},"content":" public String showAddedTask(Task task) {","lastModifiedDate":"2023-09-04"},{"lineNumber":89,"author":{"gitId":"StevenLiudw"},"content":" return \"Got it. I\u0027ve added this task:\\n \" + task;","lastModifiedDate":"2023-09-04"},{"lineNumber":90,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":91,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":92,"author":{"gitId":"StevenLiudw"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":93,"author":{"gitId":"StevenLiudw"},"content":" * Returns the message for a marked task.","lastModifiedDate":"2023-09-04"},{"lineNumber":94,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":95,"author":{"gitId":"StevenLiudw"},"content":" public String showMarkedTask(Task task) {","lastModifiedDate":"2023-09-04"},{"lineNumber":96,"author":{"gitId":"StevenLiudw"},"content":" return \"Nice! I\u0027ve marked this task as done:\\n \" + task;","lastModifiedDate":"2023-09-04"},{"lineNumber":97,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":98,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":99,"author":{"gitId":"StevenLiudw"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":100,"author":{"gitId":"StevenLiudw"},"content":" * Returns the message for an unmarked task.","lastModifiedDate":"2023-09-04"},{"lineNumber":101,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":102,"author":{"gitId":"StevenLiudw"},"content":" public String showUnmarkedTask(Task task) {","lastModifiedDate":"2023-09-04"},{"lineNumber":103,"author":{"gitId":"StevenLiudw"},"content":" return \"OK, I\u0027ve marked this task as not done yet:\\n \" + task;","lastModifiedDate":"2023-09-04"},{"lineNumber":104,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":105,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":106,"author":{"gitId":"StevenLiudw"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":107,"author":{"gitId":"StevenLiudw"},"content":" * Returns tasks that match the search keyword.","lastModifiedDate":"2023-09-04"},{"lineNumber":108,"author":{"gitId":"StevenLiudw"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":109,"author":{"gitId":"StevenLiudw"},"content":" * @param tasks List of matched tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":110,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":111,"author":{"gitId":"StevenLiudw"},"content":" public String showFoundTasks(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-09-04"},{"lineNumber":112,"author":{"gitId":"StevenLiudw"},"content":" StringBuilder result \u003d new StringBuilder(\"Here are the matching tasks in your list:\\n\");","lastModifiedDate":"2023-09-04"},{"lineNumber":113,"author":{"gitId":"StevenLiudw"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-08-29"},{"lineNumber":114,"author":{"gitId":"StevenLiudw"},"content":" result.append((i + 1)).append(\".\").append(tasks.get(i).toString()).append(\"\\n\");","lastModifiedDate":"2023-09-04"},{"lineNumber":115,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":116,"author":{"gitId":"StevenLiudw"},"content":" return result.toString();","lastModifiedDate":"2023-09-04"},{"lineNumber":117,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":118,"author":{"gitId":"StevenLiudw"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"StevenLiudw":118}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"StevenLiudw"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"StevenLiudw"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"StevenLiudw"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"StevenLiudw"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"StevenLiudw"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"StevenLiudw"},"content":"\u003c?import javafx.scene.text.Font?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"StevenLiudw"},"content":"\u003cfx:root xmlns:fx\u003d\"http://javafx.com/fxml/1\" alignment\u003d\"TOP_RIGHT\" maxHeight\u003d\"Infinity\"","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"StevenLiudw"},"content":" maxWidth\u003d\"1.7976931348623157E308\"","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"StevenLiudw"},"content":" prefWidth\u003d\"400.0\" type\u003d\"javafx.scene.layout.HBox\" xmlns\u003d\"http://javafx.com/javafx/20.0.1\"\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"StevenLiudw"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"StevenLiudw"},"content":" \u003cLabel fx:id\u003d\"dialog\" text\u003d\"Label\" wrapText\u003d\"true\"\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"StevenLiudw"},"content":" \u003cfont\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"StevenLiudw"},"content":" \u003cFont name\u003d\"Andale Mono\" size\u003d\"13.0\"/\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"StevenLiudw"},"content":" \u003c/font\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"StevenLiudw"},"content":" \u003c/Label\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"StevenLiudw"},"content":" \u003cImageView fx:id\u003d\"displayPicture\" fitHeight\u003d\"50.0\" fitWidth\u003d\"50.0\" pickOnBounds\u003d\"true\" preserveRatio\u003d\"true\"/\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"StevenLiudw"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"StevenLiudw"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"StevenLiudw"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\"/\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"StevenLiudw"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"StevenLiudw"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"StevenLiudw":23}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"StevenLiudw"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"StevenLiudw"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"StevenLiudw"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"StevenLiudw"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"StevenLiudw"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"StevenLiudw"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"StevenLiudw"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"StevenLiudw"},"content":"\u003cAnchorPane maxHeight\u003d\"-Infinity\" maxWidth\u003d\"-Infinity\" minHeight\u003d\"-Infinity\"","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"StevenLiudw"},"content":" minWidth\u003d\"-Infinity\" prefWidth\u003d\"400.0\"","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"StevenLiudw"},"content":" xmlns\u003d\"http://javafx.com/javafx/17\"","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"StevenLiudw"},"content":" xmlns:fx\u003d\"http://javafx.com/fxml/1\"","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"StevenLiudw"},"content":" fx:controller\u003d\"duke.ui.MainWindow\"\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"StevenLiudw"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"StevenLiudw"},"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\" /\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"StevenLiudw"},"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\" /\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"StevenLiudw"},"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-04"},{"lineNumber":19,"author":{"gitId":"StevenLiudw"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"StevenLiudw"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefWidth\u003d\"388.0\" /\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"StevenLiudw"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"StevenLiudw"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"StevenLiudw"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"StevenLiudw"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"StevenLiudw":24}},{"path":"src/test/java/duke/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"StevenLiudw"},"content":"package duke;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"StevenLiudw"},"content":"import duke.command.Command;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"StevenLiudw"},"content":"import duke.command.ExitCommand;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"StevenLiudw"},"content":"import duke.command.ListCommand;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"StevenLiudw"},"content":"import duke.command.MarkCommand;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"StevenLiudw"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"StevenLiudw"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"StevenLiudw"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"StevenLiudw"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"StevenLiudw"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"StevenLiudw"},"content":" * Represents the unit tests for the Parser class.","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"StevenLiudw"},"content":"public class ParserTest {","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"StevenLiudw"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"StevenLiudw"},"content":" * Tests the parsing of the \u0027bye\u0027 command.","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"StevenLiudw"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"StevenLiudw"},"content":" public void byeTest() {","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"StevenLiudw"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"StevenLiudw"},"content":" Command command \u003d Parser.parse(\"bye\");","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"StevenLiudw"},"content":" assertTrue(command instanceof ExitCommand);","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"StevenLiudw"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"StevenLiudw"},"content":" fail(\"Exit command should be parsed without errors.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"StevenLiudw"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"StevenLiudw"},"content":" * Tests the parsing of the \u0027list\u0027 command.","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"StevenLiudw"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"StevenLiudw"},"content":" public void listTest() {","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"StevenLiudw"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"StevenLiudw"},"content":" Command command \u003d Parser.parse(\"list\");","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"StevenLiudw"},"content":" assertTrue(command instanceof ListCommand);","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"StevenLiudw"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"StevenLiudw"},"content":" fail(\"List command should be parsed without errors.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"StevenLiudw"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"StevenLiudw"},"content":" * Tests the parsing of the \u0027mark\u0027 command.","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"StevenLiudw"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"StevenLiudw"},"content":" public void markTest() {","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"StevenLiudw"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"StevenLiudw"},"content":" Command command \u003d Parser.parse(\"mark 1\");","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"StevenLiudw"},"content":" assertTrue(command instanceof MarkCommand);","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"StevenLiudw"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"StevenLiudw"},"content":" fail(\"Mark command should be parsed without errors.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"StevenLiudw"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"StevenLiudw"},"content":" * Tests the parsing of an invalid command.","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"StevenLiudw"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"StevenLiudw"},"content":" public void invalidCommandTest() {","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"StevenLiudw"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"StevenLiudw"},"content":" Command command \u003d Parser.parse(\"invalidCommand\");","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"StevenLiudw"},"content":" fail(\"Invalid command should throw a DukeException.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"StevenLiudw"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"StevenLiudw"},"content":" assertEquals(\"OOPS! :( ☹ I\u0027m sorry, but I don\u0027t know what that means :-(\", e.getMessage());","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"StevenLiudw"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"StevenLiudw":70}},{"path":"src/test/java/duke/TaskListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"StevenLiudw"},"content":"package duke;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"StevenLiudw"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"StevenLiudw"},"content":"import duke.task.TaskType;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"StevenLiudw"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"StevenLiudw"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"StevenLiudw"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"StevenLiudw"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"StevenLiudw"},"content":" * Represents the unit tests for the TaskList class.","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"StevenLiudw"},"content":"public class TaskListTest {","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"StevenLiudw"},"content":" /** TaskList object to be used for testing purposes. */","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"StevenLiudw"},"content":" private TaskList taskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"StevenLiudw"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"StevenLiudw"},"content":" * Initializes a new TaskList object for each test.","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"StevenLiudw"},"content":" @BeforeEach","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"StevenLiudw"},"content":" public void setUp() {","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"StevenLiudw"},"content":" taskList \u003d new TaskList();","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"StevenLiudw"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"StevenLiudw"},"content":" * Tests the getSize method when the TaskList is empty.","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"StevenLiudw"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"StevenLiudw"},"content":" public void getSize_emptyList() {","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"StevenLiudw"},"content":" assertEquals(0, taskList.getSize());","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"StevenLiudw"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"StevenLiudw"},"content":" * Tests the addition of a single task to the TaskList.","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"StevenLiudw"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"StevenLiudw"},"content":" public void addTask_addOneTask() {","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"StevenLiudw"},"content":" taskList.addTask(new Task(\"Test Task\", TaskType.TODO));","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"StevenLiudw"},"content":" assertEquals(1, taskList.getSize());","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"StevenLiudw"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"StevenLiudw"},"content":" * Tests the deleteTask method by adding a task and then deleting it.","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"StevenLiudw"},"content":" * Ensures that the deleted task is returned and the size of the list is updated.","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"StevenLiudw"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"StevenLiudw"},"content":" public void deleteTask_taskAdded_() {","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"StevenLiudw"},"content":" Task task \u003d new Task(\"Test Task\", TaskType.TODO);","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"StevenLiudw"},"content":" taskList.addTask(task);","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"StevenLiudw"},"content":" assertEquals(1, taskList.getSize());","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"StevenLiudw"},"content":" Task removedTask \u003d taskList.deleteTask(0);","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"StevenLiudw"},"content":" assertEquals(task, removedTask);","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"StevenLiudw"},"content":" assertEquals(0, taskList.getSize());","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"StevenLiudw"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"StevenLiudw":57}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"StevenLiudw"},"content":"todo read book","lastModifiedDate":"2023-08-23"},{"lineNumber":2,"author":{"gitId":"StevenLiudw"},"content":"deadline return book /by August 8th","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"StevenLiudw"},"content":"event project meeting /from Aug 6th 2pm /to 4pm","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"StevenLiudw"},"content":"mark 2","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"StevenLiudw"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"StevenLiudw"},"content":"blah","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"StevenLiudw"},"content":"todo","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"StevenLiudw"},"content":"delete 1","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"StevenLiudw"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"StevenLiudw"},"content":"bye","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"StevenLiudw":10}}] +[{"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":"StevenLiudw"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"StevenLiudw"},"content":"checkstyle {","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"StevenLiudw"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":18,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":19,"author":{"gitId":"StevenLiudw"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"StevenLiudw"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"StevenLiudw"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"StevenLiudw"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"StevenLiudw"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"StevenLiudw"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"StevenLiudw"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"StevenLiudw"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"StevenLiudw"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"StevenLiudw"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"StevenLiudw"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"StevenLiudw"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"StevenLiudw"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","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":"","lastModifiedDate":"2020-05-25"},{"lineNumber":49,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":50,"author":{"gitId":"StevenLiudw"},"content":" mainClass.set(\"duke.Duke\")","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":52,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":53,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":54,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":55,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":56,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":57,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":58,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":59,"author":{"gitId":"-"},"content":"run {","lastModifiedDate":"2020-05-25"},{"lineNumber":60,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":61,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"StevenLiudw":18,"-":43}},{"path":"data/duke.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"StevenLiudw"},"content":"T # 0 # borrow book # TODO","lastModifiedDate":"2023-09-10"},{"lineNumber":2,"author":{"gitId":"StevenLiudw"},"content":"T # 1 # sdfsgf # TODO","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"StevenLiudw"},"content":"D # 0 # return book # 2019-09-09 # null","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"StevenLiudw"},"content":"E # 0 # project meeting # 2019-10-15 - 2012-10-30 # haha","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"StevenLiudw":4}},{"path":"src/main/java/duke/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"StevenLiudw"},"content":"package duke;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"StevenLiudw"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"StevenLiudw"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"StevenLiudw"},"content":"import duke.ui.MainWindow;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"StevenLiudw"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"StevenLiudw"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"StevenLiudw"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"StevenLiudw"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"StevenLiudw"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"StevenLiudw"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"StevenLiudw"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"StevenLiudw"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"StevenLiudw"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"StevenLiudw"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"StevenLiudw"},"content":"import javafx.scene.shape.Circle;","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"StevenLiudw"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"StevenLiudw"},"content":" * An example of a custom control using FXML.","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"StevenLiudw"},"content":" * This control represents a dialog box consisting of an ImageView to represent the speaker\u0027s face and a label","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"StevenLiudw"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"StevenLiudw"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"StevenLiudw"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"StevenLiudw"},"content":" private Label dialog;","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"StevenLiudw"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"StevenLiudw"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"StevenLiudw"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"StevenLiudw"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"StevenLiudw"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"StevenLiudw"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"StevenLiudw"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"StevenLiudw"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"StevenLiudw"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"StevenLiudw"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"StevenLiudw"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"StevenLiudw"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"StevenLiudw"},"content":" assert dialog !\u003d null : \"Dialog label should be properly initialized!\";","lastModifiedDate":"2023-09-10"},{"lineNumber":43,"author":{"gitId":"StevenLiudw"},"content":" double radius \u003d 25.0;","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"StevenLiudw"},"content":" Circle clip \u003d new Circle(radius, radius, radius);","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"StevenLiudw"},"content":" assert dialog !\u003d null : \"Dialog label should be properly initialized!\";","lastModifiedDate":"2023-09-10"},{"lineNumber":46,"author":{"gitId":"StevenLiudw"},"content":" assert displayPicture !\u003d null : \"Display picture should be properly initialized!\";","lastModifiedDate":"2023-09-10"},{"lineNumber":47,"author":{"gitId":"StevenLiudw"},"content":" displayPicture.setClip(clip);","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"StevenLiudw"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"StevenLiudw"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"StevenLiudw"},"content":" private void flip() {","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"StevenLiudw"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"StevenLiudw"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"StevenLiudw"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"StevenLiudw"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"StevenLiudw"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"StevenLiudw"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"StevenLiudw"},"content":" public static DialogBox getDukeDialog(String text, Image img) {","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"StevenLiudw"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"StevenLiudw"},"content":" db.flip();","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"StevenLiudw"},"content":" return db;","lastModifiedDate":"2023-09-04"},{"lineNumber":69,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"StevenLiudw"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"StevenLiudw":70}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"StevenLiudw"},"content":"package duke;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"StevenLiudw"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"StevenLiudw"},"content":"import duke.command.Command;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"StevenLiudw"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"StevenLiudw"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"StevenLiudw"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"StevenLiudw"},"content":" * The main class for the Duke program.","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"StevenLiudw"},"content":" * It manages the initialization, execution, and termination of the program.","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":14,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"StevenLiudw"},"content":" /** Handles reading and storing tasks. */","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"StevenLiudw"},"content":" private Storage storage;","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"StevenLiudw"},"content":" /** List of tasks managed by Duke. */","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"StevenLiudw"},"content":" private TaskList tasks;","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":20,"author":{"gitId":"StevenLiudw"},"content":" /** User interface for interactions. */","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"StevenLiudw"},"content":" private final Ui ui;","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"StevenLiudw"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"StevenLiudw"},"content":" * Constructs a new Duke instance with the specified file path for storage.","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"StevenLiudw"},"content":" public Duke() {","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"StevenLiudw"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"StevenLiudw"},"content":" assert ui !\u003d null : \"UI should be properly initialized!\";","lastModifiedDate":"2023-09-10"},{"lineNumber":30,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"StevenLiudw"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"StevenLiudw"},"content":" storage \u003d new Storage(\"./data/duke.txt\");","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"StevenLiudw"},"content":" tasks \u003d new TaskList(storage.loadTasks());","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"StevenLiudw"},"content":" } catch (IOException ie) {","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"StevenLiudw"},"content":" ui.showError(\"An error occurred while initializing the storage: \" + ie.getMessage());","lastModifiedDate":"2023-09-10"},{"lineNumber":36,"author":{"gitId":"StevenLiudw"},"content":" System.exit(0);","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"StevenLiudw"},"content":" } catch (DukeException de) {","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"StevenLiudw"},"content":" ui.showLoadingError();","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"StevenLiudw"},"content":" tasks \u003d new TaskList();","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":42,"author":{"gitId":"StevenLiudw"},"content":" assert tasks !\u003d null : \"Tasks should be properly initialized!\";","lastModifiedDate":"2023-09-10"},{"lineNumber":43,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":44,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":45,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"StevenLiudw"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"StevenLiudw"},"content":" * You should have your own function to generate a response to user input.","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"StevenLiudw"},"content":" * Replace this stub with your completed method.","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"StevenLiudw"},"content":" public String getResponse(String input) {","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"StevenLiudw"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"StevenLiudw"},"content":" ui.showLine(); // show the divider line (\"_______\")","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"StevenLiudw"},"content":" Command c \u003d Parser.parse(input);","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"StevenLiudw"},"content":" return c.execute(tasks, ui, storage);","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"StevenLiudw"},"content":" } catch (IOException ie) {","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"StevenLiudw"},"content":" return ui.showError(ie.getMessage());","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"StevenLiudw"},"content":" } catch (DukeException de) {","lastModifiedDate":"2023-08-27"},{"lineNumber":59,"author":{"gitId":"StevenLiudw"},"content":" return ui.showError(de.getMessage());","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"StevenLiudw"},"content":" } finally {","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"StevenLiudw"},"content":" ui.showLine();","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":63,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":64,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":65,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"StevenLiudw":63,"-":2}},{"path":"src/main/java/duke/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"StevenLiudw"},"content":"package duke;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"StevenLiudw"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"StevenLiudw"},"content":" * Represents exceptions that are specific to the Duke application.","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"StevenLiudw"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"StevenLiudw"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"StevenLiudw"},"content":" * Constructs a new DukeException with the specified error message.","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"StevenLiudw"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"StevenLiudw"},"content":" * @param errorMessages The specific error message for this exception.","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"StevenLiudw"},"content":" public DukeException(String... errorMessages) {","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"StevenLiudw"},"content":" super(String.join(\", \", errorMessages));","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"StevenLiudw"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"StevenLiudw"},"content":" * Retrieves the error message of this exception, prefixed with \"OOPS! :(\".","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"StevenLiudw"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"StevenLiudw"},"content":" * @return The prefixed error message.","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"StevenLiudw"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"StevenLiudw"},"content":" public String getMessage() {","lastModifiedDate":"2023-08-23"},{"lineNumber":23,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"StevenLiudw"},"content":" return \"OOPS! :( \" + super.getMessage();","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":26,"author":{"gitId":"StevenLiudw"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"StevenLiudw":26}},{"path":"src/main/java/duke/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"StevenLiudw"},"content":"package duke;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"StevenLiudw"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"StevenLiudw"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"StevenLiudw"},"content":" * A launcher class to workaround classpath issues.","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"StevenLiudw"},"content":"public class Launcher {","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"StevenLiudw"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"StevenLiudw"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"StevenLiudw"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"StevenLiudw":12}},{"path":"src/main/java/duke/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"StevenLiudw"},"content":"package duke;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"StevenLiudw"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"StevenLiudw"},"content":"import duke.ui.MainWindow;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"StevenLiudw"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"StevenLiudw"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"StevenLiudw"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"StevenLiudw"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"StevenLiudw"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"StevenLiudw"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"StevenLiudw"},"content":" * A GUI for Duke using FXML.","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"StevenLiudw"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"StevenLiudw"},"content":" private Duke duke \u003d new Duke();","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"StevenLiudw"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"StevenLiudw"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"StevenLiudw"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"StevenLiudw"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"StevenLiudw"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"StevenLiudw"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"StevenLiudw"},"content":" stage.setTitle(\"Iron Man\");","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"StevenLiudw"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"StevenLiudw"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setDuke(duke);","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"StevenLiudw"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().printIntroduction();","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"StevenLiudw"},"content":" stage.show();","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"StevenLiudw"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"StevenLiudw"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"StevenLiudw"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"StevenLiudw":33}},{"path":"src/main/java/duke/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"StevenLiudw"},"content":"package duke;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"StevenLiudw"},"content":"import duke.command.AddCommand;","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"StevenLiudw"},"content":"import duke.command.Command;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"StevenLiudw"},"content":"import duke.command.DeleteCommand;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"StevenLiudw"},"content":"import duke.command.ExitCommand;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"StevenLiudw"},"content":"import duke.command.FindCommand;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"StevenLiudw"},"content":"import duke.command.ListCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"StevenLiudw"},"content":"import duke.command.MarkCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"StevenLiudw"},"content":"import duke.command.UnMarkCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"StevenLiudw"},"content":"import duke.command.AddTagCommand;","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"StevenLiudw"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"StevenLiudw"},"content":"import duke.task.Event;","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"StevenLiudw"},"content":"import duke.task.Todo;","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"StevenLiudw"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"StevenLiudw"},"content":" * Represents a parser that makes sense of user commands.","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"StevenLiudw"},"content":"public class Parser {","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"StevenLiudw"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"StevenLiudw"},"content":" * Parses the user\u0027s command and returns the corresponding command object.","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"StevenLiudw"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"StevenLiudw"},"content":" * @param fullCommand The full string command provided by the user.","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"StevenLiudw"},"content":" * @return The corresponding Command object.","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"StevenLiudw"},"content":" * @throws DukeException If the command is unrecognized or invalid.","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"StevenLiudw"},"content":" public static Command parse(String fullCommand) throws DukeException {","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"StevenLiudw"},"content":" assert fullCommand !\u003d null : \"Provided command string should not be null!\";","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"StevenLiudw"},"content":" String[] splits \u003d fullCommand.split(\" \", 2);","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"StevenLiudw"},"content":" assert splits.length \u003e 0 : \"Command split array should have at least one element!\";","lastModifiedDate":"2023-09-10"},{"lineNumber":30,"author":{"gitId":"StevenLiudw"},"content":" String command \u003d splits[0].trim();","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"StevenLiudw"},"content":" switch (command) {","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"StevenLiudw"},"content":" case (\"bye\"):","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"StevenLiudw"},"content":" return new ExitCommand();","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"StevenLiudw"},"content":" case (\"list\"):","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"StevenLiudw"},"content":" return new ListCommand();","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"StevenLiudw"},"content":" case (\"mark\"):","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"StevenLiudw"},"content":" return new MarkCommand(Integer.parseInt(splits[1].trim()) - 1);","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"StevenLiudw"},"content":" case (\"unmark\"):","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"StevenLiudw"},"content":" return new UnMarkCommand(Integer.parseInt(splits[1].trim()) - 1);","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"StevenLiudw"},"content":" case (\"todo\"):","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"StevenLiudw"},"content":" return new AddCommand(new Todo(splits[1].trim()));","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"StevenLiudw"},"content":" case (\"event\"):","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"StevenLiudw"},"content":" String[] temfirst \u003d splits[1].split(\"/from\", 2);","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"StevenLiudw"},"content":" String[] temsecond \u003d temfirst[1].split(\"/to\", 2);","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"StevenLiudw"},"content":" String description \u003d temfirst[0].trim();","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"StevenLiudw"},"content":" String start \u003d temsecond[0].trim();","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"StevenLiudw"},"content":" String end \u003d temsecond[1].trim();","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"StevenLiudw"},"content":" return new AddCommand(new Event(start, end, description));","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"StevenLiudw"},"content":" case (\"deadline\"): {","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"StevenLiudw"},"content":" String[] tem \u003d splits[1].split(\"/by\", 2);","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"StevenLiudw"},"content":" String deadlineDescription \u003d tem[0].trim();","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"StevenLiudw"},"content":" String time \u003d tem[1].trim();","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"StevenLiudw"},"content":" return new AddCommand(new Deadline(deadlineDescription, time));","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"StevenLiudw"},"content":" case (\"delete\"):","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"StevenLiudw"},"content":" return new DeleteCommand(Integer.parseInt(splits[1].trim()));","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"StevenLiudw"},"content":" case (\"find\"):","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"StevenLiudw"},"content":" return new FindCommand(splits[1].trim());","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"StevenLiudw"},"content":" case (\"tag\"):","lastModifiedDate":"2023-09-10"},{"lineNumber":60,"author":{"gitId":"StevenLiudw"},"content":" String[] parts \u003d splits[1].split(\" \", 2);","lastModifiedDate":"2023-09-10"},{"lineNumber":61,"author":{"gitId":"StevenLiudw"},"content":" if (parts.length !\u003d 2) {","lastModifiedDate":"2023-09-10"},{"lineNumber":62,"author":{"gitId":"StevenLiudw"},"content":" throw new DukeException(\"Please provide a valid task index and tag.\");","lastModifiedDate":"2023-09-10"},{"lineNumber":63,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":64,"author":{"gitId":"StevenLiudw"},"content":" int taskIndex \u003d Integer.parseInt(parts[0].trim()) - 1;","lastModifiedDate":"2023-09-10"},{"lineNumber":65,"author":{"gitId":"StevenLiudw"},"content":" String tag \u003d parts[1].trim();","lastModifiedDate":"2023-09-10"},{"lineNumber":66,"author":{"gitId":"StevenLiudw"},"content":" return new AddTagCommand(taskIndex, tag);","lastModifiedDate":"2023-09-10"},{"lineNumber":67,"author":{"gitId":"StevenLiudw"},"content":" default:","lastModifiedDate":"2023-08-27"},{"lineNumber":68,"author":{"gitId":"StevenLiudw"},"content":" throw new DukeException(\"☹ I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":70,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":71,"author":{"gitId":"StevenLiudw"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"StevenLiudw":71}},{"path":"src/main/java/duke/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"StevenLiudw"},"content":"package duke;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"StevenLiudw"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"StevenLiudw"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"StevenLiudw"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"StevenLiudw"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"StevenLiudw"},"content":" * Represents a list of tasks in Duke. Provides methods to manipulate and access the tasks.","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"StevenLiudw"},"content":"public class TaskList {","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"StevenLiudw"},"content":" private ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"StevenLiudw"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"StevenLiudw"},"content":" * Initializes an empty task list.","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"StevenLiudw"},"content":" public TaskList() {","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"StevenLiudw"},"content":" tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"StevenLiudw"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"StevenLiudw"},"content":" * Initializes the task list with given tasks.","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"StevenLiudw"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"StevenLiudw"},"content":" * @param tasks An ArrayList of tasks.","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"StevenLiudw"},"content":" public TaskList(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"StevenLiudw"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"StevenLiudw"},"content":" private boolean validIndex(int index) {","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"StevenLiudw"},"content":" return index \u003e\u003d 0 \u0026\u0026 index \u003c tasks.size();","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":33,"author":{"gitId":"StevenLiudw"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"StevenLiudw"},"content":" * Marks a task as done.","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"StevenLiudw"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"StevenLiudw"},"content":" * @param taskIndex The index of the task in the list.","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"StevenLiudw"},"content":" public void mark(int taskIndex) {","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"StevenLiudw"},"content":" assert validIndex(taskIndex) : \"Provided task index is out of range!\";","lastModifiedDate":"2023-09-10"},{"lineNumber":40,"author":{"gitId":"StevenLiudw"},"content":" tasks.get(taskIndex).mark();","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"StevenLiudw"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"StevenLiudw"},"content":" * Retrieves a task based on its index.","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"StevenLiudw"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"StevenLiudw"},"content":" * @param taskIndex The index of the task in the list.","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"StevenLiudw"},"content":" * @return The Task object at the given index.","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"StevenLiudw"},"content":" public Task getTask(int taskIndex) {","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":51,"author":{"gitId":"StevenLiudw"},"content":" return tasks.get(taskIndex);","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"StevenLiudw"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"StevenLiudw"},"content":" * Returns the number of tasks in the list.","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"StevenLiudw"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"StevenLiudw"},"content":" * @return An integer representing the size of the list.","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":59,"author":{"gitId":"StevenLiudw"},"content":" public int getSize() {","lastModifiedDate":"2023-08-27"},{"lineNumber":60,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"StevenLiudw"},"content":" return this.tasks.size();","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":63,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":64,"author":{"gitId":"StevenLiudw"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":65,"author":{"gitId":"StevenLiudw"},"content":" * Returns the entire list of tasks.","lastModifiedDate":"2023-08-27"},{"lineNumber":66,"author":{"gitId":"StevenLiudw"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":67,"author":{"gitId":"StevenLiudw"},"content":" * @return An ArrayList of Task objects.","lastModifiedDate":"2023-08-27"},{"lineNumber":68,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":69,"author":{"gitId":"StevenLiudw"},"content":" public ArrayList\u003cTask\u003e getTasks() {","lastModifiedDate":"2023-08-27"},{"lineNumber":70,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"StevenLiudw"},"content":" return this.tasks;","lastModifiedDate":"2023-08-27"},{"lineNumber":72,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":73,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":74,"author":{"gitId":"StevenLiudw"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":75,"author":{"gitId":"StevenLiudw"},"content":" * Unmarks a task (i.e., sets it as not done).","lastModifiedDate":"2023-08-27"},{"lineNumber":76,"author":{"gitId":"StevenLiudw"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":77,"author":{"gitId":"StevenLiudw"},"content":" * @param taskIndex The index of the task in the list.","lastModifiedDate":"2023-08-27"},{"lineNumber":78,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":79,"author":{"gitId":"StevenLiudw"},"content":" public void unmark(int taskIndex) {","lastModifiedDate":"2023-08-27"},{"lineNumber":80,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":81,"author":{"gitId":"StevenLiudw"},"content":" tasks.get(taskIndex).unmark();","lastModifiedDate":"2023-08-27"},{"lineNumber":82,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":83,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":84,"author":{"gitId":"StevenLiudw"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":85,"author":{"gitId":"StevenLiudw"},"content":" * Adds a new task to the list.","lastModifiedDate":"2023-08-27"},{"lineNumber":86,"author":{"gitId":"StevenLiudw"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":87,"author":{"gitId":"StevenLiudw"},"content":" * @param task The Task object to be added.","lastModifiedDate":"2023-08-27"},{"lineNumber":88,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":89,"author":{"gitId":"StevenLiudw"},"content":" public void addTask(Task task) {","lastModifiedDate":"2023-08-27"},{"lineNumber":90,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":91,"author":{"gitId":"StevenLiudw"},"content":" tasks.add(task);","lastModifiedDate":"2023-08-27"},{"lineNumber":92,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":93,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":94,"author":{"gitId":"StevenLiudw"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":95,"author":{"gitId":"StevenLiudw"},"content":" * Deletes a task from the list and returns it.","lastModifiedDate":"2023-08-27"},{"lineNumber":96,"author":{"gitId":"StevenLiudw"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":97,"author":{"gitId":"StevenLiudw"},"content":" * @param taskNum The index of the task in the list.","lastModifiedDate":"2023-08-27"},{"lineNumber":98,"author":{"gitId":"StevenLiudw"},"content":" * @return The Task object that was removed.","lastModifiedDate":"2023-08-27"},{"lineNumber":99,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":100,"author":{"gitId":"StevenLiudw"},"content":" public Task deleteTask(int taskNum) {","lastModifiedDate":"2023-08-27"},{"lineNumber":101,"author":{"gitId":"StevenLiudw"},"content":" Task tem \u003d tasks.get(taskNum);","lastModifiedDate":"2023-08-27"},{"lineNumber":102,"author":{"gitId":"StevenLiudw"},"content":" tasks.remove(taskNum);","lastModifiedDate":"2023-08-27"},{"lineNumber":103,"author":{"gitId":"StevenLiudw"},"content":" return tem;","lastModifiedDate":"2023-08-27"},{"lineNumber":104,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":105,"author":{"gitId":"StevenLiudw"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":106,"author":{"gitId":"StevenLiudw"},"content":" * Sets a tag for a task based on its index.","lastModifiedDate":"2023-09-10"},{"lineNumber":107,"author":{"gitId":"StevenLiudw"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":108,"author":{"gitId":"StevenLiudw"},"content":" * @param taskIndex The index of the task in the list.","lastModifiedDate":"2023-09-10"},{"lineNumber":109,"author":{"gitId":"StevenLiudw"},"content":" * @param tag The tag to be added to the task.","lastModifiedDate":"2023-09-10"},{"lineNumber":110,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":111,"author":{"gitId":"StevenLiudw"},"content":" public void setTag(int taskIndex, String tag) {","lastModifiedDate":"2023-09-10"},{"lineNumber":112,"author":{"gitId":"StevenLiudw"},"content":" if (validIndex(taskIndex)) {","lastModifiedDate":"2023-09-10"},{"lineNumber":113,"author":{"gitId":"StevenLiudw"},"content":" tasks.get(taskIndex).setTag(tag);","lastModifiedDate":"2023-09-10"},{"lineNumber":114,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":115,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":116,"author":{"gitId":"StevenLiudw"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":117,"author":{"gitId":"StevenLiudw"},"content":" * Finds tasks by keyword and displays them using the UI.","lastModifiedDate":"2023-08-29"},{"lineNumber":118,"author":{"gitId":"StevenLiudw"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":119,"author":{"gitId":"StevenLiudw"},"content":" * @param keyword The search keyword.","lastModifiedDate":"2023-08-29"},{"lineNumber":120,"author":{"gitId":"StevenLiudw"},"content":" * @param ui The UI object to display results.","lastModifiedDate":"2023-08-29"},{"lineNumber":121,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":122,"author":{"gitId":"StevenLiudw"},"content":" public String findTasks(String keyword, Ui ui) {","lastModifiedDate":"2023-09-04"},{"lineNumber":123,"author":{"gitId":"StevenLiudw"},"content":" ArrayList\u003cTask\u003e matchedTasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-29"},{"lineNumber":124,"author":{"gitId":"StevenLiudw"},"content":" for (Task task : tasks) {","lastModifiedDate":"2023-08-29"},{"lineNumber":125,"author":{"gitId":"StevenLiudw"},"content":" if (task.getDescription().contains(keyword)) {","lastModifiedDate":"2023-08-29"},{"lineNumber":126,"author":{"gitId":"StevenLiudw"},"content":" matchedTasks.add(task);","lastModifiedDate":"2023-08-29"},{"lineNumber":127,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":128,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":129,"author":{"gitId":"StevenLiudw"},"content":" return ui.showFoundTasks(matchedTasks);","lastModifiedDate":"2023-09-04"},{"lineNumber":130,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":131,"author":{"gitId":"StevenLiudw"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"StevenLiudw":131}},{"path":"src/main/java/duke/command/AddCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"StevenLiudw"},"content":"package duke.command;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"StevenLiudw"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"StevenLiudw"},"content":"import duke.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"StevenLiudw"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"StevenLiudw"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"StevenLiudw"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"StevenLiudw"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"StevenLiudw"},"content":" * Represents an add command.","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"StevenLiudw"},"content":" * The add command is used to add tasks to the task list.","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"StevenLiudw"},"content":"public class AddCommand extends Command {","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"StevenLiudw"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"StevenLiudw"},"content":" * The task to be added.","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"StevenLiudw"},"content":" private final Task task;","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"StevenLiudw"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"StevenLiudw"},"content":" * Creates a new AddCommand with the specified task.","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"StevenLiudw"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"StevenLiudw"},"content":" * @param task The task to be added.","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"StevenLiudw"},"content":" public AddCommand(Task task) {","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"StevenLiudw"},"content":" this.task \u003d task;","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"StevenLiudw"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"StevenLiudw"},"content":" * Indicates whether this command will exit the application.","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"StevenLiudw"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"StevenLiudw"},"content":" * @return false since this command does not exit the application.","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"StevenLiudw"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"StevenLiudw"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"StevenLiudw"},"content":" return false;","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"StevenLiudw"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"StevenLiudw"},"content":" * Executes the add command, adding the task to the task list,","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"StevenLiudw"},"content":" * saving the task list, and notifying the user.","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"StevenLiudw"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"StevenLiudw"},"content":" * @param tasks The list of tasks.","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"StevenLiudw"},"content":" * @param ui The user interface.","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"StevenLiudw"},"content":" * @param storage The storage to save tasks.","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"StevenLiudw"},"content":" * @throws IOException If there\u0027s an error saving the tasks.","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"StevenLiudw"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"StevenLiudw"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) throws IOException {","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"StevenLiudw"},"content":" tasks.addTask(task);","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"StevenLiudw"},"content":" storage.save(tasks);","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"StevenLiudw"},"content":" return ui.showAddedTask(task);","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"StevenLiudw"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"StevenLiudw":58}},{"path":"src/main/java/duke/command/AddTagCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"StevenLiudw"},"content":"package duke.command;","lastModifiedDate":"2023-09-10"},{"lineNumber":2,"author":{"gitId":"StevenLiudw"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"StevenLiudw"},"content":"import duke.DukeException;","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"StevenLiudw"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"StevenLiudw"},"content":"import duke.TaskList;","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"StevenLiudw"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"StevenLiudw"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"StevenLiudw"},"content":"public class AddTagCommand extends Command {","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"StevenLiudw"},"content":" private final int taskIndex;","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"StevenLiudw"},"content":" private final String tag;","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"StevenLiudw"},"content":" public AddTagCommand(int taskIndex, String tag) {","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"StevenLiudw"},"content":" this.taskIndex \u003d taskIndex;","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"StevenLiudw"},"content":" this.tag \u003d tag;","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"StevenLiudw"},"content":" @Override","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"StevenLiudw"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-10"},{"lineNumber":21,"author":{"gitId":"StevenLiudw"},"content":" return false;","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"StevenLiudw"},"content":" @Override","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"StevenLiudw"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) throws IOException, DukeException {","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"StevenLiudw"},"content":" if (taskIndex \u003c 0 || taskIndex \u003e\u003d tasks.getSize()) {","lastModifiedDate":"2023-09-10"},{"lineNumber":27,"author":{"gitId":"StevenLiudw"},"content":" throw new DukeException(\"Invalid task number. Please provide a valid task number.\");","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":30,"author":{"gitId":"StevenLiudw"},"content":" Task task \u003d tasks.getTask(taskIndex);","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"StevenLiudw"},"content":" task.setTag(tag);","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"StevenLiudw"},"content":" storage.save(tasks);","lastModifiedDate":"2023-09-10"},{"lineNumber":33,"author":{"gitId":"StevenLiudw"},"content":" return ui.showTaggedTask(task);","lastModifiedDate":"2023-09-10"},{"lineNumber":34,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":35,"author":{"gitId":"StevenLiudw"},"content":"}","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"StevenLiudw":35}},{"path":"src/main/java/duke/command/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"StevenLiudw"},"content":"package duke.command;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"StevenLiudw"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"StevenLiudw"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"StevenLiudw"},"content":"import duke.TaskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"StevenLiudw"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"StevenLiudw"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"StevenLiudw"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"StevenLiudw"},"content":" * Represents an abstract command to be executed in the Duke program.","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"StevenLiudw"},"content":" * This class provides a template for specific commands like adding or deleting tasks.","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"StevenLiudw"},"content":"public abstract class Command {","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"StevenLiudw"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"StevenLiudw"},"content":" * Indicates whether the command will cause the program to exit.","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"StevenLiudw"},"content":" private boolean isExit \u003d false;","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"StevenLiudw"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"StevenLiudw"},"content":" * Executes the specific command.","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"StevenLiudw"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"StevenLiudw"},"content":" * @param tasks The list of tasks.","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"StevenLiudw"},"content":" * @param ui The user interface handler.","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"StevenLiudw"},"content":" * @param storage The storage handler to load or save tasks.","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"StevenLiudw"},"content":" * @throws IOException If there\u0027s an error accessing or modifying the storage.","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"StevenLiudw"},"content":" * @throws DukeException If there are issues executing the command.","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"StevenLiudw"},"content":" public abstract String execute(TaskList tasks, Ui ui, Storage storage) throws IOException, DukeException;","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"StevenLiudw"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"StevenLiudw"},"content":" * Determines if Duke should continue listening for commands or terminate.","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"StevenLiudw"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"StevenLiudw"},"content":" * @return true if Duke should exit, false otherwise.","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"StevenLiudw"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"StevenLiudw"},"content":" return this.isExit;","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"StevenLiudw"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"StevenLiudw":43}},{"path":"src/main/java/duke/command/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"StevenLiudw"},"content":"package duke.command;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"StevenLiudw"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"StevenLiudw"},"content":"import duke.DukeException;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"StevenLiudw"},"content":"import duke.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"StevenLiudw"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"StevenLiudw"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"StevenLiudw"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"StevenLiudw"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"StevenLiudw"},"content":" * Represents a command to delete a task from the task list in the Duke program.","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"StevenLiudw"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"StevenLiudw"},"content":" /** Index of the task to be deleted from the task list. */","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"StevenLiudw"},"content":" private final int taskIndex;","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"StevenLiudw"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"StevenLiudw"},"content":" * Constructs a new DeleteCommand with the specified task index.","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"StevenLiudw"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"StevenLiudw"},"content":" * @param taskIndex Index of the task to be deleted.","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"StevenLiudw"},"content":" public DeleteCommand(int taskIndex) {","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"StevenLiudw"},"content":" this.taskIndex \u003d taskIndex;","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"StevenLiudw"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"StevenLiudw"},"content":" * Determines if the Duke program should exit.","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"StevenLiudw"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"StevenLiudw"},"content":" * @return false since the delete command should not terminate the program.","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"StevenLiudw"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"StevenLiudw"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"StevenLiudw"},"content":" return false;","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"StevenLiudw"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"StevenLiudw"},"content":" * Executes the delete command, removing a task from the task list,","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"StevenLiudw"},"content":" * saving the updated list and then notifying the user.","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"StevenLiudw"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"StevenLiudw"},"content":" * @param tasks The list of tasks.","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"StevenLiudw"},"content":" * @param ui The user interface handler.","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"StevenLiudw"},"content":" * @param storage The storage handler.","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"StevenLiudw"},"content":" * @throws IOException If there\u0027s an error saving the tasks.","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"StevenLiudw"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"StevenLiudw"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) throws IOException {","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"StevenLiudw"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"StevenLiudw"},"content":" if (taskIndex \u003c 0 || taskIndex \u003e\u003d tasks.getSize()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"StevenLiudw"},"content":" throw new DukeException(\"Invalid task number!\");","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"StevenLiudw"},"content":" Task removedTask \u003d tasks.deleteTask(taskIndex);","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"StevenLiudw"},"content":" storage.save(tasks);","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"StevenLiudw"},"content":" return ui.showDeletedTask(removedTask);","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":59,"author":{"gitId":"StevenLiudw"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":60,"author":{"gitId":"StevenLiudw"},"content":" return ui.showError(e.getMessage());","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":63,"author":{"gitId":"StevenLiudw"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"StevenLiudw":63}},{"path":"src/main/java/duke/command/ExitCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"StevenLiudw"},"content":"package duke.command;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"StevenLiudw"},"content":"import duke.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"StevenLiudw"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"StevenLiudw"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"StevenLiudw"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"StevenLiudw"},"content":" * Represents a command to exit the application.","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"StevenLiudw"},"content":"public class ExitCommand extends Command {","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"StevenLiudw"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"StevenLiudw"},"content":" * Indicates that this command should cause the application to exit.","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"StevenLiudw"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"StevenLiudw"},"content":" * @return true, as this is an exit command.","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"StevenLiudw"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"StevenLiudw"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"StevenLiudw"},"content":" return true;","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"StevenLiudw"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"StevenLiudw"},"content":" * Executes the exit command. Optionally save tasks or do any clean up here if needed.","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"StevenLiudw"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"StevenLiudw"},"content":" * @param tasks The list of tasks.","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"StevenLiudw"},"content":" * @param ui The user interface handler.","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"StevenLiudw"},"content":" * @param storage The storage handler.","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"StevenLiudw"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"StevenLiudw"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"StevenLiudw"},"content":" return ui.showGoodbye();","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"StevenLiudw"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"StevenLiudw":34}},{"path":"src/main/java/duke/command/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"StevenLiudw"},"content":"package duke.command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"StevenLiudw"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"StevenLiudw"},"content":"import duke.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"StevenLiudw"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"StevenLiudw"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"StevenLiudw"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"StevenLiudw"},"content":" * Represents a command to search and display tasks that contain a specific keyword.","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"StevenLiudw"},"content":"public class FindCommand extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"StevenLiudw"},"content":" private final String keyword;","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"StevenLiudw"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"StevenLiudw"},"content":" * Constructs a new FindCommand instance with a specified keyword to search for.","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"StevenLiudw"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"StevenLiudw"},"content":" * @param keyword The keyword to match tasks against.","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"StevenLiudw"},"content":" public FindCommand(String keyword) {","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"StevenLiudw"},"content":" this.keyword \u003d keyword;","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"StevenLiudw"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"StevenLiudw"},"content":" * Executes the find command, searching the tasks for any that contain the keyword.","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"StevenLiudw"},"content":" * Matching tasks are then displayed to the user via the UI.","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"StevenLiudw"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"StevenLiudw"},"content":" * @param tasks The list of tasks to search through.","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"StevenLiudw"},"content":" * @param ui The UI instance to display matching tasks to the user.","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"StevenLiudw"},"content":" * @param storage The storage instance, not used in this command but needed for command interface.","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"StevenLiudw"},"content":" * @throws IOException If there\u0027s an issue with input or output operations.","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"StevenLiudw"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"StevenLiudw"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) throws IOException {","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"StevenLiudw"},"content":" return tasks.findTasks(keyword, ui);","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"StevenLiudw"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"StevenLiudw":39}},{"path":"src/main/java/duke/command/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"StevenLiudw"},"content":"package duke.command;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"StevenLiudw"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"StevenLiudw"},"content":"import duke.TaskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"StevenLiudw"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"StevenLiudw"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"StevenLiudw"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"StevenLiudw"},"content":" * Represents a command to list out all the tasks.","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"StevenLiudw"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"StevenLiudw"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"StevenLiudw"},"content":" * Executes the list command by printing out all the tasks.","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"StevenLiudw"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"StevenLiudw"},"content":" * @param tasks The list of tasks to be printed.","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"StevenLiudw"},"content":" * @param ui The user interface handler.","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"StevenLiudw"},"content":" * @param storage The storage handler.","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"StevenLiudw"},"content":" * @throws DukeException If there\u0027s an issue executing the list command.","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"StevenLiudw"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"StevenLiudw"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"StevenLiudw"},"content":" StringBuilder result \u003d new StringBuilder(\"Here are the matching tasks in your list:\\n\");","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"StevenLiudw"},"content":" for (int i \u003d 0; i \u003c tasks.getSize(); i++) {","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"StevenLiudw"},"content":" result.append((i + 1)).append(\".\").append(tasks.getTask(i).toString()).append(\"\\n\");","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"StevenLiudw"},"content":" return result.toString();","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"StevenLiudw"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"StevenLiudw"},"content":" * Indicates whether the command should exit the application.","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"StevenLiudw"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"StevenLiudw"},"content":" * @return false, as \u0027list\u0027 command doesn\u0027t terminate the application.","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"StevenLiudw"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"StevenLiudw"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"StevenLiudw"},"content":" return false;","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"StevenLiudw"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"StevenLiudw":40}},{"path":"src/main/java/duke/command/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"StevenLiudw"},"content":"package duke.command;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"StevenLiudw"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"StevenLiudw"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"StevenLiudw"},"content":"import duke.TaskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"StevenLiudw"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"StevenLiudw"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"StevenLiudw"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"StevenLiudw"},"content":" * Represents a command to mark a task as completed.","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"StevenLiudw"},"content":"public class MarkCommand extends Command {","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"StevenLiudw"},"content":" private final int taskIndex;","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"StevenLiudw"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"StevenLiudw"},"content":" * Initializes a new instance of the MarkCommand with the specified task index.","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"StevenLiudw"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"StevenLiudw"},"content":" * @param taskIndex The index of the task to be marked as completed.","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"StevenLiudw"},"content":" public MarkCommand(int taskIndex) {","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"StevenLiudw"},"content":" this.taskIndex \u003d taskIndex;","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"StevenLiudw"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"StevenLiudw"},"content":" * Indicates whether the command should exit the application.","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"StevenLiudw"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"StevenLiudw"},"content":" * @return false, as the \u0027mark\u0027 command doesn\u0027t terminate the application.","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"StevenLiudw"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"StevenLiudw"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"StevenLiudw"},"content":" return false;","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"StevenLiudw"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"StevenLiudw"},"content":" * Executes the mark command by marking a task as completed.","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"StevenLiudw"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"StevenLiudw"},"content":" * @param tasks The list of tasks.","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"StevenLiudw"},"content":" * @param ui The user interface handler.","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"StevenLiudw"},"content":" * @param storage The storage handler.","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"StevenLiudw"},"content":" * @throws IOException If there is an issue with file IO.","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"StevenLiudw"},"content":" * @throws DukeException If there\u0027s an issue executing the mark command.","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"StevenLiudw"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"StevenLiudw"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) throws IOException, DukeException {","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"StevenLiudw"},"content":" if (taskIndex \u003c 0 || taskIndex \u003e\u003d tasks.getSize()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"StevenLiudw"},"content":" throw new DukeException(\"Invalid input number. :( Please provide a valid task number.\");","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"StevenLiudw"},"content":" tasks.mark(taskIndex);","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"StevenLiudw"},"content":" storage.save(tasks);","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"StevenLiudw"},"content":" return ui.showMarkedTask(tasks.getTask(taskIndex));","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"StevenLiudw"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"StevenLiudw":56}},{"path":"src/main/java/duke/command/UnMarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"StevenLiudw"},"content":"package duke.command;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"StevenLiudw"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"StevenLiudw"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"StevenLiudw"},"content":"import duke.TaskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"StevenLiudw"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"StevenLiudw"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"StevenLiudw"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"StevenLiudw"},"content":" * Represents a command to unmark a task as done.","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"StevenLiudw"},"content":"public class UnMarkCommand extends Command {","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"StevenLiudw"},"content":" /** Index of the task to unmark in the task list. */","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"StevenLiudw"},"content":" private final int taskIndex;","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"StevenLiudw"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"StevenLiudw"},"content":" * Constructs a new UnMarkCommand with the specified task index.","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"StevenLiudw"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"StevenLiudw"},"content":" * @param taskIndex Index of the task in the task list to unmark as done.","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"StevenLiudw"},"content":" public UnMarkCommand(int taskIndex) {","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"StevenLiudw"},"content":" this.taskIndex \u003d taskIndex;","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"StevenLiudw"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"StevenLiudw"},"content":" * Indicates whether this command should terminate the application.","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"StevenLiudw"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"StevenLiudw"},"content":" * @return false since this command does not exit the application.","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"StevenLiudw"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"StevenLiudw"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"StevenLiudw"},"content":" return false;","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"StevenLiudw"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"StevenLiudw"},"content":" * Executes the unmark command by unmarking the specified task in the task list.","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"StevenLiudw"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"StevenLiudw"},"content":" * @param tasks The list of tasks.","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"StevenLiudw"},"content":" * @param ui The user interface used to interact with the user.","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"StevenLiudw"},"content":" * @param storage The storage system used to save and load tasks.","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"StevenLiudw"},"content":" * @throws IOException If there\u0027s an error saving the tasks.","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"StevenLiudw"},"content":" * @throws DukeException If there\u0027s an error related to Duke\u0027s operation, such as invalid task number.","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"StevenLiudw"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"StevenLiudw"},"content":" public String execute(TaskList tasks, Ui ui, Storage storage) throws IOException, DukeException {","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"StevenLiudw"},"content":" if (taskIndex \u003c 0 || taskIndex \u003e\u003d tasks.getSize()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"StevenLiudw"},"content":" throw new DukeException(\"Invalid input number. :( Please provide a valid task number.\");","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"StevenLiudw"},"content":" tasks.unmark(taskIndex);","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"StevenLiudw"},"content":" storage.save(tasks);","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"StevenLiudw"},"content":" return ui.showUnmarkedTask(tasks.getTask(taskIndex));","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":59,"author":{"gitId":"StevenLiudw"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"StevenLiudw":59}},{"path":"src/main/java/duke/storage/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"StevenLiudw"},"content":"package duke.storage;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"StevenLiudw"},"content":"import java.io.File;","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"StevenLiudw"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"StevenLiudw"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"StevenLiudw"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"StevenLiudw"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"StevenLiudw"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"StevenLiudw"},"content":"import duke.DukeException;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"StevenLiudw"},"content":"import duke.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"StevenLiudw"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"StevenLiudw"},"content":"import duke.task.Event;","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"StevenLiudw"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"StevenLiudw"},"content":"import duke.task.Todo;","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"StevenLiudw"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"StevenLiudw"},"content":" * Represents a storage that deals with loading tasks from the file and saving tasks in the file.","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"StevenLiudw"},"content":"public class Storage {","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"StevenLiudw"},"content":" private final File file;","lastModifiedDate":"2023-08-26"},{"lineNumber":24,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"StevenLiudw"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"StevenLiudw"},"content":" * Creates a new Storage object.","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"StevenLiudw"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"StevenLiudw"},"content":" * @param file_Path The path to the file used for storage.","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"StevenLiudw"},"content":" * @throws IOException When there\u0027s an error with file operations.","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"StevenLiudw"},"content":" * @throws DukeException When there\u0027s an error specific to the Duke application.","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"StevenLiudw"},"content":" public Storage(String file_Path) throws IOException, DukeException {","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"StevenLiudw"},"content":" File savedFile \u003d new File(file_Path);","lastModifiedDate":"2023-08-26"},{"lineNumber":34,"author":{"gitId":"StevenLiudw"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":35,"author":{"gitId":"StevenLiudw"},"content":" if (!savedFile.exists() \u0026\u0026 !savedFile.createNewFile()) {","lastModifiedDate":"2023-08-26"},{"lineNumber":36,"author":{"gitId":"StevenLiudw"},"content":" throw new IOException(\"Failed to create a new file.\");","lastModifiedDate":"2023-08-26"},{"lineNumber":37,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":38,"author":{"gitId":"StevenLiudw"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":39,"author":{"gitId":"StevenLiudw"},"content":" throw new DukeException(\"Error while saving the file: \" + e.getMessage());","lastModifiedDate":"2023-08-26"},{"lineNumber":40,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"StevenLiudw"},"content":" this.file \u003d savedFile;","lastModifiedDate":"2023-08-26"},{"lineNumber":42,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":43,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":44,"author":{"gitId":"StevenLiudw"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"StevenLiudw"},"content":" * Loads tasks from the file.","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"StevenLiudw"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"StevenLiudw"},"content":" * @return An ArrayList of Task objects.","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"StevenLiudw"},"content":" * @throws FileNotFoundException When the file is not found.","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"StevenLiudw"},"content":" * @throws DukeException For other errors.","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"StevenLiudw"},"content":" public ArrayList\u003cTask\u003e loadTasks() throws FileNotFoundException, DukeException {","lastModifiedDate":"2023-08-26"},{"lineNumber":52,"author":{"gitId":"StevenLiudw"},"content":" ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-26"},{"lineNumber":53,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":54,"author":{"gitId":"StevenLiudw"},"content":" try (Scanner sc \u003d new Scanner(this.file)) {","lastModifiedDate":"2023-08-26"},{"lineNumber":55,"author":{"gitId":"StevenLiudw"},"content":" while (sc.hasNext()) {","lastModifiedDate":"2023-08-26"},{"lineNumber":56,"author":{"gitId":"StevenLiudw"},"content":" String curLine \u003d sc.nextLine();","lastModifiedDate":"2023-08-26"},{"lineNumber":57,"author":{"gitId":"StevenLiudw"},"content":" String[] splits \u003d curLine.split(\"#\");","lastModifiedDate":"2023-08-26"},{"lineNumber":58,"author":{"gitId":"StevenLiudw"},"content":" Task newTask \u003d null;","lastModifiedDate":"2023-09-10"},{"lineNumber":59,"author":{"gitId":"StevenLiudw"},"content":" switch (splits[0].trim()) {","lastModifiedDate":"2023-08-26"},{"lineNumber":60,"author":{"gitId":"StevenLiudw"},"content":" case \"T\":","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"StevenLiudw"},"content":" newTask \u003d new Todo(splits[2].trim(), (splits[1].trim().equals(\"1\")));","lastModifiedDate":"2023-09-10"},{"lineNumber":62,"author":{"gitId":"StevenLiudw"},"content":" break;","lastModifiedDate":"2023-08-26"},{"lineNumber":63,"author":{"gitId":"StevenLiudw"},"content":" case \"D\":","lastModifiedDate":"2023-08-27"},{"lineNumber":64,"author":{"gitId":"StevenLiudw"},"content":" newTask \u003d new Deadline(splits[2].trim(), splits[3].trim(), (splits[1].trim().equals(\"1\")));","lastModifiedDate":"2023-09-10"},{"lineNumber":65,"author":{"gitId":"StevenLiudw"},"content":" break;","lastModifiedDate":"2023-08-26"},{"lineNumber":66,"author":{"gitId":"StevenLiudw"},"content":" case \"E\":","lastModifiedDate":"2023-08-27"},{"lineNumber":67,"author":{"gitId":"StevenLiudw"},"content":" String[] eventTimes \u003d splits[3].trim().split(\" - \");","lastModifiedDate":"2023-09-10"},{"lineNumber":68,"author":{"gitId":"StevenLiudw"},"content":" if(eventTimes.length !\u003d 2) {","lastModifiedDate":"2023-09-10"},{"lineNumber":69,"author":{"gitId":"StevenLiudw"},"content":" throw new DukeException(\"Invalid date format for event. Expected start-end format.\");","lastModifiedDate":"2023-09-10"},{"lineNumber":70,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":71,"author":{"gitId":"StevenLiudw"},"content":" newTask \u003d new Event(eventTimes[0], eventTimes[1], splits[2].trim());","lastModifiedDate":"2023-09-10"},{"lineNumber":72,"author":{"gitId":"StevenLiudw"},"content":" if (splits[1].trim().equals(\"1\")) {","lastModifiedDate":"2023-09-10"},{"lineNumber":73,"author":{"gitId":"StevenLiudw"},"content":" newTask.mark();","lastModifiedDate":"2023-09-10"},{"lineNumber":74,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":75,"author":{"gitId":"StevenLiudw"},"content":" break;","lastModifiedDate":"2023-08-26"},{"lineNumber":76,"author":{"gitId":"StevenLiudw"},"content":" default:","lastModifiedDate":"2023-08-27"},{"lineNumber":77,"author":{"gitId":"StevenLiudw"},"content":" throw new DukeException(\"Invalid task type in the data file.\");","lastModifiedDate":"2023-08-26"},{"lineNumber":78,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":79,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":80,"author":{"gitId":"StevenLiudw"},"content":" if (newTask !\u003d null) {","lastModifiedDate":"2023-09-10"},{"lineNumber":81,"author":{"gitId":"StevenLiudw"},"content":" if (splits.length \u003e 4) {","lastModifiedDate":"2023-09-10"},{"lineNumber":82,"author":{"gitId":"StevenLiudw"},"content":" newTask.setTag(splits[4].trim());","lastModifiedDate":"2023-09-10"},{"lineNumber":83,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":84,"author":{"gitId":"StevenLiudw"},"content":" else {","lastModifiedDate":"2023-09-10"},{"lineNumber":85,"author":{"gitId":"StevenLiudw"},"content":" System.out.println(\"adfafsa\");","lastModifiedDate":"2023-09-10"},{"lineNumber":86,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":87,"author":{"gitId":"StevenLiudw"},"content":" tasks.add(newTask);","lastModifiedDate":"2023-09-10"},{"lineNumber":88,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":89,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":90,"author":{"gitId":"StevenLiudw"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":91,"author":{"gitId":"StevenLiudw"},"content":" throw new DukeException(\"Storage file not found.\");","lastModifiedDate":"2023-08-26"},{"lineNumber":92,"author":{"gitId":"StevenLiudw"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":93,"author":{"gitId":"StevenLiudw"},"content":" throw new DukeException(\"Error occurred when reading the data file: \" + e.getMessage());","lastModifiedDate":"2023-08-26"},{"lineNumber":94,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":95,"author":{"gitId":"StevenLiudw"},"content":" return tasks;","lastModifiedDate":"2023-08-26"},{"lineNumber":96,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":97,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":98,"author":{"gitId":"StevenLiudw"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":99,"author":{"gitId":"StevenLiudw"},"content":" * Saves tasks to the file.","lastModifiedDate":"2023-08-27"},{"lineNumber":100,"author":{"gitId":"StevenLiudw"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":101,"author":{"gitId":"StevenLiudw"},"content":" * @param tasks The TaskList containing tasks to be saved.","lastModifiedDate":"2023-08-27"},{"lineNumber":102,"author":{"gitId":"StevenLiudw"},"content":" * @throws IOException When there\u0027s an error with file operations.","lastModifiedDate":"2023-08-27"},{"lineNumber":103,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":104,"author":{"gitId":"StevenLiudw"},"content":" public void save(TaskList tasks) throws IOException {","lastModifiedDate":"2023-08-27"},{"lineNumber":105,"author":{"gitId":"StevenLiudw"},"content":" FileWriter fw \u003d new FileWriter(this.file);","lastModifiedDate":"2023-08-26"},{"lineNumber":106,"author":{"gitId":"StevenLiudw"},"content":" String textToAdd \u003d translateToStore(tasks.getTasks());","lastModifiedDate":"2023-08-27"},{"lineNumber":107,"author":{"gitId":"StevenLiudw"},"content":" fw.write(textToAdd);","lastModifiedDate":"2023-08-26"},{"lineNumber":108,"author":{"gitId":"StevenLiudw"},"content":" fw.close();","lastModifiedDate":"2023-08-26"},{"lineNumber":109,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":110,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":111,"author":{"gitId":"StevenLiudw"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":112,"author":{"gitId":"StevenLiudw"},"content":" * Converts the list of tasks into a storable string format.","lastModifiedDate":"2023-08-27"},{"lineNumber":113,"author":{"gitId":"StevenLiudw"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":114,"author":{"gitId":"StevenLiudw"},"content":" * @param tasks The ArrayList of tasks to be converted.","lastModifiedDate":"2023-08-27"},{"lineNumber":115,"author":{"gitId":"StevenLiudw"},"content":" * @return A string in the storage format.","lastModifiedDate":"2023-08-27"},{"lineNumber":116,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":117,"author":{"gitId":"StevenLiudw"},"content":" public String translateToStore(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-08-26"},{"lineNumber":118,"author":{"gitId":"StevenLiudw"},"content":" StringBuilder result \u003d new StringBuilder();","lastModifiedDate":"2023-08-26"},{"lineNumber":119,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":120,"author":{"gitId":"StevenLiudw"},"content":" for (Task task : tasks) {","lastModifiedDate":"2023-08-26"},{"lineNumber":121,"author":{"gitId":"StevenLiudw"},"content":" switch (task.getType()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":122,"author":{"gitId":"StevenLiudw"},"content":" case TODO:","lastModifiedDate":"2023-08-26"},{"lineNumber":123,"author":{"gitId":"StevenLiudw"},"content":" result.append(\"T # \")","lastModifiedDate":"2023-08-26"},{"lineNumber":124,"author":{"gitId":"StevenLiudw"},"content":" .append(task.getIsDone() ? \"1\" : \"0\")","lastModifiedDate":"2023-09-03"},{"lineNumber":125,"author":{"gitId":"StevenLiudw"},"content":" .append(\" # \")","lastModifiedDate":"2023-08-26"},{"lineNumber":126,"author":{"gitId":"StevenLiudw"},"content":" .append(task.getTaskDescription())","lastModifiedDate":"2023-09-03"},{"lineNumber":127,"author":{"gitId":"StevenLiudw"},"content":" .append(\" # \")","lastModifiedDate":"2023-09-10"},{"lineNumber":128,"author":{"gitId":"StevenLiudw"},"content":" .append(task.getTag())","lastModifiedDate":"2023-09-10"},{"lineNumber":129,"author":{"gitId":"StevenLiudw"},"content":" .append(\"\\n\");","lastModifiedDate":"2023-08-26"},{"lineNumber":130,"author":{"gitId":"StevenLiudw"},"content":" break;","lastModifiedDate":"2023-08-26"},{"lineNumber":131,"author":{"gitId":"StevenLiudw"},"content":" case DEADLINE:","lastModifiedDate":"2023-08-26"},{"lineNumber":132,"author":{"gitId":"StevenLiudw"},"content":" Deadline deadline \u003d (Deadline) task;","lastModifiedDate":"2023-08-26"},{"lineNumber":133,"author":{"gitId":"StevenLiudw"},"content":" result.append(\"D # \")","lastModifiedDate":"2023-08-26"},{"lineNumber":134,"author":{"gitId":"StevenLiudw"},"content":" .append(task.getIsDone() ? \"1\" : \"0\")","lastModifiedDate":"2023-09-03"},{"lineNumber":135,"author":{"gitId":"StevenLiudw"},"content":" .append(\" # \")","lastModifiedDate":"2023-08-26"},{"lineNumber":136,"author":{"gitId":"StevenLiudw"},"content":" .append(task.getTaskDescription())","lastModifiedDate":"2023-09-03"},{"lineNumber":137,"author":{"gitId":"StevenLiudw"},"content":" .append(\" # \")","lastModifiedDate":"2023-08-26"},{"lineNumber":138,"author":{"gitId":"StevenLiudw"},"content":" .append(deadline.getTime())","lastModifiedDate":"2023-09-03"},{"lineNumber":139,"author":{"gitId":"StevenLiudw"},"content":" .append(\" # \")","lastModifiedDate":"2023-09-10"},{"lineNumber":140,"author":{"gitId":"StevenLiudw"},"content":" .append(task.getTag())","lastModifiedDate":"2023-09-10"},{"lineNumber":141,"author":{"gitId":"StevenLiudw"},"content":" .append(\"\\n\");","lastModifiedDate":"2023-08-26"},{"lineNumber":142,"author":{"gitId":"StevenLiudw"},"content":" break;","lastModifiedDate":"2023-08-26"},{"lineNumber":143,"author":{"gitId":"StevenLiudw"},"content":" case EVENT:","lastModifiedDate":"2023-08-26"},{"lineNumber":144,"author":{"gitId":"StevenLiudw"},"content":" Event event \u003d (Event) task;","lastModifiedDate":"2023-08-26"},{"lineNumber":145,"author":{"gitId":"StevenLiudw"},"content":" result.append(\"E # \")","lastModifiedDate":"2023-08-26"},{"lineNumber":146,"author":{"gitId":"StevenLiudw"},"content":" .append(task.getIsDone() ? \"1\" : \"0\")","lastModifiedDate":"2023-09-03"},{"lineNumber":147,"author":{"gitId":"StevenLiudw"},"content":" .append(\" # \")","lastModifiedDate":"2023-08-26"},{"lineNumber":148,"author":{"gitId":"StevenLiudw"},"content":" .append(task.getTaskDescription())","lastModifiedDate":"2023-09-03"},{"lineNumber":149,"author":{"gitId":"StevenLiudw"},"content":" .append(\" # \")","lastModifiedDate":"2023-08-26"},{"lineNumber":150,"author":{"gitId":"StevenLiudw"},"content":" .append(event.getE_start())","lastModifiedDate":"2023-09-03"},{"lineNumber":151,"author":{"gitId":"StevenLiudw"},"content":" .append(\" - \")","lastModifiedDate":"2023-08-26"},{"lineNumber":152,"author":{"gitId":"StevenLiudw"},"content":" .append(event.getE_end())","lastModifiedDate":"2023-09-03"},{"lineNumber":153,"author":{"gitId":"StevenLiudw"},"content":" .append(\" # \")","lastModifiedDate":"2023-09-10"},{"lineNumber":154,"author":{"gitId":"StevenLiudw"},"content":" .append(task.getTag())","lastModifiedDate":"2023-09-10"},{"lineNumber":155,"author":{"gitId":"StevenLiudw"},"content":" .append(\"\\n\");","lastModifiedDate":"2023-08-26"},{"lineNumber":156,"author":{"gitId":"StevenLiudw"},"content":" break;","lastModifiedDate":"2023-08-26"},{"lineNumber":157,"author":{"gitId":"StevenLiudw"},"content":" default:","lastModifiedDate":"2023-08-26"},{"lineNumber":158,"author":{"gitId":"StevenLiudw"},"content":" throw new IllegalStateException(\"Unexpected task type: \" + task.getType());","lastModifiedDate":"2023-09-03"},{"lineNumber":159,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":160,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":161,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":162,"author":{"gitId":"StevenLiudw"},"content":" return result.toString();","lastModifiedDate":"2023-08-26"},{"lineNumber":163,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":164,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":165,"author":{"gitId":"StevenLiudw"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"StevenLiudw":165}},{"path":"src/main/java/duke/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"StevenLiudw"},"content":"package duke.task;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"StevenLiudw"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"StevenLiudw"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"StevenLiudw"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"StevenLiudw"},"content":"import java.util.Locale;","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"StevenLiudw"},"content":"import duke.DukeException;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"StevenLiudw"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"StevenLiudw"},"content":" * Represents a Deadline task in the Duke program.","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"StevenLiudw"},"content":" * Each deadline has a description and a specific due time.","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"StevenLiudw"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":15,"author":{"gitId":"StevenLiudw"},"content":" /** Formatter to display the due time in the desired format. */","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"StevenLiudw"},"content":" private static final DateTimeFormatter OUTPUT_FORMATTER \u003d DateTimeFormatter.ofPattern(\"MMM dd yyyy\",","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"StevenLiudw"},"content":" Locale.ENGLISH);","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"StevenLiudw"},"content":" /** Due date/time for the deadline. */","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"StevenLiudw"},"content":" private LocalDate deadlineTime;","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":22,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"StevenLiudw"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"StevenLiudw"},"content":" * Constructs a new Deadline task.","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"StevenLiudw"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"StevenLiudw"},"content":" * @param description Description of the deadline.","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"StevenLiudw"},"content":" * @param deadlineTime Due time for the deadline in \"yyyy-MM-dd\" format.","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"StevenLiudw"},"content":" * @throws DukeException If the due time is not in the expected format.","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"StevenLiudw"},"content":" public Deadline(String description, String deadlineTime) throws DukeException {","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"StevenLiudw"},"content":" super(description, TaskType.DEADLINE);","lastModifiedDate":"2023-08-23"},{"lineNumber":32,"author":{"gitId":"StevenLiudw"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"StevenLiudw"},"content":" this.deadlineTime \u003d LocalDate.parse(deadlineTime, DateTimeFormatter.ofPattern(\"yyyy-MM-dd\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"StevenLiudw"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"StevenLiudw"},"content":" throw new DukeException(\"Invalid time format for input: \" + deadlineTime);","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":38,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":39,"author":{"gitId":"StevenLiudw"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"StevenLiudw"},"content":" * Constructs a new Deadline task with an isDone status.","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"StevenLiudw"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"StevenLiudw"},"content":" * @param description Description of the deadline.","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"StevenLiudw"},"content":" * @param deadlineTime Due time for the deadline in \"yyyy-MM-dd\" format.","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"StevenLiudw"},"content":" * @param isDone Boolean indicating if the task has been completed.","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"StevenLiudw"},"content":" * @throws DukeException If the due time is not in the expected format.","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"StevenLiudw"},"content":" public Deadline(String description, String deadlineTime, boolean isDone) throws DukeException {","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"StevenLiudw"},"content":" super(description, TaskType.DEADLINE, isDone);","lastModifiedDate":"2023-08-26"},{"lineNumber":49,"author":{"gitId":"StevenLiudw"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"StevenLiudw"},"content":" this.deadlineTime \u003d LocalDate.parse(deadlineTime, DateTimeFormatter.ofPattern(\"yyyy-MM-dd\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"StevenLiudw"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"StevenLiudw"},"content":" throw new DukeException(\"Invalid time format for input: \" + deadlineTime);","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":55,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":56,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":57,"author":{"gitId":"StevenLiudw"},"content":" public LocalDate getTime() {","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"StevenLiudw"},"content":" return this.deadlineTime;","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"StevenLiudw"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"StevenLiudw"},"content":" * Returns the string representation of the deadline.","lastModifiedDate":"2023-08-27"},{"lineNumber":63,"author":{"gitId":"StevenLiudw"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":64,"author":{"gitId":"StevenLiudw"},"content":" * @return Formatted string representing the deadline.","lastModifiedDate":"2023-08-27"},{"lineNumber":65,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":66,"author":{"gitId":"StevenLiudw"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":67,"author":{"gitId":"StevenLiudw"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":68,"author":{"gitId":"StevenLiudw"},"content":" return \"[D]\" + super.toString() + \" (by: \" + deadlineTime.format(OUTPUT_FORMATTER) + \")\";","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":70,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":71,"author":{"gitId":"StevenLiudw"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"StevenLiudw":71}},{"path":"src/main/java/duke/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"StevenLiudw"},"content":"package duke.task;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"StevenLiudw"},"content":"import java.util.Arrays;","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"StevenLiudw"},"content":"import java.util.List;","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"StevenLiudw"},"content":"import java.util.stream.Collectors;","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"StevenLiudw"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"StevenLiudw"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"StevenLiudw"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"StevenLiudw"},"content":"import java.util.Locale;","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"StevenLiudw"},"content":"import duke.DukeException;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"StevenLiudw"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"StevenLiudw"},"content":" * Represents an event task with a start and end date.","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"StevenLiudw"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":18,"author":{"gitId":"StevenLiudw"},"content":" private static final DateTimeFormatter FORMATTER \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd\");","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"StevenLiudw"},"content":" private static final DateTimeFormatter OUTPUT_FORMATTER \u003d DateTimeFormatter.ofPattern(\"MMM dd yyyy\",","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"StevenLiudw"},"content":" Locale.ENGLISH);","lastModifiedDate":"2023-09-10"},{"lineNumber":21,"author":{"gitId":"StevenLiudw"},"content":" private final LocalDate e_start;","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"StevenLiudw"},"content":" private final LocalDate e_end;","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"StevenLiudw"},"content":" public LocalDate getE_start() {","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"StevenLiudw"},"content":" return e_start;","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"StevenLiudw"},"content":" public LocalDate getE_end() {","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"StevenLiudw"},"content":" return e_end;","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":32,"author":{"gitId":"StevenLiudw"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"StevenLiudw"},"content":" * Constructs a new Event with the specified description, start date, and end date.","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"StevenLiudw"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"StevenLiudw"},"content":" * @param e_start Start date of the event.","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"StevenLiudw"},"content":" * @param e_end End date of the event.","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"StevenLiudw"},"content":" * @param description Description of the event.","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"StevenLiudw"},"content":" * @throws DukeException If the given date format is invalid.","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"StevenLiudw"},"content":" public Event(String e_start, String e_end, String description) throws DukeException {","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"StevenLiudw"},"content":" super(description, TaskType.EVENT);","lastModifiedDate":"2023-08-23"},{"lineNumber":42,"author":{"gitId":"StevenLiudw"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"StevenLiudw"},"content":" this.e_start \u003d LocalDate.parse(e_start, FORMATTER);","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"StevenLiudw"},"content":" this.e_end \u003d LocalDate.parse(e_end, FORMATTER);","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"StevenLiudw"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"StevenLiudw"},"content":" throw new DukeException(\"Invalid time format.\");","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"StevenLiudw"},"content":" assert !this.e_start.isAfter(this.e_end) : \"Event start date should not be after end date!\";","lastModifiedDate":"2023-09-10"},{"lineNumber":49,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":50,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":51,"author":{"gitId":"StevenLiudw"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"StevenLiudw"},"content":" * Constructs a new Event with the specified description, combined time (start-end), and completion status.","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"StevenLiudw"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"StevenLiudw"},"content":" * @param description Description of the event.","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"StevenLiudw"},"content":" * @param time Combined start and end date in the format \u0027start-end\u0027.","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"StevenLiudw"},"content":" * @param isDone Boolean indicating the completion status of the event.","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"StevenLiudw"},"content":" * @throws DukeException If the given date format is invalid.","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":59,"author":{"gitId":"StevenLiudw"},"content":" public Event(String description, String time, Boolean isDone) throws DukeException {","lastModifiedDate":"2023-08-27"},{"lineNumber":60,"author":{"gitId":"StevenLiudw"},"content":" super(description, TaskType.EVENT, isDone);","lastModifiedDate":"2023-08-26"},{"lineNumber":61,"author":{"gitId":"StevenLiudw"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"StevenLiudw"},"content":" List\u003cLocalDate\u003e dates \u003d Arrays.stream(time.split(\"-\"))","lastModifiedDate":"2023-09-10"},{"lineNumber":63,"author":{"gitId":"StevenLiudw"},"content":" .map(String::trim)","lastModifiedDate":"2023-09-10"},{"lineNumber":64,"author":{"gitId":"StevenLiudw"},"content":" .map(dateStr -\u003e LocalDate.parse(dateStr, FORMATTER))","lastModifiedDate":"2023-09-10"},{"lineNumber":65,"author":{"gitId":"StevenLiudw"},"content":" .collect(Collectors.toList());","lastModifiedDate":"2023-09-10"},{"lineNumber":66,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":67,"author":{"gitId":"StevenLiudw"},"content":" if (dates.size() !\u003d 2) {","lastModifiedDate":"2023-09-10"},{"lineNumber":68,"author":{"gitId":"StevenLiudw"},"content":" throw new DukeException(\"Invalid date format. Expected start-end format.\");","lastModifiedDate":"2023-09-10"},{"lineNumber":69,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":70,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":71,"author":{"gitId":"StevenLiudw"},"content":" this.e_start \u003d dates.get(0);","lastModifiedDate":"2023-09-10"},{"lineNumber":72,"author":{"gitId":"StevenLiudw"},"content":" this.e_end \u003d dates.get(1);","lastModifiedDate":"2023-09-10"},{"lineNumber":73,"author":{"gitId":"StevenLiudw"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":74,"author":{"gitId":"StevenLiudw"},"content":" throw new DukeException(\"Invalid time format.\");","lastModifiedDate":"2023-08-27"},{"lineNumber":75,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":76,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":77,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":78,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":79,"author":{"gitId":"StevenLiudw"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":80,"author":{"gitId":"StevenLiudw"},"content":" * Returns a string representation of the event.","lastModifiedDate":"2023-08-27"},{"lineNumber":81,"author":{"gitId":"StevenLiudw"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":82,"author":{"gitId":"StevenLiudw"},"content":" * @return A string representing the event.","lastModifiedDate":"2023-08-27"},{"lineNumber":83,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":84,"author":{"gitId":"StevenLiudw"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":85,"author":{"gitId":"StevenLiudw"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":86,"author":{"gitId":"StevenLiudw"},"content":" return \"[E]\" + super.toString() + \" (from: \" + e_start.format(OUTPUT_FORMATTER)","lastModifiedDate":"2023-08-27"},{"lineNumber":87,"author":{"gitId":"StevenLiudw"},"content":" + \" to: \" + e_end.format(OUTPUT_FORMATTER) + \")\";","lastModifiedDate":"2023-08-27"},{"lineNumber":88,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":89,"author":{"gitId":"StevenLiudw"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"StevenLiudw":89}},{"path":"src/main/java/duke/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"StevenLiudw"},"content":"package duke.task;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"StevenLiudw"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"StevenLiudw"},"content":" * Represents a general task. It can be extended by other specific task types.","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"StevenLiudw"},"content":"public class Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":9,"author":{"gitId":"StevenLiudw"},"content":" private final String description;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"StevenLiudw"},"content":" private boolean isDone;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"StevenLiudw"},"content":" private final TaskType type;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"StevenLiudw"},"content":" private String tag;","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":14,"author":{"gitId":"StevenLiudw"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"StevenLiudw"},"content":" * Initializes a task with the specified description and type.","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"StevenLiudw"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"StevenLiudw"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"StevenLiudw"},"content":" * @param type The type of the task.","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"StevenLiudw"},"content":" public Task(String description, TaskType type) {","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"StevenLiudw"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-22"},{"lineNumber":22,"author":{"gitId":"StevenLiudw"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-22"},{"lineNumber":23,"author":{"gitId":"StevenLiudw"},"content":" this.type \u003d type;","lastModifiedDate":"2023-08-23"},{"lineNumber":24,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":25,"author":{"gitId":"StevenLiudw"},"content":" public String getTaskDescription() {","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"StevenLiudw"},"content":" return this.description;","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"StevenLiudw"},"content":" public boolean getIsDone() {","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"StevenLiudw"},"content":" return this.isDone;","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"StevenLiudw"},"content":" public TaskType getType() {","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"StevenLiudw"},"content":" return this.type;","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"StevenLiudw"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"StevenLiudw"},"content":" * Initializes a task with the specified description, type, and completion status.","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"StevenLiudw"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"StevenLiudw"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"StevenLiudw"},"content":" * @param type The type of the task.","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"StevenLiudw"},"content":" * @param isDone The completion status of the task.","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"StevenLiudw"},"content":" public Task(String description, TaskType type, Boolean isDone) {","lastModifiedDate":"2023-08-26"},{"lineNumber":42,"author":{"gitId":"StevenLiudw"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-26"},{"lineNumber":43,"author":{"gitId":"StevenLiudw"},"content":" this.type \u003d type;","lastModifiedDate":"2023-08-26"},{"lineNumber":44,"author":{"gitId":"StevenLiudw"},"content":" this.isDone \u003d isDone;","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":46,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":47,"author":{"gitId":"StevenLiudw"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"StevenLiudw"},"content":" * Gets the status icon for the task.","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"StevenLiudw"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"StevenLiudw"},"content":" * @return \"X\" if the task is completed, else \" \".","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"StevenLiudw"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-22"},{"lineNumber":53,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"StevenLiudw"},"content":" return (isDone ? \"X\" : \" \"); // mark done task with X","lastModifiedDate":"2023-08-22"},{"lineNumber":55,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":56,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":57,"author":{"gitId":"StevenLiudw"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"StevenLiudw"},"content":" * Marks the task as completed.","lastModifiedDate":"2023-08-27"},{"lineNumber":59,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":60,"author":{"gitId":"StevenLiudw"},"content":" public void mark() {","lastModifiedDate":"2023-08-22"},{"lineNumber":61,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"StevenLiudw"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-22"},{"lineNumber":63,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":64,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":65,"author":{"gitId":"StevenLiudw"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":66,"author":{"gitId":"StevenLiudw"},"content":" * Marks the task as not completed.","lastModifiedDate":"2023-08-27"},{"lineNumber":67,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":68,"author":{"gitId":"StevenLiudw"},"content":" public void unmark() {","lastModifiedDate":"2023-08-22"},{"lineNumber":69,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"StevenLiudw"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-22"},{"lineNumber":71,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":72,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":73,"author":{"gitId":"StevenLiudw"},"content":" public String getTag() {","lastModifiedDate":"2023-09-10"},{"lineNumber":74,"author":{"gitId":"StevenLiudw"},"content":" return this.tag;","lastModifiedDate":"2023-09-10"},{"lineNumber":75,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":76,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":77,"author":{"gitId":"StevenLiudw"},"content":" public void setTag(String tag) {","lastModifiedDate":"2023-09-10"},{"lineNumber":78,"author":{"gitId":"StevenLiudw"},"content":" this.tag \u003d tag;","lastModifiedDate":"2023-09-10"},{"lineNumber":79,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":80,"author":{"gitId":"StevenLiudw"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":81,"author":{"gitId":"StevenLiudw"},"content":" * Gets the description","lastModifiedDate":"2023-08-29"},{"lineNumber":82,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":83,"author":{"gitId":"StevenLiudw"},"content":" public String getDescription() {","lastModifiedDate":"2023-08-29"},{"lineNumber":84,"author":{"gitId":"StevenLiudw"},"content":" return this.description;","lastModifiedDate":"2023-08-29"},{"lineNumber":85,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":86,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":87,"author":{"gitId":"StevenLiudw"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":88,"author":{"gitId":"StevenLiudw"},"content":" * Returns the string representation of the task.","lastModifiedDate":"2023-08-27"},{"lineNumber":89,"author":{"gitId":"StevenLiudw"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":90,"author":{"gitId":"StevenLiudw"},"content":" * @return A string representing the task\u0027s status and description.","lastModifiedDate":"2023-08-27"},{"lineNumber":91,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":92,"author":{"gitId":"StevenLiudw"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":93,"author":{"gitId":"StevenLiudw"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":94,"author":{"gitId":"StevenLiudw"},"content":" String result \u003d \"[\" + getStatusIcon() + \"] \" + description;","lastModifiedDate":"2023-09-10"},{"lineNumber":95,"author":{"gitId":"StevenLiudw"},"content":" result +\u003d \" [\" + this.tag + \"]\";","lastModifiedDate":"2023-09-10"},{"lineNumber":96,"author":{"gitId":"StevenLiudw"},"content":" return result;","lastModifiedDate":"2023-09-10"},{"lineNumber":97,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":98,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":99,"author":{"gitId":"StevenLiudw"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"StevenLiudw":99}},{"path":"src/main/java/duke/task/TaskType.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"StevenLiudw"},"content":"package duke.task;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"StevenLiudw"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"StevenLiudw"},"content":" * Enumerates the different types of tasks.","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"StevenLiudw"},"content":"public enum TaskType {","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"StevenLiudw"},"content":" TODO, DEADLINE, EVENT","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"StevenLiudw"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"StevenLiudw":8}},{"path":"src/main/java/duke/task/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"StevenLiudw"},"content":"package duke.task;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"StevenLiudw"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"StevenLiudw"},"content":" * Represents a \"to-do\" type of task.","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"StevenLiudw"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"StevenLiudw"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"StevenLiudw"},"content":" * Initializes a new \"to-do\" task with the specified description.","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"StevenLiudw"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"StevenLiudw"},"content":" * @param description The description of the \"to-do\" task.","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"StevenLiudw"},"content":" public Todo(String description) {","lastModifiedDate":"2023-08-22"},{"lineNumber":14,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"StevenLiudw"},"content":" super(description, TaskType.TODO);","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":17,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":18,"author":{"gitId":"StevenLiudw"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"StevenLiudw"},"content":" * Initializes a new \"to-do\" task with the specified name and completion status.","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"StevenLiudw"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"StevenLiudw"},"content":" * @param name The name of the \"to-do\" task.","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"StevenLiudw"},"content":" * @param isDone The completion status of the task.","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"StevenLiudw"},"content":" public Todo(String name, boolean isDone) {","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"StevenLiudw"},"content":" super(name, TaskType.TODO, isDone);","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":30,"author":{"gitId":"StevenLiudw"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"StevenLiudw"},"content":" * Returns the string representation of the \"to-do\" task.","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"StevenLiudw"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"StevenLiudw"},"content":" * @return A string representing the \"to-do\" task\u0027s type, status, and description.","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"StevenLiudw"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":36,"author":{"gitId":"StevenLiudw"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":37,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"StevenLiudw"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-22"},{"lineNumber":39,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":40,"author":{"gitId":"StevenLiudw"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"StevenLiudw":40}},{"path":"src/main/java/duke/ui/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"StevenLiudw"},"content":"package duke.ui;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"StevenLiudw"},"content":"import duke.Duke;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"StevenLiudw"},"content":"import duke.DialogBox;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"StevenLiudw"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"StevenLiudw"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"StevenLiudw"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"StevenLiudw"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"StevenLiudw"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"StevenLiudw"},"content":"import javafx.scene.layout.*;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"StevenLiudw"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"StevenLiudw"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"StevenLiudw"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"StevenLiudw"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"StevenLiudw"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"StevenLiudw"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"StevenLiudw"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"StevenLiudw"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"StevenLiudw"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"StevenLiudw"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"StevenLiudw"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"StevenLiudw"},"content":" private Duke duke;","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"StevenLiudw"},"content":" private final Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/Tony.png\"));","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"StevenLiudw"},"content":" private final Image dukeImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/jarvis.png\"));","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"StevenLiudw"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"StevenLiudw"},"content":" public void initialize() {","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"StevenLiudw"},"content":" dialogContainer.heightProperty().addListener((observable) -\u003e scrollPane.setVvalue(1.0));","lastModifiedDate":"2023-09-10"},{"lineNumber":34,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"StevenLiudw"},"content":" public void setDuke(Duke d) {","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"StevenLiudw"},"content":" duke \u003d d;","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"StevenLiudw"},"content":" public void printIntroduction() {","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"StevenLiudw"},"content":" dialogContainer.getChildren().add(DialogBox.getDukeDialog(Ui.showWelcome(), dukeImage));","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"StevenLiudw"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"StevenLiudw"},"content":" * Creates two dialog boxes, one echoing user input and the other containing Duke\u0027s reply and then appends them to","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"StevenLiudw"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"StevenLiudw"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"StevenLiudw"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"StevenLiudw"},"content":" assert duke !\u003d null : \"Duke should be initialized before handling user input!\";","lastModifiedDate":"2023-09-10"},{"lineNumber":52,"author":{"gitId":"StevenLiudw"},"content":" assert userInput !\u003d null : \"userInput should be initialized!\";","lastModifiedDate":"2023-09-10"},{"lineNumber":53,"author":{"gitId":"StevenLiudw"},"content":" assert dialogContainer !\u003d null : \"dialogContainer should be initialized!\";","lastModifiedDate":"2023-09-10"},{"lineNumber":54,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":55,"author":{"gitId":"StevenLiudw"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"StevenLiudw"},"content":" String response \u003d duke.getResponse(input);","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"StevenLiudw"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"StevenLiudw"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"StevenLiudw"},"content":" DialogBox.getDukeDialog(response, dukeImage)","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"StevenLiudw"},"content":" );","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"StevenLiudw"},"content":" userInput.clear();","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"StevenLiudw"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"StevenLiudw":63}},{"path":"src/main/java/duke/ui/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"StevenLiudw"},"content":"package duke.ui;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"StevenLiudw"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"StevenLiudw"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"StevenLiudw"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"StevenLiudw"},"content":"/**","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"StevenLiudw"},"content":" * Deals with interactions with the user","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"StevenLiudw"},"content":" * Return messages to user from Duke.","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"StevenLiudw"},"content":"public class Ui {","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"StevenLiudw"},"content":" private Scanner scanner;","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"StevenLiudw"},"content":" private static final String LINE \u003d \"______________________________\";","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"StevenLiudw"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"StevenLiudw"},"content":" * Constructor for Ui class. Initializes the Scanner object.","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"StevenLiudw"},"content":" public Ui() {","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"StevenLiudw"},"content":" this.scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"StevenLiudw"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"StevenLiudw"},"content":" * Returns the welcome greetings.","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"StevenLiudw"},"content":" public static String showWelcome() {","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"StevenLiudw"},"content":" String logo \u003d \" ____ _ \\n\"","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"StevenLiudw"},"content":" + \"| _ \\\\ _ _| | _____ \\n\"","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"StevenLiudw"},"content":" + \"| | | | | | | |/ / _ \\\\\\n\"","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"StevenLiudw"},"content":" + \"| |_| | |_| | \u003c __/\\n\"","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"StevenLiudw"},"content":" + \"|____/ \\\\__,_|_|\\\\_\\\\___|\\n\";","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"StevenLiudw"},"content":" return \"Hello from\\n\" + logo","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"StevenLiudw"},"content":" + LINE + \"\\n\"","lastModifiedDate":"2023-09-10"},{"lineNumber":36,"author":{"gitId":"StevenLiudw"},"content":" + \"Hello! I \u0027m Jarvis.\\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"StevenLiudw"},"content":" + \"What can I do for you?\\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"StevenLiudw"},"content":" + LINE + \"\\n\";","lastModifiedDate":"2023-09-10"},{"lineNumber":39,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"StevenLiudw"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"StevenLiudw"},"content":" * Reads a command entered by the user.","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"StevenLiudw"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"StevenLiudw"},"content":" * @return A string representing the user\u0027s command.","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"StevenLiudw"},"content":" public String readCommand() {","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"StevenLiudw"},"content":" assert scanner !\u003d null : \"Scanner should be initialized before reading a command!\";","lastModifiedDate":"2023-09-10"},{"lineNumber":48,"author":{"gitId":"StevenLiudw"},"content":" return scanner.nextLine();","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"StevenLiudw"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"StevenLiudw"},"content":" * Returns a line to format the UI.","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"StevenLiudw"},"content":" public String showLine() {","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"StevenLiudw"},"content":" return LINE;","lastModifiedDate":"2023-09-10"},{"lineNumber":56,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"StevenLiudw"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":59,"author":{"gitId":"StevenLiudw"},"content":" * Returns an error message when there\u0027s an issue loading tasks.","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"StevenLiudw"},"content":" public String showLoadingError() {","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":63,"author":{"gitId":"StevenLiudw"},"content":" return \"Error loading tasks. Starting with an empty task list.\";","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":65,"author":{"gitId":"StevenLiudw"},"content":" public String showTaggedTask(Task task) {","lastModifiedDate":"2023-09-10"},{"lineNumber":66,"author":{"gitId":"StevenLiudw"},"content":" return \"Tagged the following task: \\n\" + task;","lastModifiedDate":"2023-09-10"},{"lineNumber":67,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":68,"author":{"gitId":"StevenLiudw"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":69,"author":{"gitId":"StevenLiudw"},"content":" * Returns an error message.","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"StevenLiudw"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":71,"author":{"gitId":"StevenLiudw"},"content":" * @param message The error message.","lastModifiedDate":"2023-09-04"},{"lineNumber":72,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":73,"author":{"gitId":"StevenLiudw"},"content":" public String showError(String message) {","lastModifiedDate":"2023-09-04"},{"lineNumber":74,"author":{"gitId":"StevenLiudw"},"content":" return \"Error: \" + message;","lastModifiedDate":"2023-09-04"},{"lineNumber":75,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":76,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":77,"author":{"gitId":"StevenLiudw"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":78,"author":{"gitId":"StevenLiudw"},"content":" * Returns the Goodbye message.","lastModifiedDate":"2023-08-27"},{"lineNumber":79,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":80,"author":{"gitId":"StevenLiudw"},"content":" public String showGoodbye() {","lastModifiedDate":"2023-09-04"},{"lineNumber":81,"author":{"gitId":"StevenLiudw"},"content":" return \"Bye. Hope to see you again soon!\";","lastModifiedDate":"2023-09-04"},{"lineNumber":82,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":83,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":84,"author":{"gitId":"StevenLiudw"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":85,"author":{"gitId":"StevenLiudw"},"content":" * Returns the message for a deleted task.","lastModifiedDate":"2023-09-04"},{"lineNumber":86,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":87,"author":{"gitId":"StevenLiudw"},"content":" public String showDeletedTask(Task task) {","lastModifiedDate":"2023-09-04"},{"lineNumber":88,"author":{"gitId":"StevenLiudw"},"content":" return \"Noted. I\u0027ve removed this task:\\n \" + task;","lastModifiedDate":"2023-09-04"},{"lineNumber":89,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":90,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":91,"author":{"gitId":"StevenLiudw"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":92,"author":{"gitId":"StevenLiudw"},"content":" * Returns the message for an added task.","lastModifiedDate":"2023-09-04"},{"lineNumber":93,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":94,"author":{"gitId":"StevenLiudw"},"content":" public String showAddedTask(Task task) {","lastModifiedDate":"2023-09-04"},{"lineNumber":95,"author":{"gitId":"StevenLiudw"},"content":" return \"Got it. I\u0027ve added this task:\\n \" + task;","lastModifiedDate":"2023-09-04"},{"lineNumber":96,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":97,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":98,"author":{"gitId":"StevenLiudw"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":99,"author":{"gitId":"StevenLiudw"},"content":" * Returns the message for a marked task.","lastModifiedDate":"2023-09-04"},{"lineNumber":100,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":101,"author":{"gitId":"StevenLiudw"},"content":" public String showMarkedTask(Task task) {","lastModifiedDate":"2023-09-04"},{"lineNumber":102,"author":{"gitId":"StevenLiudw"},"content":" return \"Nice! I\u0027ve marked this task as done:\\n \" + task;","lastModifiedDate":"2023-09-04"},{"lineNumber":103,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":104,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":105,"author":{"gitId":"StevenLiudw"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":106,"author":{"gitId":"StevenLiudw"},"content":" * Returns the message for an unmarked task.","lastModifiedDate":"2023-09-04"},{"lineNumber":107,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":108,"author":{"gitId":"StevenLiudw"},"content":" public String showUnmarkedTask(Task task) {","lastModifiedDate":"2023-09-04"},{"lineNumber":109,"author":{"gitId":"StevenLiudw"},"content":" return \"OK, I\u0027ve marked this task as not done yet:\\n \" + task;","lastModifiedDate":"2023-09-04"},{"lineNumber":110,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":111,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":112,"author":{"gitId":"StevenLiudw"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":113,"author":{"gitId":"StevenLiudw"},"content":" * Returns tasks that match the search keyword.","lastModifiedDate":"2023-09-04"},{"lineNumber":114,"author":{"gitId":"StevenLiudw"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":115,"author":{"gitId":"StevenLiudw"},"content":" * @param tasks List of matched tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":116,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":117,"author":{"gitId":"StevenLiudw"},"content":" public String showFoundTasks(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-09-04"},{"lineNumber":118,"author":{"gitId":"StevenLiudw"},"content":" assert tasks !\u003d null : \"List of tasks should not be null!\";","lastModifiedDate":"2023-09-10"},{"lineNumber":119,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":120,"author":{"gitId":"StevenLiudw"},"content":" StringBuilder result \u003d new StringBuilder(\"Here are the matching tasks in your list:\\n\");","lastModifiedDate":"2023-09-04"},{"lineNumber":121,"author":{"gitId":"StevenLiudw"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-08-29"},{"lineNumber":122,"author":{"gitId":"StevenLiudw"},"content":" result.append((i + 1)).append(\".\").append(tasks.get(i).toString()).append(\"\\n\");","lastModifiedDate":"2023-09-04"},{"lineNumber":123,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":124,"author":{"gitId":"StevenLiudw"},"content":" return result.toString();","lastModifiedDate":"2023-09-04"},{"lineNumber":125,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":126,"author":{"gitId":"StevenLiudw"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"StevenLiudw":126}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"StevenLiudw"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"StevenLiudw"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"StevenLiudw"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"StevenLiudw"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"StevenLiudw"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"StevenLiudw"},"content":"\u003c?import javafx.scene.text.Font?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"StevenLiudw"},"content":"\u003cfx:root xmlns:fx\u003d\"http://javafx.com/fxml/1\" alignment\u003d\"TOP_RIGHT\" maxHeight\u003d\"Infinity\"","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"StevenLiudw"},"content":" maxWidth\u003d\"1.7976931348623157E308\"","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"StevenLiudw"},"content":" prefWidth\u003d\"400.0\" type\u003d\"javafx.scene.layout.HBox\" xmlns\u003d\"http://javafx.com/javafx/20.0.1\"\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"StevenLiudw"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"StevenLiudw"},"content":" \u003cLabel fx:id\u003d\"dialog\" text\u003d\"Label\" wrapText\u003d\"true\"\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"StevenLiudw"},"content":" \u003cfont\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"StevenLiudw"},"content":" \u003cFont name\u003d\"Andale Mono\" size\u003d\"13.0\"/\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"StevenLiudw"},"content":" \u003c/font\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"StevenLiudw"},"content":" \u003c/Label\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"StevenLiudw"},"content":" \u003cImageView fx:id\u003d\"displayPicture\" fitHeight\u003d\"50.0\" fitWidth\u003d\"50.0\" pickOnBounds\u003d\"true\" preserveRatio\u003d\"true\"/\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"StevenLiudw"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"StevenLiudw"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"StevenLiudw"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\"/\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"StevenLiudw"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"StevenLiudw"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"StevenLiudw":23}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"StevenLiudw"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"StevenLiudw"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"StevenLiudw"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"StevenLiudw"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"StevenLiudw"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"StevenLiudw"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"StevenLiudw"},"content":"\u003c?import javafx.scene.text.Font?\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"StevenLiudw"},"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.ui.MainWindow\"\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"StevenLiudw"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"StevenLiudw"},"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\"\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"StevenLiudw"},"content":" \u003cfont\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"StevenLiudw"},"content":" \u003cFont size\u003d\"14.0\" /\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"StevenLiudw"},"content":" \u003c/font\u003e\u003c/TextField\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"StevenLiudw"},"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\"\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"StevenLiudw"},"content":" \u003cfont\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"StevenLiudw"},"content":" \u003cFont size\u003d\"14.0\" /\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"StevenLiudw"},"content":" \u003c/font\u003e\u003c/Button\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"StevenLiudw"},"content":" \u003cScrollPane fx:id\u003d\"scrollPane\" hbarPolicy\u003d\"NEVER\" vbarPolicy\u003d\"AS_NEEDED\" prefHeight\u003d\"557.0\" prefWidth\u003d\"400.0\" vvalue\u003d\"1.0\"\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":21,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"StevenLiudw"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"StevenLiudw"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefWidth\u003d\"388.0\" /\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"StevenLiudw"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"StevenLiudw"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"StevenLiudw"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"StevenLiudw"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"StevenLiudw":27}},{"path":"src/test/java/duke/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"StevenLiudw"},"content":"package duke;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"StevenLiudw"},"content":"import duke.command.Command;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"StevenLiudw"},"content":"import duke.command.ExitCommand;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"StevenLiudw"},"content":"import duke.command.ListCommand;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"StevenLiudw"},"content":"import duke.command.MarkCommand;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"StevenLiudw"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"StevenLiudw"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"StevenLiudw"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"StevenLiudw"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"StevenLiudw"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"StevenLiudw"},"content":" * Represents the unit tests for the Parser class.","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"StevenLiudw"},"content":"public class ParserTest {","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"StevenLiudw"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"StevenLiudw"},"content":" * Tests the parsing of the \u0027bye\u0027 command.","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"StevenLiudw"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"StevenLiudw"},"content":" public void byeTest() {","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"StevenLiudw"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"StevenLiudw"},"content":" Command command \u003d Parser.parse(\"bye\");","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"StevenLiudw"},"content":" assertTrue(command instanceof ExitCommand);","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"StevenLiudw"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"StevenLiudw"},"content":" fail(\"Exit command should be parsed without errors.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"StevenLiudw"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"StevenLiudw"},"content":" * Tests the parsing of the \u0027list\u0027 command.","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"StevenLiudw"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"StevenLiudw"},"content":" public void listTest() {","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"StevenLiudw"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"StevenLiudw"},"content":" Command command \u003d Parser.parse(\"list\");","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"StevenLiudw"},"content":" assertTrue(command instanceof ListCommand);","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"StevenLiudw"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"StevenLiudw"},"content":" fail(\"List command should be parsed without errors.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"StevenLiudw"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"StevenLiudw"},"content":" * Tests the parsing of the \u0027mark\u0027 command.","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"StevenLiudw"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"StevenLiudw"},"content":" public void markTest() {","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"StevenLiudw"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"StevenLiudw"},"content":" Command command \u003d Parser.parse(\"mark 1\");","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"StevenLiudw"},"content":" assertTrue(command instanceof MarkCommand);","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"StevenLiudw"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"StevenLiudw"},"content":" fail(\"Mark command should be parsed without errors.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"StevenLiudw"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"StevenLiudw"},"content":" * Tests the parsing of an invalid command.","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"StevenLiudw"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"StevenLiudw"},"content":" public void invalidCommandTest() {","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"StevenLiudw"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"StevenLiudw"},"content":" Command command \u003d Parser.parse(\"invalidCommand\");","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"StevenLiudw"},"content":" fail(\"Invalid command should throw a DukeException.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"StevenLiudw"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"StevenLiudw"},"content":" assertEquals(\"OOPS! :( ☹ I\u0027m sorry, but I don\u0027t know what that means :-(\", e.getMessage());","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"StevenLiudw"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"StevenLiudw":70}},{"path":"src/test/java/duke/TaskListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"StevenLiudw"},"content":"package duke;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"StevenLiudw"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"StevenLiudw"},"content":"import duke.task.TaskType;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"StevenLiudw"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"StevenLiudw"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"StevenLiudw"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"StevenLiudw"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"StevenLiudw"},"content":" * Represents the unit tests for the TaskList class.","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"StevenLiudw"},"content":"public class TaskListTest {","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"StevenLiudw"},"content":" /** TaskList object to be used for testing purposes. */","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"StevenLiudw"},"content":" private TaskList taskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"StevenLiudw"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"StevenLiudw"},"content":" * Initializes a new TaskList object for each test.","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"StevenLiudw"},"content":" @BeforeEach","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"StevenLiudw"},"content":" public void setUp() {","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"StevenLiudw"},"content":" taskList \u003d new TaskList();","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"StevenLiudw"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"StevenLiudw"},"content":" * Tests the getSize method when the TaskList is empty.","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"StevenLiudw"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"StevenLiudw"},"content":" public void getSize_emptyList() {","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"StevenLiudw"},"content":" assertEquals(0, taskList.getSize());","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"StevenLiudw"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"StevenLiudw"},"content":" * Tests the addition of a single task to the TaskList.","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"StevenLiudw"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"StevenLiudw"},"content":" public void addTask_addOneTask() {","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"StevenLiudw"},"content":" taskList.addTask(new Task(\"Test Task\", TaskType.TODO));","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"StevenLiudw"},"content":" assertEquals(1, taskList.getSize());","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"StevenLiudw"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"StevenLiudw"},"content":" * Tests the deleteTask method by adding a task and then deleting it.","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"StevenLiudw"},"content":" * Ensures that the deleted task is returned and the size of the list is updated.","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"StevenLiudw"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"StevenLiudw"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"StevenLiudw"},"content":" public void deleteTask_taskAdded_() {","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"StevenLiudw"},"content":" Task task \u003d new Task(\"Test Task\", TaskType.TODO);","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"StevenLiudw"},"content":" taskList.addTask(task);","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"StevenLiudw"},"content":" assertEquals(1, taskList.getSize());","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"StevenLiudw"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"StevenLiudw"},"content":" Task removedTask \u003d taskList.deleteTask(0);","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"StevenLiudw"},"content":" assertEquals(task, removedTask);","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"StevenLiudw"},"content":" assertEquals(0, taskList.getSize());","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"StevenLiudw"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"StevenLiudw"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"StevenLiudw":57}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"StevenLiudw"},"content":"todo read book","lastModifiedDate":"2023-08-23"},{"lineNumber":2,"author":{"gitId":"StevenLiudw"},"content":"deadline return book /by August 8th","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"StevenLiudw"},"content":"event project meeting /from Aug 6th 2pm /to 4pm","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"StevenLiudw"},"content":"mark 2","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"StevenLiudw"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"StevenLiudw"},"content":"blah","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"StevenLiudw"},"content":"todo","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"StevenLiudw"},"content":"delete 1","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"StevenLiudw"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"StevenLiudw"},"content":"bye","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"StevenLiudw":10}}] diff --git a/StevenLiudw_ip_master/commits.json b/StevenLiudw_ip_master/commits.json index 2ff75614..706ae5ac 100644 --- a/StevenLiudw_ip_master/commits.json +++ b/StevenLiudw_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"StevenLiudw":[{"date":"2023-08-22","commitResults":[{"hash":"398a7c8dc6a0aeb0feb17cf3e97c130a0ff367de","isMergeCommit":false,"messageTitle":"Level 0. Rename, Greet, Exit","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":0}}},{"hash":"5680524f941f11af72babb6e2250bceabe8b075a","isMergeCommit":false,"messageTitle":"Level 1. Echo","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":2}}},{"hash":"0e853d16614b98b874087cbbc98251413361a19f","isMergeCommit":false,"messageTitle":"Level 2. Add, List","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":1}}},{"hash":"b4c545e018f8adf79a4af68740edc2c3dfb9a198","isMergeCommit":false,"messageTitle":"Level 3. Mark as Done ( Create Task class )","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":51,"deletions":3}}},{"hash":"d481503564713b421d6977bf04c4c6cdbf31e888","isMergeCommit":false,"messageTitle":"Level 4. ToDos, Events, Deadlines( Use Inheritance to support multiple task types )","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":73,"deletions":0}}}]},{"date":"2023-08-23","commitResults":[{"hash":"6245d1ed34434025159caf995f859eadd8497537","isMergeCommit":false,"messageTitle":"Duke A-TextUiTesting: Automated Text UI Testing","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":6,"deletions":0},"java":{"insertions":2,"deletions":1},"bat":{"insertions":1,"deletions":1}}},{"hash":"26b0ef709d6ecf4373b2a41abc89506ca8bd6d1b","isMergeCommit":false,"messageTitle":"Revert \"Duke A-TextUiTesting: Automated Text UI Testing\"","messageBody":"This reverts commit 6245d1ed34434025159caf995f859eadd8497537.\n","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":6},"java":{"insertions":1,"deletions":2},"bat":{"insertions":1,"deletions":1}}},{"hash":"3c09b0b0d8fcc59f68b37af015d01e0d1b6bb767","isMergeCommit":false,"messageTitle":"Level 5. Handle Errors","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":86,"deletions":63}}},{"hash":"ac9ebc856746f638c4660edd75e021e4e050aacc","isMergeCommit":false,"messageTitle":"Level-6: Delete (Add delete function and also add more exception on mark and unmark to avoid the situation that the input number is not valid)","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":40,"deletions":14}}},{"hash":"ecd9b1a269c921a75569f7f13c2f09e3c1042f5d","isMergeCommit":false,"messageTitle":"A-Enums: Use Enums 1. Use Enums to avoid type error of task type 2. Fix a few bugs in Duke.java 3. Use the ui-test to detect bug","messageBody":"","tags":["A-Enums"],"fileTypesAndContributionMap":{"txt":{"insertions":10,"deletions":0},"java":{"insertions":25,"deletions":16}}}]},{"date":"2023-08-26","commitResults":[{"hash":"5fffbe9ea2034f33a63a3e459902ea2ee2b7723e","isMergeCommit":false,"messageTitle":"Storage.java : Add Storage.java","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0},"java":{"insertions":179,"deletions":24}}}]},{"date":"2023-08-27","commitResults":[{"hash":"5a739a0d65564fd0c88f404039c040cc326a2b9e","isMergeCommit":false,"messageTitle":"Deadline.java : change the d_time from string to LocalDate. Event: change the start and end from string to LocalDate. Make the chatbot understand the format yyyy-MM-dd","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":2},"java":{"insertions":54,"deletions":17}}},{"hash":"92dbe9550d258b190df82c7f5a7c2cd0fa3c8e92","isMergeCommit":false,"messageTitle":"A-MoreOOP Ui: deals with interactions with the user Storage: deals with loading tasks from the file and saving tasks in the file Parser: deals with making sense of the user command TaskList: contains the task list e.g., it has operations to add/delete tasks in the list Command classes Add JavaDoc for each file","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":6},"java":{"insertions":800,"deletions":227}}},{"hash":"d1148af5d2d9cd1c181113ebe8eafdf19bcc3e5b","isMergeCommit":false,"messageTitle":"A-Packages Divide classes into packages Add duke.command Add duke.storage Add duke.task Add duke.ui","messageBody":"","tags":["A-Packages","A-Jar"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":3},"java":{"insertions":89,"deletions":13}}}]},{"date":"2023-08-29","commitResults":[{"hash":"fb4cbdbdfe74b6609babf5c603ef51c015cb0967","isMergeCommit":false,"messageTitle":"build.gradle: add checkstyle plugins","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":3,"deletions":1}}},{"hash":"9bc32438befd331a52fc83d213f0897c08649351","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"ccfc7d6b99044679743bb081053ee8a1eba00808","isMergeCommit":false,"messageTitle":"ParserTest.java: Add a unit test for Paser class TaskListTest.java: Add a unit test for TaskList class","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":104,"deletions":1}}},{"hash":"ad28ebf2359d9841dbd4ed2ed807f629e4d9138e","isMergeCommit":false,"messageTitle":"ParserTest.java: add javadoc TaskListTest.java: add javadoc","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":33,"deletions":9}}},{"hash":"a9d876af19a71a570c314f7fc255979dc006e29b","isMergeCommit":false,"messageTitle":"All classes: Follow the Coding Standard","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{"java":{"insertions":38,"deletions":7}}},{"hash":"62b68d472feff11613d5a941cb33f953711751f9","isMergeCommit":false,"messageTitle":"FindCommand.java: Add this file for the new feature\"find\"","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":0},"java":{"insertions":75,"deletions":4}}}]},{"date":"2023-09-03","commitResults":[{"hash":"d76c6077640889d717c05283d97a0aeb8a76519f","isMergeCommit":false,"messageTitle":"checkstyle.xml: add the new checkstyle file suppressions.xml: add the new file","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{"gradle":{"insertions":4,"deletions":0},"java":{"insertions":183,"deletions":139}}}]},{"date":"2023-09-04","commitResults":[{"hash":"1f5222fb8a59366910a6b75f34a032750dd592b0","isMergeCommit":false,"messageTitle":"Level-10 Add GUI","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{"gradle":{"insertions":18,"deletions":5},"txt":{"insertions":1,"deletions":0},"fxml":{"insertions":47,"deletions":0},"java":{"insertions":252,"deletions":96}}},{"hash":"c930266d86313579b0eab62fbc2c5e91c24ce360","isMergeCommit":false,"messageTitle":"DukeException.java: Use Java varargs feature","messageBody":"","tags":["A-Varargs"],"fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":5}}}]}]},"authorFileTypeContributionMap":{"StevenLiudw":{"java":1492,"md":0,"fxml":47,"sh":0,"bat":0,"gradle":18,"txt":18}},"authorContributionVariance":{"StevenLiudw":85477.78},"authorDisplayNameMap":{"StevenLiudw":"CS2103T-W11-4 LIU ..IWEN"}} +{"authorDailyContributionsMap":{"StevenLiudw":[{"date":"2023-08-22","commitResults":[{"hash":"398a7c8dc6a0aeb0feb17cf3e97c130a0ff367de","isMergeCommit":false,"messageTitle":"Level 0. Rename, Greet, Exit","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":0}}},{"hash":"5680524f941f11af72babb6e2250bceabe8b075a","isMergeCommit":false,"messageTitle":"Level 1. Echo","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":2}}},{"hash":"0e853d16614b98b874087cbbc98251413361a19f","isMergeCommit":false,"messageTitle":"Level 2. Add, List","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":1}}},{"hash":"b4c545e018f8adf79a4af68740edc2c3dfb9a198","isMergeCommit":false,"messageTitle":"Level 3. Mark as Done ( Create Task class )","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":51,"deletions":3}}},{"hash":"d481503564713b421d6977bf04c4c6cdbf31e888","isMergeCommit":false,"messageTitle":"Level 4. ToDos, Events, Deadlines( Use Inheritance to support multiple task types )","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":73,"deletions":0}}}]},{"date":"2023-08-23","commitResults":[{"hash":"6245d1ed34434025159caf995f859eadd8497537","isMergeCommit":false,"messageTitle":"Duke A-TextUiTesting: Automated Text UI Testing","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":6,"deletions":0},"java":{"insertions":2,"deletions":1},"bat":{"insertions":1,"deletions":1}}},{"hash":"26b0ef709d6ecf4373b2a41abc89506ca8bd6d1b","isMergeCommit":false,"messageTitle":"Revert \"Duke A-TextUiTesting: Automated Text UI Testing\"","messageBody":"This reverts commit 6245d1ed34434025159caf995f859eadd8497537.\n","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":6},"java":{"insertions":1,"deletions":2},"bat":{"insertions":1,"deletions":1}}},{"hash":"3c09b0b0d8fcc59f68b37af015d01e0d1b6bb767","isMergeCommit":false,"messageTitle":"Level 5. Handle Errors","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":86,"deletions":63}}},{"hash":"ac9ebc856746f638c4660edd75e021e4e050aacc","isMergeCommit":false,"messageTitle":"Level-6: Delete (Add delete function and also add more exception on mark and unmark to avoid the situation that the input number is not valid)","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":40,"deletions":14}}},{"hash":"ecd9b1a269c921a75569f7f13c2f09e3c1042f5d","isMergeCommit":false,"messageTitle":"A-Enums: Use Enums 1. Use Enums to avoid type error of task type 2. Fix a few bugs in Duke.java 3. Use the ui-test to detect bug","messageBody":"","tags":["A-Enums"],"fileTypesAndContributionMap":{"txt":{"insertions":10,"deletions":0},"java":{"insertions":25,"deletions":16}}}]},{"date":"2023-08-26","commitResults":[{"hash":"5fffbe9ea2034f33a63a3e459902ea2ee2b7723e","isMergeCommit":false,"messageTitle":"Storage.java : Add Storage.java","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0},"java":{"insertions":179,"deletions":24}}}]},{"date":"2023-08-27","commitResults":[{"hash":"5a739a0d65564fd0c88f404039c040cc326a2b9e","isMergeCommit":false,"messageTitle":"Deadline.java : change the d_time from string to LocalDate. Event: change the start and end from string to LocalDate. Make the chatbot understand the format yyyy-MM-dd","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":2},"java":{"insertions":54,"deletions":17}}},{"hash":"92dbe9550d258b190df82c7f5a7c2cd0fa3c8e92","isMergeCommit":false,"messageTitle":"A-MoreOOP Ui: deals with interactions with the user Storage: deals with loading tasks from the file and saving tasks in the file Parser: deals with making sense of the user command TaskList: contains the task list e.g., it has operations to add/delete tasks in the list Command classes Add JavaDoc for each file","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":6},"java":{"insertions":800,"deletions":227}}},{"hash":"d1148af5d2d9cd1c181113ebe8eafdf19bcc3e5b","isMergeCommit":false,"messageTitle":"A-Packages Divide classes into packages Add duke.command Add duke.storage Add duke.task Add duke.ui","messageBody":"","tags":["A-Packages","A-Jar"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":3},"java":{"insertions":89,"deletions":13}}}]},{"date":"2023-08-29","commitResults":[{"hash":"fb4cbdbdfe74b6609babf5c603ef51c015cb0967","isMergeCommit":false,"messageTitle":"build.gradle: add checkstyle plugins","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":3,"deletions":1}}},{"hash":"9bc32438befd331a52fc83d213f0897c08649351","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"ccfc7d6b99044679743bb081053ee8a1eba00808","isMergeCommit":false,"messageTitle":"ParserTest.java: Add a unit test for Paser class TaskListTest.java: Add a unit test for TaskList class","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":104,"deletions":1}}},{"hash":"ad28ebf2359d9841dbd4ed2ed807f629e4d9138e","isMergeCommit":false,"messageTitle":"ParserTest.java: add javadoc TaskListTest.java: add javadoc","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":33,"deletions":9}}},{"hash":"a9d876af19a71a570c314f7fc255979dc006e29b","isMergeCommit":false,"messageTitle":"All classes: Follow the Coding Standard","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{"java":{"insertions":38,"deletions":7}}},{"hash":"62b68d472feff11613d5a941cb33f953711751f9","isMergeCommit":false,"messageTitle":"FindCommand.java: Add this file for the new feature\"find\"","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":0},"java":{"insertions":75,"deletions":4}}}]},{"date":"2023-09-03","commitResults":[{"hash":"d76c6077640889d717c05283d97a0aeb8a76519f","isMergeCommit":false,"messageTitle":"checkstyle.xml: add the new checkstyle file suppressions.xml: add the new file","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{"gradle":{"insertions":4,"deletions":0},"java":{"insertions":183,"deletions":139}}}]},{"date":"2023-09-04","commitResults":[{"hash":"1f5222fb8a59366910a6b75f34a032750dd592b0","isMergeCommit":false,"messageTitle":"Level-10 Add GUI","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{"gradle":{"insertions":18,"deletions":5},"txt":{"insertions":1,"deletions":0},"fxml":{"insertions":47,"deletions":0},"java":{"insertions":252,"deletions":96}}},{"hash":"c930266d86313579b0eab62fbc2c5e91c24ce360","isMergeCommit":false,"messageTitle":"DukeException.java: Use Java varargs feature","messageBody":"","tags":["A-Varargs"],"fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":5}}}]},{"date":"2023-09-10","commitResults":[{"hash":"feffd581dc95eb7860ae682ef77a09d779d7e107","isMergeCommit":false,"messageTitle":"Localization: Add local package for event and deadline classes User\u0027s system language settings can affect the displayed language in the program. This inconsistency can lead to potential confusion for users who might be expecting content in English.","messageBody":"To ensure a consistent user experience, it\u0027s vital to standardize\nthe display language.\n\nLet\u0027s introduce a local package for the event and deadline classes\nto ensure that the program output is always in English, irrespective\nof the user\u0027s system language settings.\n\nOpting for a local package approach allows us to have better control\nover the localization settings without relying on external variables\nlike system settings.\n","tags":["A-FullCommitMessage"],"fileTypesAndContributionMap":{"fxml":{"insertions":11,"deletions":9},"java":{"insertions":6,"deletions":2}}},{"hash":"4c1ce9138f90c396ef5a65c740ff5d822e60a2b4","isMergeCommit":false,"messageTitle":"Do a increment for branch-0Level-8","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":0}}},{"hash":"d928784d4bbee438d55d8a74deeb15d71a4d6556","isMergeCommit":false,"messageTitle":"Do a increment for the branch-Level-7","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":0}}},{"hash":"f6bd2d91bc9c0b825b2d796588319e23059a517e","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"# Conflicts:\n#\tsrc/main/java/Duke.java\n","fileTypesAndContributionMap":{}},{"hash":"32fab0c6228c44344b526b7229a61e7894b01356","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"# Conflicts:\n#\tsrc/main/java/Duke.java\n","tags":["Merge-Pr"],"fileTypesAndContributionMap":{}},{"hash":"f3b4d030706f8fb1349e2a02eae7a548320c4150","isMergeCommit":false,"messageTitle":"Assert feature: Document assumptions in key classes In complex systems like ours, it\u0027s essential to have clear documentation of the assumptions at different parts of the code. This not only improves readability but also aids in debugging potential issues in the future.","messageBody":"To ensure these assumptions are evident and actively checked during\nruntime, the assert feature is a suitable tool.\n\nLet\u0027s integrate the assert feature into DialogBox.java, Duke.java,\nParser.java, TaskList.java, Event.java, MainWindow.java, and Ui.java.\nThis will help in conveying and verifying our assumptions in these\ncritical parts of the code.\n\nNote: I am utilizing the built-in assert feature of Java, not JUnit\nassertions, for this purpose.\n","fileTypesAndContributionMap":{"java":{"insertions":29,"deletions":11}}},{"hash":"7808b007ce3c524992a8ed7f439c533211f8be1c","isMergeCommit":false,"messageTitle":"Revert \"Assert feature: Document assumptions in key classes\"","messageBody":"This reverts commit f3b4d030706f8fb1349e2a02eae7a548320c4150.\n","fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":29}}},{"hash":"3597b06d63ebf19c1f066ffbe199b1e99f05d6d7","isMergeCommit":false,"messageTitle":"Assert feature: Document assumptions in key classes In complex systems like ours, it\u0027s essential to have clear documentation of the assumptions at different parts of the code. This not only improves readability but also aids in debugging potential issues in the future.","messageBody":"To ensure these assumptions are evident and actively checked during\nruntime, the assert feature is a suitable tool.\n\nLet\u0027s integrate the assert feature into DialogBox.java, Duke.java,\nParser.java, TaskList.java, Event.java, MainWindow.java, and Ui.java.\nThis will help in conveying and verifying our assumptions in these\ncritical parts of the code.\n\nNote: I am utilizing the built-in assert feature of Java, not JUnit\nassertions, for this purpose.\n","tags":["A-Assertions"],"fileTypesAndContributionMap":{"java":{"insertions":27,"deletions":8}}},{"hash":"d37050e4cb16109fbf790756b139b6f7c5c49dc3","isMergeCommit":true,"messageTitle":"Merge pull request #5 from StevenLiudw/heads/A-Assertions","messageBody":"Heads/a assertions","fileTypesAndContributionMap":{}},{"hash":"1e15ab09de317a816cbd7aed6909dac543fba764","isMergeCommit":false,"messageTitle":"Code quality: Refactor for improved maintainability Maintaining high code quality is paramount for the longevity and scalability of our project. Over time, as code evolves, it\u0027s crucial to revisit and refactor parts that may have become less optimal or diverged from best practices.","messageBody":"In this commit, a critical examination of the codebase was\nundertaken. Several areas were identified and refactored to enhance\nreadability, maintainability, and adhere to our coding standards.\n\nThese changes not only make the codebase cleaner but also ensure\nthat future developers can understand and modify the code with\ngreater ease.\n\nIt\u0027s important to note that while making these quality improvements,\ncare was taken to preserve the existing functionality and ensure\nbackwards compatibility.\n","tags":["A-CodeQuality"],"fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":5}}},{"hash":"6ca5f4f0584b68ad3d193227b4836dcac2536695","isMergeCommit":true,"messageTitle":"Merge pull request #6 from StevenLiudw/heads/A-CodeQuality","messageBody":"Code quality: Refactor for improved maintainability","fileTypesAndContributionMap":{}},{"hash":"0034b221e9f0d3ba44c2a7ebcaf6c24a8e069537","isMergeCommit":false,"messageTitle":"Event.java: Integrate Java Streams for data processing Java Streams provide a modern, declarative approach to data manipulation, allowing for more readable and concise code.","messageBody":"In `Event.java`, traditional iterative approaches were replaced\nwith the Streams API. This transition streamlines various\noperations, making them more intuitive and reducing the risk\nof common iterative errors.\n\nBy adopting Java Streams, we\u0027re also aligning with current Java\nbest practices, ensuring that our code remains up-to-date with\ncontemporary Java development patterns.\n","tags":["A-Streams"],"fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":3}}},{"hash":"bc59ab11d07a46e39754853faa6382c60fb066fb","isMergeCommit":true,"messageTitle":"Merge pull request #7 from StevenLiudw/A-Streams","messageBody":"Event.java: Integrate Java Streams for data processing","fileTypesAndContributionMap":{}},{"hash":"29bbd3226e2eecafd08237c6855212cae9e8225f","isMergeCommit":false,"messageTitle":"C-Tagging Provide a way to tag items","messageBody":"","tags":["C-Tagging"],"fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":8},"fxml":{"insertions":4,"deletions":3},"java":{"insertions":142,"deletions":50}}}]}]},"authorFileTypeContributionMap":{"StevenLiudw":{"java":1621,"md":0,"fxml":50,"sh":0,"bat":0,"gradle":18,"txt":14}},"authorContributionVariance":{"StevenLiudw":71050.086},"authorDisplayNameMap":{"StevenLiudw":"CS2103T-W11-4 LIU ..IWEN"}} diff --git a/WinSheng1_ip_master/authorship.json b/WinSheng1_ip_master/authorship.json index 3b85fe1b..9d016beb 100644 --- a/WinSheng1_ip_master/authorship.json +++ b/WinSheng1_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"WinSheng1"},"content":"# duke.Duke project template","lastModifiedDate":"2023-09-04"},{"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":"WinSheng1"},"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-04"},{"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":{"WinSheng1":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":"-"},"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":"WinSheng1"},"content":" mainClass.set(\"duke.Duke\")","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":38,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"WinSheng1":1,"-":41}},{"path":"data/duke.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"WinSheng1"},"content":"[T] | 0 | x","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"WinSheng1"},"content":"[D] | 0 | x | 2023-12-12 1200","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"WinSheng1":2}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WinSheng1"},"content":"package duke;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"WinSheng1"},"content":"import duke.util.TaskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"WinSheng1"},"content":"import duke.util.Ui;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"WinSheng1"},"content":"import duke.util.Parser;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"WinSheng1"},"content":"import duke.util.Storage;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"WinSheng1"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":10,"author":{"gitId":"WinSheng1"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"WinSheng1"},"content":" * The Duke class represents the TaskMate bot that allows users to","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"WinSheng1"},"content":" * manage tasks by adding, deleting, marking and un-marking tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"WinSheng1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"WinSheng1"},"content":" * @author Win Sheng","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"WinSheng1"},"content":" * @since 3 September 2023","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"WinSheng1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":18,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"WinSheng1"},"content":" private Storage storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"WinSheng1"},"content":" private TaskList taskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"WinSheng1"},"content":" private Parser parser;","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"WinSheng1"},"content":" private Ui ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"WinSheng1"},"content":" public static boolean isDone \u003d false;","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"WinSheng1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"WinSheng1"},"content":" * Constructs a new instance of the task bot with the specified file path.","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"WinSheng1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"WinSheng1"},"content":" * @param filePath The file path that stores the task data in text format.","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"WinSheng1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"WinSheng1"},"content":" public Duke(String filePath) {","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"WinSheng1"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"WinSheng1"},"content":" storage \u003d new Storage(filePath);","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"WinSheng1"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"WinSheng1"},"content":" taskList \u003d new TaskList(storage.load());","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"WinSheng1"},"content":" parser \u003d new Parser();","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"WinSheng1"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"WinSheng1"},"content":" System.err.println(e);","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"WinSheng1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"WinSheng1"},"content":" * Runs the task bot, displaying a welcome message and processing user input.","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"WinSheng1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"WinSheng1"},"content":" public void run() {","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"WinSheng1"},"content":" ui.showWelcome();","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"WinSheng1"},"content":" while (!isDone) {","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"WinSheng1"},"content":" parser.parseUserInput(ui.getUserInput(), taskList, ui, storage);","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"WinSheng1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"WinSheng1"},"content":" * The main entry point for the task bot.","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"WinSheng1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"WinSheng1"},"content":" * @param args Not used.","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"WinSheng1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"WinSheng1"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"WinSheng1"},"content":" new Duke(\"./data/duke.txt\").run();","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":59,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"WinSheng1":57,"-":2}},{"path":"src/main/java/duke/exception/InvalidCommandException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WinSheng1"},"content":"package duke.exception;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"WinSheng1"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"WinSheng1"},"content":" * Represents an InvalidCommandException that is thrown when an invalid command is entered by the user.","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"WinSheng1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"WinSheng1"},"content":" * @author Win Sheng","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"WinSheng1"},"content":" * @since 3 September 2023","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"WinSheng1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"WinSheng1"},"content":"public class InvalidCommandException extends Exception {","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"WinSheng1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"WinSheng1"},"content":" * Constructs a new InvalidCommandException with a default error message and the list of available commands.","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"WinSheng1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"WinSheng1"},"content":" public InvalidCommandException() {","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"WinSheng1"},"content":" super(\"Invalid Command.\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"WinSheng1"},"content":" + \"Below are the list of available commands:\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"WinSheng1"},"content":" + \"list - displays the list of tasks\\n\"","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"WinSheng1"},"content":" + \"mark x - marks task x as done\\n\"","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"WinSheng1"},"content":" + \"unmark x - marks task x as undone\\n\"","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"WinSheng1"},"content":" + \"delete x - deletes task x\\n\"","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"WinSheng1"},"content":" + \"todo x - creates task with description x\\n\"","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"WinSheng1"},"content":" + \"deadline x /by y - creates task with description x by deadline y\\n\"","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"WinSheng1"},"content":" + \"event x /from y /to z - creates task with description x from y to z\");","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"WinSheng1"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"WinSheng1":25}},{"path":"src/main/java/duke/exception/MissingInputException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WinSheng1"},"content":"package duke.exception;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"WinSheng1"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"WinSheng1"},"content":" * Represents an MissingInputException that is thrown when the user enters a valid command with missing inputs.","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"WinSheng1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"WinSheng1"},"content":" * @author Win Sheng","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"WinSheng1"},"content":" * @since 3 September 2023","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"WinSheng1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"WinSheng1"},"content":"public class MissingInputException extends Exception {","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"WinSheng1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"WinSheng1"},"content":" * Constructs a new MissingInputException with an error message.","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"WinSheng1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"WinSheng1"},"content":" * @param message The error message describing the missing input.","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"WinSheng1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"WinSheng1"},"content":" public MissingInputException(String message) {","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"WinSheng1"},"content":" super(message);","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"WinSheng1"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"WinSheng1":19}},{"path":"src/main/java/duke/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WinSheng1"},"content":"package duke.task;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"WinSheng1"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"WinSheng1"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"WinSheng1"},"content":"import java.time.format.DateTimeFormatterBuilder;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"WinSheng1"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"WinSheng1"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"WinSheng1"},"content":" * Represents a Deadline task with a specific deadline.","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"WinSheng1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"WinSheng1"},"content":" * @author Win Sheng","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"WinSheng1"},"content":" * @since 3 September 2023","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"WinSheng1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"WinSheng1"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-25"},{"lineNumber":15,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":16,"author":{"gitId":"WinSheng1"},"content":" public LocalDateTime dateTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":18,"author":{"gitId":"WinSheng1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"WinSheng1"},"content":" * Constructs a new Deadline task with the specified description and deadline.","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"WinSheng1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"WinSheng1"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"WinSheng1"},"content":" * @param by The deadline of the task.","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"WinSheng1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"WinSheng1"},"content":" public Deadline(String description, String by) {","lastModifiedDate":"2023-08-25"},{"lineNumber":25,"author":{"gitId":"WinSheng1"},"content":" super(description);","lastModifiedDate":"2023-08-25"},{"lineNumber":26,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"WinSheng1"},"content":" DateTimeFormatter formatter \u003d new DateTimeFormatterBuilder()","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"WinSheng1"},"content":" .parseCaseInsensitive()","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"WinSheng1"},"content":" .appendOptional(DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\"))","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"WinSheng1"},"content":" .appendOptional(DateTimeFormatter.ofPattern(\"d/M/yyyy HHmm\"))","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"WinSheng1"},"content":" .toFormatter();","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"WinSheng1"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"WinSheng1"},"content":" this.dateTime \u003d LocalDateTime.parse(by, formatter);","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"WinSheng1"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"WinSheng1"},"content":" this.dateTime \u003d null;","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"WinSheng1"},"content":" System.out.println(\"Please use the following formats:\\n\"","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"WinSheng1"},"content":" + \"deadline task /by yyyy-mm-dd hhmm\\n\"","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"WinSheng1"},"content":" + \"deadline task /by dd/mm/yyyy hhmm\");","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":42,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":43,"author":{"gitId":"WinSheng1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"WinSheng1"},"content":" * Gets the type of the Deadline task.","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"WinSheng1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"WinSheng1"},"content":" * @return The type \"[D]\" for the Deadline task.","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"WinSheng1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"WinSheng1"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"WinSheng1"},"content":" public String type() {","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"WinSheng1"},"content":" return \"[D]\";","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"WinSheng1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"WinSheng1"},"content":" * Converts the Deadline task to a string format for storing in a file.","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"WinSheng1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"WinSheng1"},"content":" * @return A string representation of the Deadline task for file storage.","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"WinSheng1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"WinSheng1"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":59,"author":{"gitId":"WinSheng1"},"content":" public String toFileString() {","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"WinSheng1"},"content":" return type() + \" | \" + (isDone ? \"1\" : \"0\") + \" | \" + description + \" | \" + dateTime.format(DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\"));","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":62,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":63,"author":{"gitId":"WinSheng1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"WinSheng1"},"content":" * Returns a string representation of the Deadline task.","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"WinSheng1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"WinSheng1"},"content":" * @return A string representation of the Deadline task.","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"WinSheng1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"WinSheng1"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":69,"author":{"gitId":"WinSheng1"},"content":" public String toString() {","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"WinSheng1"},"content":" return type() + super.toString() + \" (by: \" + dateTime.format(DateTimeFormatter.ofPattern(\"MMM d yyyy h:mma\")) + \")\";","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":72,"author":{"gitId":"WinSheng1"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"WinSheng1":72}},{"path":"src/main/java/duke/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WinSheng1"},"content":"package duke.task;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"WinSheng1"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"WinSheng1"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"WinSheng1"},"content":"import java.time.format.DateTimeFormatterBuilder;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"WinSheng1"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"WinSheng1"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"WinSheng1"},"content":" * Represents an Event task with a specific start and end date and time.","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"WinSheng1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"WinSheng1"},"content":" * @author Win Sheng","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"WinSheng1"},"content":" * @since 3 September 2023","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"WinSheng1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"WinSheng1"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-25"},{"lineNumber":15,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":16,"author":{"gitId":"WinSheng1"},"content":" public LocalDateTime fromDateTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"WinSheng1"},"content":" public LocalDateTime toDateTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":19,"author":{"gitId":"WinSheng1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"WinSheng1"},"content":" * Constructs a new Event task with the specified description, start and end date and time.","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"WinSheng1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"WinSheng1"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"WinSheng1"},"content":" * @param from The start date and time of the task.","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"WinSheng1"},"content":" * @param to The end date and time of the task.","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"WinSheng1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"WinSheng1"},"content":" public Event(String description, String from, String to) {","lastModifiedDate":"2023-08-25"},{"lineNumber":27,"author":{"gitId":"WinSheng1"},"content":" super(description);","lastModifiedDate":"2023-08-25"},{"lineNumber":28,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"WinSheng1"},"content":" DateTimeFormatter formatter \u003d new DateTimeFormatterBuilder()","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"WinSheng1"},"content":" .parseCaseInsensitive()","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"WinSheng1"},"content":" .appendOptional(DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\"))","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"WinSheng1"},"content":" .appendOptional(DateTimeFormatter.ofPattern(\"d/M/yyyy HHmm\"))","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"WinSheng1"},"content":" .toFormatter();","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"WinSheng1"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"WinSheng1"},"content":" this.fromDateTime \u003d LocalDateTime.parse(from, formatter);","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"WinSheng1"},"content":" this.toDateTime \u003d LocalDateTime.parse(to, formatter);","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"WinSheng1"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"WinSheng1"},"content":" this.fromDateTime \u003d null;","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"WinSheng1"},"content":" this.toDateTime \u003d null;","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"WinSheng1"},"content":" System.out.println(\"Please use the following formats:\\n\"","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"WinSheng1"},"content":" + \"event task /from yyyy-mm-dd hhmm /to yyyy-mm-dd hhmm\\n\"","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"WinSheng1"},"content":" + \"deadline task /from dd/mm/yyyy hhmm /to dd/mm/yyyy hhmm\");","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":46,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":47,"author":{"gitId":"WinSheng1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"WinSheng1"},"content":" * Gets the type of the Event task.","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"WinSheng1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"WinSheng1"},"content":" * @return The type \"[E]\" for the Event task.","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"WinSheng1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"WinSheng1"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"WinSheng1"},"content":" public String type() {","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"WinSheng1"},"content":" return \"[E]\";","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"WinSheng1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"WinSheng1"},"content":" * Converts the Event task to a string format for storing in a file.","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"WinSheng1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"WinSheng1"},"content":" * @return A string representation of the Event task for file storage.","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"WinSheng1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"WinSheng1"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":63,"author":{"gitId":"WinSheng1"},"content":" public String toFileString() {","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"WinSheng1"},"content":" return type() + \" | \" + (isDone ? \"1\" : \"0\") + \" | \" + description + \" | \" + fromDateTime.format(DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\")) + \" | \" + toDateTime.format(DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\"));","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":66,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":67,"author":{"gitId":"WinSheng1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"WinSheng1"},"content":" * Returns a string representation of the Event task.","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"WinSheng1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"WinSheng1"},"content":" * @return A string representation of the Event task.","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"WinSheng1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"WinSheng1"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":73,"author":{"gitId":"WinSheng1"},"content":" public String toString() {","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"WinSheng1"},"content":" return type() + super.toString() + \" (from: \" + fromDateTime.format(DateTimeFormatter.ofPattern(\"MMM d yyyy h:mma\")) + \" to \" + toDateTime.format(DateTimeFormatter.ofPattern(\"MMM d yyyy h:mma\")) + \")\";","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":76,"author":{"gitId":"WinSheng1"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"WinSheng1":76}},{"path":"src/main/java/duke/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WinSheng1"},"content":"package duke.task;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"WinSheng1"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"WinSheng1"},"content":" * The abstract base class representing a task.","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"WinSheng1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"WinSheng1"},"content":" * @author Win Sheng","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"WinSheng1"},"content":" * @since 3 September 2023","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"WinSheng1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"WinSheng1"},"content":"public abstract class Task {","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"WinSheng1"},"content":" public String description;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"WinSheng1"},"content":" public boolean isDone;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":13,"author":{"gitId":"WinSheng1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"WinSheng1"},"content":" * Constructs a new Task with the specified description.","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"WinSheng1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"WinSheng1"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"WinSheng1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"WinSheng1"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-25"},{"lineNumber":19,"author":{"gitId":"WinSheng1"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-25"},{"lineNumber":20,"author":{"gitId":"WinSheng1"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-25"},{"lineNumber":21,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":22,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":23,"author":{"gitId":"WinSheng1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"WinSheng1"},"content":" * Gets the type of the task.","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"WinSheng1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"WinSheng1"},"content":" * Subclasses must implement this method to specify the type of the task.","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"WinSheng1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"WinSheng1"},"content":" * @return The type of the task.","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"WinSheng1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"WinSheng1"},"content":" public abstract String type();","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"WinSheng1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"WinSheng1"},"content":" * Converts the task to a string format for storing in a file.","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"WinSheng1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"WinSheng1"},"content":" * Subclasses must implement this method to specify the string representation of the task when saving it to a file.","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"WinSheng1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"WinSheng1"},"content":" * @return A string representation of the task for file storage.","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"WinSheng1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"WinSheng1"},"content":" public abstract String toFileString();","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"WinSheng1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"WinSheng1"},"content":" * Gets a status icon representing the task\u0027s completion status.","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"WinSheng1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"WinSheng1"},"content":" * @return A status icon (\"X\" for done, \" \" for undone).","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"WinSheng1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"WinSheng1"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-25"},{"lineNumber":47,"author":{"gitId":"WinSheng1"},"content":" return (isDone ? \"X\" : \" \");","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":49,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":50,"author":{"gitId":"WinSheng1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"WinSheng1"},"content":" * Returns a string representation of the task.","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"WinSheng1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"WinSheng1"},"content":" * @return A string representation of the task.","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"WinSheng1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"WinSheng1"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":56,"author":{"gitId":"WinSheng1"},"content":" public String toString() {","lastModifiedDate":"2023-08-25"},{"lineNumber":57,"author":{"gitId":"WinSheng1"},"content":" return \"[\" + getStatusIcon() + \"] \" + description;","lastModifiedDate":"2023-08-25"},{"lineNumber":58,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":59,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":60,"author":{"gitId":"WinSheng1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"WinSheng1"},"content":" * Gets the description of the task.","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"WinSheng1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"WinSheng1"},"content":" * @return The description of the task.","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"WinSheng1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"WinSheng1"},"content":" public String getDescription() {","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"WinSheng1"},"content":" return this.description;","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"WinSheng1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"WinSheng1"},"content":" * Updates the task\u0027s completion status and displays a message based on the expected status.","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"WinSheng1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"WinSheng1"},"content":" * @param expectedStatus The expected status of the task (true for done, false for undone).","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"WinSheng1"},"content":" * @param doneMessage The message to display when the task is done.","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"WinSheng1"},"content":" * @param undoneMessage The message to display when the task is undone.","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"WinSheng1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"WinSheng1"},"content":" public void updateTaskStatus(boolean expectedStatus, String doneMessage, String undoneMessage) {","lastModifiedDate":"2023-08-28"},{"lineNumber":77,"author":{"gitId":"WinSheng1"},"content":" if (isDone \u003d\u003d expectedStatus) {","lastModifiedDate":"2023-08-28"},{"lineNumber":78,"author":{"gitId":"WinSheng1"},"content":" System.out.println(doneMessage);","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"WinSheng1"},"content":" } else {","lastModifiedDate":"2023-08-28"},{"lineNumber":80,"author":{"gitId":"WinSheng1"},"content":" isDone \u003d expectedStatus;","lastModifiedDate":"2023-08-28"},{"lineNumber":81,"author":{"gitId":"WinSheng1"},"content":" System.out.println(undoneMessage);","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":83,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":84,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":85,"author":{"gitId":"WinSheng1"},"content":" public boolean containsKeyword(String keyword) {","lastModifiedDate":"2023-09-04"},{"lineNumber":86,"author":{"gitId":"WinSheng1"},"content":" return description.toLowerCase().contains(keyword.toLowerCase());","lastModifiedDate":"2023-09-04"},{"lineNumber":87,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":88,"author":{"gitId":"WinSheng1"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"WinSheng1":88}},{"path":"src/main/java/duke/task/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WinSheng1"},"content":"package duke.task;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"WinSheng1"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"WinSheng1"},"content":" * Represents a ToDo task.","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"WinSheng1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"WinSheng1"},"content":" * @author Win Sheng","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"WinSheng1"},"content":" * @since 3 September 2023","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"WinSheng1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"WinSheng1"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-25"},{"lineNumber":10,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":11,"author":{"gitId":"WinSheng1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"WinSheng1"},"content":" * Constructs a new ToDo task with the specified description.","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"WinSheng1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"WinSheng1"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"WinSheng1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"WinSheng1"},"content":" public ToDo(String description) {","lastModifiedDate":"2023-08-25"},{"lineNumber":17,"author":{"gitId":"WinSheng1"},"content":" super(description);","lastModifiedDate":"2023-08-25"},{"lineNumber":18,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":19,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":20,"author":{"gitId":"WinSheng1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"WinSheng1"},"content":" * Gets the type of the ToDo task.","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"WinSheng1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"WinSheng1"},"content":" * @return The type \"[T]\" for the ToDo task.","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"WinSheng1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"WinSheng1"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"WinSheng1"},"content":" public String type() {","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"WinSheng1"},"content":" return \"[T]\";","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"WinSheng1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"WinSheng1"},"content":" * Converts the ToDo task to a string format for storing in a file.","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"WinSheng1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"WinSheng1"},"content":" * @return A string representation of the ToDo task for file storage.","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"WinSheng1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"WinSheng1"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":36,"author":{"gitId":"WinSheng1"},"content":" public String toFileString() {","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"WinSheng1"},"content":" return type() + \" | \" + (isDone ? \"1\" : \"0\") + \" | \" + description;","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"WinSheng1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"WinSheng1"},"content":" * Returns a string representation of the ToDo task.","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"WinSheng1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"WinSheng1"},"content":" * @return A string representation of the ToDo task.","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"WinSheng1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"WinSheng1"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"WinSheng1"},"content":" public String toString() {","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"WinSheng1"},"content":" return type() + super.toString();","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":49,"author":{"gitId":"WinSheng1"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"WinSheng1":49}},{"path":"src/main/java/duke/util/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WinSheng1"},"content":"package duke.util;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"WinSheng1"},"content":"import duke.Duke;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"WinSheng1"},"content":"import duke.exception.InvalidCommandException;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"WinSheng1"},"content":"import duke.exception.MissingInputException;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"WinSheng1"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"WinSheng1"},"content":"import duke.task.ToDo;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"WinSheng1"},"content":"import duke.task.Event;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"WinSheng1"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"WinSheng1"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"WinSheng1"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"WinSheng1"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"WinSheng1"},"content":" * The Parser class is responsible for parsing user input and executing corresponding commands.","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"WinSheng1"},"content":" * It handles various user commands such as adding tasks, listing tasks, marking tasks as done, un-marking tasks and","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"WinSheng1"},"content":" * deleting tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"WinSheng1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"WinSheng1"},"content":" * @author Win Sheng","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"WinSheng1"},"content":" * @since 3 September 2023","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"WinSheng1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"WinSheng1"},"content":"public class Parser {","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"WinSheng1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"WinSheng1"},"content":" * Parses the user\u0027s input and executes the corresponding commands.","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"WinSheng1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"WinSheng1"},"content":" * @param userInput The user\u0027s input.","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"WinSheng1"},"content":" * @param taskList The list of tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"WinSheng1"},"content":" * @param ui The Ui for displaying messages.","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"WinSheng1"},"content":" * @param storage The Storage for saving and loading tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"WinSheng1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"WinSheng1"},"content":" public void parseUserInput(String userInput, TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"WinSheng1"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"WinSheng1"},"content":" String[] individualWords \u003d userInput.split(\" \");","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"WinSheng1"},"content":" if (individualWords.length \u003e 0) { // To handle whitespace input","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"WinSheng1"},"content":" String firstWord \u003d individualWords[0];","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"WinSheng1"},"content":" String lowerCapsFirstWord \u003d firstWord.toLowerCase();","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"WinSheng1"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"WinSheng1"},"content":" switch (lowerCapsFirstWord) {","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"WinSheng1"},"content":" case \"bye\":","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"WinSheng1"},"content":" ui.showGoodbye();","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"WinSheng1"},"content":" Duke.isDone \u003d true;","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"WinSheng1"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"WinSheng1"},"content":" case \"list\":","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"WinSheng1"},"content":" listTasks(taskList, ui);","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"WinSheng1"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"WinSheng1"},"content":" case \"mark\":","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"WinSheng1"},"content":" markTask(userInput, taskList, ui);","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"WinSheng1"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"WinSheng1"},"content":" case \"unmark\":","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"WinSheng1"},"content":" unmarkTask(userInput, taskList, ui);","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"WinSheng1"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"WinSheng1"},"content":" case \"delete\":","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"WinSheng1"},"content":" deleteTask(userInput, taskList, ui);","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"WinSheng1"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"WinSheng1"},"content":" case \"todo\":","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"WinSheng1"},"content":" addTodoTask(userInput, taskList, ui);","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"WinSheng1"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"WinSheng1"},"content":" case \"deadline\":","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"WinSheng1"},"content":" addDeadlineTask(userInput, taskList, ui);","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"WinSheng1"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"WinSheng1"},"content":" case \"event\":","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"WinSheng1"},"content":" addEventTask(userInput, taskList, ui);","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"WinSheng1"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"WinSheng1"},"content":" case \"find\":","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"WinSheng1"},"content":" findByKeyword(userInput, taskList, ui);","lastModifiedDate":"2023-09-04"},{"lineNumber":72,"author":{"gitId":"WinSheng1"},"content":" break;","lastModifiedDate":"2023-09-04"},{"lineNumber":73,"author":{"gitId":"WinSheng1"},"content":" default:","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"WinSheng1"},"content":" throw new InvalidCommandException();","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"WinSheng1"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"WinSheng1"},"content":" storage.save(taskList.getAllTasks());","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"WinSheng1"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"WinSheng1"},"content":" ui.showMessage(\"Cannot save tasks.\");","lastModifiedDate":"2023-09-04"},{"lineNumber":81,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"WinSheng1"},"content":" } catch (MissingInputException | InvalidCommandException | IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"WinSheng1"},"content":" ui.showMessage(e.getMessage());","lastModifiedDate":"2023-09-04"},{"lineNumber":84,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":85,"author":{"gitId":"WinSheng1"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":86,"author":{"gitId":"WinSheng1"},"content":" throw new InvalidCommandException();","lastModifiedDate":"2023-09-04"},{"lineNumber":87,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":88,"author":{"gitId":"WinSheng1"},"content":" } catch (InvalidCommandException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":89,"author":{"gitId":"WinSheng1"},"content":" ui.showMessage(e.getMessage());","lastModifiedDate":"2023-09-04"},{"lineNumber":90,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"WinSheng1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":94,"author":{"gitId":"WinSheng1"},"content":" * Displays the list of tasks saved.","lastModifiedDate":"2023-09-03"},{"lineNumber":95,"author":{"gitId":"WinSheng1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":96,"author":{"gitId":"WinSheng1"},"content":" * @param taskList The list of tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":97,"author":{"gitId":"WinSheng1"},"content":" * @param ui The Ui for displaying messages.","lastModifiedDate":"2023-09-03"},{"lineNumber":98,"author":{"gitId":"WinSheng1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":99,"author":{"gitId":"WinSheng1"},"content":" private void listTasks(TaskList taskList, Ui ui) {","lastModifiedDate":"2023-09-02"},{"lineNumber":100,"author":{"gitId":"WinSheng1"},"content":" if (taskList.getSize() \u003d\u003d 0) {","lastModifiedDate":"2023-09-02"},{"lineNumber":101,"author":{"gitId":"WinSheng1"},"content":" ui.showMessage(\"You have 0 task.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"WinSheng1"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"WinSheng1"},"content":" System.out.println(\"Here are your tasks:\"); // Not using ui.printLine() to prevent lines between the tasks","lastModifiedDate":"2023-09-04"},{"lineNumber":104,"author":{"gitId":"WinSheng1"},"content":" for (int i \u003d 0; i \u003c taskList.getSize(); i++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":105,"author":{"gitId":"WinSheng1"},"content":" Task task \u003d taskList.getTask(i);","lastModifiedDate":"2023-09-02"},{"lineNumber":106,"author":{"gitId":"WinSheng1"},"content":" System.out.println((i + 1) + \".\" + task.toString());","lastModifiedDate":"2023-09-04"},{"lineNumber":107,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":108,"author":{"gitId":"WinSheng1"},"content":" ui.printLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":109,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":110,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":111,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":112,"author":{"gitId":"WinSheng1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":113,"author":{"gitId":"WinSheng1"},"content":" * Marks a task as done.","lastModifiedDate":"2023-09-03"},{"lineNumber":114,"author":{"gitId":"WinSheng1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":115,"author":{"gitId":"WinSheng1"},"content":" * @param userInput The user\u0027s input.","lastModifiedDate":"2023-09-03"},{"lineNumber":116,"author":{"gitId":"WinSheng1"},"content":" * @param taskList The list of tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":117,"author":{"gitId":"WinSheng1"},"content":" * @param ui The Ui for displaying messages.","lastModifiedDate":"2023-09-03"},{"lineNumber":118,"author":{"gitId":"WinSheng1"},"content":" * @throws MissingInputException If the user input is missing required information.","lastModifiedDate":"2023-09-03"},{"lineNumber":119,"author":{"gitId":"WinSheng1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":120,"author":{"gitId":"WinSheng1"},"content":" private void markTask(String userInput, TaskList taskList, Ui ui) throws MissingInputException {","lastModifiedDate":"2023-09-02"},{"lineNumber":121,"author":{"gitId":"WinSheng1"},"content":" String[] individualWords \u003d userInput.split(\" \");","lastModifiedDate":"2023-09-02"},{"lineNumber":122,"author":{"gitId":"WinSheng1"},"content":" if (individualWords.length \u003c\u003d 1) {","lastModifiedDate":"2023-09-02"},{"lineNumber":123,"author":{"gitId":"WinSheng1"},"content":" throw new MissingInputException(\"Task to mark cannot be empty!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":124,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":125,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":126,"author":{"gitId":"WinSheng1"},"content":" if (taskList.isEmpty()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":127,"author":{"gitId":"WinSheng1"},"content":" throw new IndexOutOfBoundsException(\"There are no tasks to mark.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":128,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":129,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":130,"author":{"gitId":"WinSheng1"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":131,"author":{"gitId":"WinSheng1"},"content":" int taskNumber \u003d Integer.parseInt(userInput.substring(5)) - 1;","lastModifiedDate":"2023-09-02"},{"lineNumber":132,"author":{"gitId":"WinSheng1"},"content":" Task task \u003d taskList.getTask(taskNumber);","lastModifiedDate":"2023-09-02"},{"lineNumber":133,"author":{"gitId":"WinSheng1"},"content":" task.updateTaskStatus(true, \"Task \" + (taskNumber + 1) + \" is already done!\", \"Great job! Task \" + (taskNumber + 1) + \" is done!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":134,"author":{"gitId":"WinSheng1"},"content":" ui.printLine();","lastModifiedDate":"2023-09-04"},{"lineNumber":135,"author":{"gitId":"WinSheng1"},"content":" } catch (NumberFormatException | IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":136,"author":{"gitId":"WinSheng1"},"content":" ui.showMessage(\"Invalid task number.\");","lastModifiedDate":"2023-09-04"},{"lineNumber":137,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":138,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":139,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":140,"author":{"gitId":"WinSheng1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":141,"author":{"gitId":"WinSheng1"},"content":" * Marks a task as undone.","lastModifiedDate":"2023-09-03"},{"lineNumber":142,"author":{"gitId":"WinSheng1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":143,"author":{"gitId":"WinSheng1"},"content":" * @param userInput The user\u0027s input.","lastModifiedDate":"2023-09-03"},{"lineNumber":144,"author":{"gitId":"WinSheng1"},"content":" * @param taskList The list of tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":145,"author":{"gitId":"WinSheng1"},"content":" * @param ui The Ui for displaying messages.","lastModifiedDate":"2023-09-03"},{"lineNumber":146,"author":{"gitId":"WinSheng1"},"content":" * @throws MissingInputException If the user input is missing required information.","lastModifiedDate":"2023-09-03"},{"lineNumber":147,"author":{"gitId":"WinSheng1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":148,"author":{"gitId":"WinSheng1"},"content":" private void unmarkTask(String userInput, TaskList taskList, Ui ui) throws MissingInputException {","lastModifiedDate":"2023-09-02"},{"lineNumber":149,"author":{"gitId":"WinSheng1"},"content":" String[] individualWords \u003d userInput.split(\" \");","lastModifiedDate":"2023-09-02"},{"lineNumber":150,"author":{"gitId":"WinSheng1"},"content":" if (individualWords.length \u003c\u003d 1) {","lastModifiedDate":"2023-09-02"},{"lineNumber":151,"author":{"gitId":"WinSheng1"},"content":" throw new MissingInputException(\"Task to unmark cannot be empty!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":152,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":153,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":154,"author":{"gitId":"WinSheng1"},"content":" if (taskList.isEmpty()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":155,"author":{"gitId":"WinSheng1"},"content":" throw new IndexOutOfBoundsException(\"There are no tasks to unmark.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":156,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":157,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":158,"author":{"gitId":"WinSheng1"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":159,"author":{"gitId":"WinSheng1"},"content":" int taskNumber \u003d Integer.parseInt(userInput.substring(7)) - 1;","lastModifiedDate":"2023-09-02"},{"lineNumber":160,"author":{"gitId":"WinSheng1"},"content":" Task task \u003d taskList.getTask(taskNumber);","lastModifiedDate":"2023-09-02"},{"lineNumber":161,"author":{"gitId":"WinSheng1"},"content":" task.updateTaskStatus(false, \"Task \" + (taskNumber + 1) + \" is still incomplete.\", \"Okay, I\u0027ve updated Task \" + (taskNumber + 1) + \" to be incomplete.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":162,"author":{"gitId":"WinSheng1"},"content":" ui.printLine();","lastModifiedDate":"2023-09-04"},{"lineNumber":163,"author":{"gitId":"WinSheng1"},"content":" } catch (NumberFormatException | IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":164,"author":{"gitId":"WinSheng1"},"content":" ui.showMessage(\"Invalid task number.\");","lastModifiedDate":"2023-09-04"},{"lineNumber":165,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":166,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":167,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":168,"author":{"gitId":"WinSheng1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":169,"author":{"gitId":"WinSheng1"},"content":" * Deletes a task from the list of tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":170,"author":{"gitId":"WinSheng1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":171,"author":{"gitId":"WinSheng1"},"content":" * @param userInput The user\u0027s input.","lastModifiedDate":"2023-09-03"},{"lineNumber":172,"author":{"gitId":"WinSheng1"},"content":" * @param taskList The list of tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":173,"author":{"gitId":"WinSheng1"},"content":" * @param ui The Ui for displaying messages.","lastModifiedDate":"2023-09-03"},{"lineNumber":174,"author":{"gitId":"WinSheng1"},"content":" * @throws MissingInputException If the user input is missing required information.","lastModifiedDate":"2023-09-03"},{"lineNumber":175,"author":{"gitId":"WinSheng1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":176,"author":{"gitId":"WinSheng1"},"content":" private void deleteTask(String userInput, TaskList taskList, Ui ui) throws MissingInputException {","lastModifiedDate":"2023-09-02"},{"lineNumber":177,"author":{"gitId":"WinSheng1"},"content":" String[] individualWords \u003d userInput.split(\" \");","lastModifiedDate":"2023-09-02"},{"lineNumber":178,"author":{"gitId":"WinSheng1"},"content":" if (individualWords.length \u003c\u003d 1) {","lastModifiedDate":"2023-09-02"},{"lineNumber":179,"author":{"gitId":"WinSheng1"},"content":" throw new MissingInputException(\"Task to be deleted cannot be empty!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":180,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":181,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":182,"author":{"gitId":"WinSheng1"},"content":" if (taskList.isEmpty()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":183,"author":{"gitId":"WinSheng1"},"content":" throw new IndexOutOfBoundsException(\"There are no tasks to be deleted.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":184,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":185,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":186,"author":{"gitId":"WinSheng1"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":187,"author":{"gitId":"WinSheng1"},"content":" int taskNumber \u003d Integer.parseInt(userInput.substring(7)) - 1;","lastModifiedDate":"2023-09-02"},{"lineNumber":188,"author":{"gitId":"WinSheng1"},"content":" Task deletedTask \u003d taskList.getTask(taskNumber);","lastModifiedDate":"2023-09-02"},{"lineNumber":189,"author":{"gitId":"WinSheng1"},"content":" taskList.deleteTask(taskNumber);","lastModifiedDate":"2023-09-02"},{"lineNumber":190,"author":{"gitId":"WinSheng1"},"content":" ui.showMessage(\"This task has been removed:\\n \" + deletedTask + \"\\nYou have a total of \" + taskList.getSize() + (taskList.getSize() \u003d\u003d 1 ? \" task.\\n\" : \" tasks.\"));","lastModifiedDate":"2023-09-02"},{"lineNumber":191,"author":{"gitId":"WinSheng1"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":192,"author":{"gitId":"WinSheng1"},"content":" ui.showMessage(\"Invalid task number.\");","lastModifiedDate":"2023-09-04"},{"lineNumber":193,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":194,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":195,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":196,"author":{"gitId":"WinSheng1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":197,"author":{"gitId":"WinSheng1"},"content":" * Adds a ToDo task to the list of tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":198,"author":{"gitId":"WinSheng1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":199,"author":{"gitId":"WinSheng1"},"content":" * @param userInput The user\u0027s input.","lastModifiedDate":"2023-09-03"},{"lineNumber":200,"author":{"gitId":"WinSheng1"},"content":" * @param taskList The list of tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":201,"author":{"gitId":"WinSheng1"},"content":" * @param ui The Ui for displaying messages.","lastModifiedDate":"2023-09-03"},{"lineNumber":202,"author":{"gitId":"WinSheng1"},"content":" * @throws MissingInputException If the user input is missing required information.","lastModifiedDate":"2023-09-03"},{"lineNumber":203,"author":{"gitId":"WinSheng1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":204,"author":{"gitId":"WinSheng1"},"content":" private void addTodoTask(String userInput, TaskList taskList, Ui ui) throws MissingInputException {","lastModifiedDate":"2023-09-02"},{"lineNumber":205,"author":{"gitId":"WinSheng1"},"content":" String[] individualWords \u003d userInput.split(\" \");","lastModifiedDate":"2023-09-02"},{"lineNumber":206,"author":{"gitId":"WinSheng1"},"content":" if (individualWords.length \u003c\u003d 1) {","lastModifiedDate":"2023-09-02"},{"lineNumber":207,"author":{"gitId":"WinSheng1"},"content":" throw new MissingInputException(\"The description of a todo cannot be empty!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":208,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":209,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":210,"author":{"gitId":"WinSheng1"},"content":" String description \u003d userInput.substring(5).trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":211,"author":{"gitId":"WinSheng1"},"content":" ToDo task \u003d new ToDo(description);","lastModifiedDate":"2023-09-02"},{"lineNumber":212,"author":{"gitId":"WinSheng1"},"content":" taskList.addTask(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":213,"author":{"gitId":"WinSheng1"},"content":" ui.showMessage(\"I\u0027ve added this task:\\n \" + task + \"\\nYou have a total of \" + taskList.getSize() + (taskList.getSize() \u003d\u003d 1 ? \" task.\" : \" tasks.\"));","lastModifiedDate":"2023-09-02"},{"lineNumber":214,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":215,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":216,"author":{"gitId":"WinSheng1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":217,"author":{"gitId":"WinSheng1"},"content":" * Adds a Deadline task to the list of tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":218,"author":{"gitId":"WinSheng1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":219,"author":{"gitId":"WinSheng1"},"content":" * @param userInput The user\u0027s input.","lastModifiedDate":"2023-09-03"},{"lineNumber":220,"author":{"gitId":"WinSheng1"},"content":" * @param taskList The list of tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":221,"author":{"gitId":"WinSheng1"},"content":" * @param ui The Ui for displaying messages.","lastModifiedDate":"2023-09-03"},{"lineNumber":222,"author":{"gitId":"WinSheng1"},"content":" * @throws MissingInputException If the user input is missing required information.","lastModifiedDate":"2023-09-03"},{"lineNumber":223,"author":{"gitId":"WinSheng1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":224,"author":{"gitId":"WinSheng1"},"content":" private void addDeadlineTask(String userInput, TaskList taskList, Ui ui) throws MissingInputException {","lastModifiedDate":"2023-09-02"},{"lineNumber":225,"author":{"gitId":"WinSheng1"},"content":" String[] individualWords \u003d userInput.split(\" \");","lastModifiedDate":"2023-09-02"},{"lineNumber":226,"author":{"gitId":"WinSheng1"},"content":" if (individualWords.length \u003c\u003d 1) {","lastModifiedDate":"2023-09-02"},{"lineNumber":227,"author":{"gitId":"WinSheng1"},"content":" throw new MissingInputException(\"You are missing one or some of these inputs - description/ by.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":228,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":229,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":230,"author":{"gitId":"WinSheng1"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":231,"author":{"gitId":"WinSheng1"},"content":" String fullStr \u003d userInput.substring(9);","lastModifiedDate":"2023-09-02"},{"lineNumber":232,"author":{"gitId":"WinSheng1"},"content":" String[] parts \u003d fullStr.split(\"/by\");","lastModifiedDate":"2023-09-02"},{"lineNumber":233,"author":{"gitId":"WinSheng1"},"content":" String description \u003d parts[0].trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":234,"author":{"gitId":"WinSheng1"},"content":" String by \u003d parts[1].trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":235,"author":{"gitId":"WinSheng1"},"content":" Deadline task \u003d new Deadline(description, by);","lastModifiedDate":"2023-09-02"},{"lineNumber":236,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":237,"author":{"gitId":"WinSheng1"},"content":" if (task.dateTime !\u003d null) {","lastModifiedDate":"2023-09-02"},{"lineNumber":238,"author":{"gitId":"WinSheng1"},"content":" taskList.addTask(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":239,"author":{"gitId":"WinSheng1"},"content":" ui.showMessage(\"I\u0027ve added this task:\\n \" + task + \"\\nYou have a total of \" + taskList.getSize() + (taskList.getSize() \u003d\u003d 1 ? \" task.\" : \" tasks.\"));","lastModifiedDate":"2023-09-02"},{"lineNumber":240,"author":{"gitId":"WinSheng1"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":241,"author":{"gitId":"WinSheng1"},"content":" ui.printLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":242,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":243,"author":{"gitId":"WinSheng1"},"content":" } catch (ArrayIndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":244,"author":{"gitId":"WinSheng1"},"content":" throw new MissingInputException(\"You are missing one or some of these inputs - description/ by.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":245,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":246,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":247,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":248,"author":{"gitId":"WinSheng1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":249,"author":{"gitId":"WinSheng1"},"content":" * Adds an Event task to the list of tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":250,"author":{"gitId":"WinSheng1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":251,"author":{"gitId":"WinSheng1"},"content":" * @param userInput The user\u0027s input.","lastModifiedDate":"2023-09-03"},{"lineNumber":252,"author":{"gitId":"WinSheng1"},"content":" * @param taskList The list of tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":253,"author":{"gitId":"WinSheng1"},"content":" * @param ui The Ui for displaying messages.","lastModifiedDate":"2023-09-03"},{"lineNumber":254,"author":{"gitId":"WinSheng1"},"content":" * @throws MissingInputException If the user input is missing required information.","lastModifiedDate":"2023-09-03"},{"lineNumber":255,"author":{"gitId":"WinSheng1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":256,"author":{"gitId":"WinSheng1"},"content":" private void addEventTask(String userInput, TaskList taskList, Ui ui) throws MissingInputException {","lastModifiedDate":"2023-09-02"},{"lineNumber":257,"author":{"gitId":"WinSheng1"},"content":" String[] individualWords \u003d userInput.split(\" \");","lastModifiedDate":"2023-09-02"},{"lineNumber":258,"author":{"gitId":"WinSheng1"},"content":" if (individualWords.length \u003c\u003d 1) {","lastModifiedDate":"2023-09-02"},{"lineNumber":259,"author":{"gitId":"WinSheng1"},"content":" throw new MissingInputException(\"You are missing one or some of these inputs - description/ from/ to.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":260,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":261,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":262,"author":{"gitId":"WinSheng1"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":263,"author":{"gitId":"WinSheng1"},"content":" String fullStr \u003d userInput.substring(6);","lastModifiedDate":"2023-09-02"},{"lineNumber":264,"author":{"gitId":"WinSheng1"},"content":" String[] partialStr \u003d fullStr.split(\"/from\");","lastModifiedDate":"2023-09-02"},{"lineNumber":265,"author":{"gitId":"WinSheng1"},"content":" String description \u003d partialStr[0].trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":266,"author":{"gitId":"WinSheng1"},"content":" String[] toFrom \u003d partialStr[1].split(\"/to\");","lastModifiedDate":"2023-09-02"},{"lineNumber":267,"author":{"gitId":"WinSheng1"},"content":" String from \u003d toFrom[0].trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":268,"author":{"gitId":"WinSheng1"},"content":" String to \u003d toFrom[1].trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":269,"author":{"gitId":"WinSheng1"},"content":" Event task \u003d new Event(description, from, to);","lastModifiedDate":"2023-09-02"},{"lineNumber":270,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":271,"author":{"gitId":"WinSheng1"},"content":" if (task.fromDateTime !\u003d null \u0026\u0026 task.toDateTime !\u003d null) {","lastModifiedDate":"2023-09-02"},{"lineNumber":272,"author":{"gitId":"WinSheng1"},"content":" taskList.addTask(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":273,"author":{"gitId":"WinSheng1"},"content":" ui.showMessage(\"I\u0027ve added this task:\\n \" + task + \"\\nYou have a total of \" + taskList.getSize() + (taskList.getSize() \u003d\u003d 1 ? \" task.\" : \" tasks.\"));","lastModifiedDate":"2023-09-02"},{"lineNumber":274,"author":{"gitId":"WinSheng1"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":275,"author":{"gitId":"WinSheng1"},"content":" ui.printLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":276,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":277,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":278,"author":{"gitId":"WinSheng1"},"content":" } catch (ArrayIndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":279,"author":{"gitId":"WinSheng1"},"content":" throw new MissingInputException(\"You are missing one or some of these inputs - description/ from/ to.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":280,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":281,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":282,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":283,"author":{"gitId":"WinSheng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":284,"author":{"gitId":"WinSheng1"},"content":" * Finds all tasks matching a specified keyword and displays the list of matching tasks.","lastModifiedDate":"2023-09-04"},{"lineNumber":285,"author":{"gitId":"WinSheng1"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":286,"author":{"gitId":"WinSheng1"},"content":" * @param userInput The user\u0027s input.","lastModifiedDate":"2023-09-04"},{"lineNumber":287,"author":{"gitId":"WinSheng1"},"content":" * @param taskList The list of tasks.","lastModifiedDate":"2023-09-04"},{"lineNumber":288,"author":{"gitId":"WinSheng1"},"content":" * @param ui The Ui for displaying messages.","lastModifiedDate":"2023-09-04"},{"lineNumber":289,"author":{"gitId":"WinSheng1"},"content":" * @throws MissingInputException If the user input is missing required information.","lastModifiedDate":"2023-09-04"},{"lineNumber":290,"author":{"gitId":"WinSheng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":291,"author":{"gitId":"WinSheng1"},"content":" private void findByKeyword (String userInput, TaskList taskList, Ui ui) throws MissingInputException {","lastModifiedDate":"2023-09-04"},{"lineNumber":292,"author":{"gitId":"WinSheng1"},"content":" String[] individualWords \u003d userInput.split(\" \");","lastModifiedDate":"2023-09-04"},{"lineNumber":293,"author":{"gitId":"WinSheng1"},"content":" if (individualWords.length \u003c\u003d 1) {","lastModifiedDate":"2023-09-04"},{"lineNumber":294,"author":{"gitId":"WinSheng1"},"content":" throw new MissingInputException(\"Keyword cannot be empty.\");","lastModifiedDate":"2023-09-04"},{"lineNumber":295,"author":{"gitId":"WinSheng1"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":296,"author":{"gitId":"WinSheng1"},"content":" String keyword \u003d individualWords[1];","lastModifiedDate":"2023-09-04"},{"lineNumber":297,"author":{"gitId":"WinSheng1"},"content":" ArrayList\u003cTask\u003e matchingTasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-04"},{"lineNumber":298,"author":{"gitId":"WinSheng1"},"content":" ArrayList\u003cTask\u003e tasks \u003d taskList.getAllTasks();","lastModifiedDate":"2023-09-04"},{"lineNumber":299,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":300,"author":{"gitId":"WinSheng1"},"content":" for (Task task: tasks) {","lastModifiedDate":"2023-09-04"},{"lineNumber":301,"author":{"gitId":"WinSheng1"},"content":" if (task.containsKeyword(keyword)) {","lastModifiedDate":"2023-09-04"},{"lineNumber":302,"author":{"gitId":"WinSheng1"},"content":" matchingTasks.add(task);","lastModifiedDate":"2023-09-04"},{"lineNumber":303,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":304,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":305,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":306,"author":{"gitId":"WinSheng1"},"content":" if (matchingTasks.isEmpty()) {","lastModifiedDate":"2023-09-04"},{"lineNumber":307,"author":{"gitId":"WinSheng1"},"content":" ui.showMessage(\"No matching tasks found.\");","lastModifiedDate":"2023-09-04"},{"lineNumber":308,"author":{"gitId":"WinSheng1"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":309,"author":{"gitId":"WinSheng1"},"content":" System.out.println(\"Here are the matching tasks in your list:\");","lastModifiedDate":"2023-09-04"},{"lineNumber":310,"author":{"gitId":"WinSheng1"},"content":" for (int i \u003d 0; i \u003c matchingTasks.size(); i++) {","lastModifiedDate":"2023-09-04"},{"lineNumber":311,"author":{"gitId":"WinSheng1"},"content":" Task task \u003d matchingTasks.get(i);","lastModifiedDate":"2023-09-04"},{"lineNumber":312,"author":{"gitId":"WinSheng1"},"content":" System.out.println((i + 1) + \".\" + task.toString());","lastModifiedDate":"2023-09-04"},{"lineNumber":313,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":314,"author":{"gitId":"WinSheng1"},"content":" ui.printLine();","lastModifiedDate":"2023-09-04"},{"lineNumber":315,"author":{"gitId":"WinSheng1"},"content":" matchingTasks.clear();","lastModifiedDate":"2023-09-04"},{"lineNumber":316,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":317,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":318,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":319,"author":{"gitId":"WinSheng1"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"WinSheng1":319}},{"path":"src/main/java/duke/util/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WinSheng1"},"content":"package duke.util;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"WinSheng1"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"WinSheng1"},"content":"import duke.task.ToDo;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"WinSheng1"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"WinSheng1"},"content":"import duke.task.Event;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"WinSheng1"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"WinSheng1"},"content":"import java.io.File;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"WinSheng1"},"content":"import java.io.FileReader;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"WinSheng1"},"content":"import java.io.BufferedReader;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"WinSheng1"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"WinSheng1"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"WinSheng1"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"WinSheng1"},"content":" * The Storage class handles loading and saving of tasks to a file specified by a file path.","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"WinSheng1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"WinSheng1"},"content":" * @author Win Sheng","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"WinSheng1"},"content":" * @since 3 September 2023","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"WinSheng1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"WinSheng1"},"content":"public class Storage {","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"WinSheng1"},"content":" private String filePath;","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"WinSheng1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"WinSheng1"},"content":" * Constructs a new Storage with the specified file path.","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"WinSheng1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"WinSheng1"},"content":" * @param filePath The file path that stores the task data in text format.","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"WinSheng1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"WinSheng1"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"WinSheng1"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"WinSheng1"},"content":" public ArrayList\u003cTask\u003e load() throws IOException {","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"WinSheng1"},"content":" ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"WinSheng1"},"content":" File file \u003d new File(filePath);","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"WinSheng1"},"content":" if (!file.exists()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"WinSheng1"},"content":" file.createNewFile();","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"WinSheng1"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"WinSheng1"},"content":" FileReader reader \u003d new FileReader(filePath);","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"WinSheng1"},"content":" BufferedReader bufferedReader \u003d new BufferedReader(reader);","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"WinSheng1"},"content":" String fileLine;","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"WinSheng1"},"content":" while ((fileLine \u003d bufferedReader.readLine()) !\u003d null) {","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"WinSheng1"},"content":" Task task \u003d createTaskFromFile(fileLine);","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"WinSheng1"},"content":" tasks.add(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"WinSheng1"},"content":" bufferedReader.close();","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"WinSheng1"},"content":" return tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"WinSheng1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"WinSheng1"},"content":" * Saves the list of tasks to the file specified by the file path.","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"WinSheng1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"WinSheng1"},"content":" * @param tasks The list of tasks to be saved.","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"WinSheng1"},"content":" * @throws IOException If there are issues saving the tasks to the file.","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"WinSheng1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"WinSheng1"},"content":" public void save(ArrayList\u003cTask\u003e tasks) throws IOException {","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"WinSheng1"},"content":" FileWriter writer \u003d new FileWriter(filePath);","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"WinSheng1"},"content":" for (Task task: tasks) {","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"WinSheng1"},"content":" String taskFileString \u003d task.toFileString();","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"WinSheng1"},"content":" writer.write(taskFileString + \"\\n\");","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"WinSheng1"},"content":" writer.close();","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"WinSheng1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"WinSheng1"},"content":" * Creates a Task based on the line of text from the file.","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"WinSheng1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"WinSheng1"},"content":" * @param fileLine A line of text from the file that represents a task.","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"WinSheng1"},"content":" * @return The task created from the file line.","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"WinSheng1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":78,"author":{"gitId":"WinSheng1"},"content":" private static Task createTaskFromFile(String fileLine) {","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"WinSheng1"},"content":" String[] parts \u003d fileLine.split(\"\\\\|\");","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"WinSheng1"},"content":" for (int i \u003d 0; i \u003c parts.length; i++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"WinSheng1"},"content":" parts[i] \u003d parts[i].trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"WinSheng1"},"content":" String type \u003d parts[0];","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"WinSheng1"},"content":" String description \u003d parts[2];","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"WinSheng1"},"content":" Task task;","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"WinSheng1"},"content":" if (type.equals(\"[T]\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":89,"author":{"gitId":"WinSheng1"},"content":" task \u003d new ToDo(description);","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"WinSheng1"},"content":" } else if (type.equals(\"[D]\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"WinSheng1"},"content":" String by \u003d parts[3];","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"WinSheng1"},"content":" task \u003d new Deadline(description, by);","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"WinSheng1"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"WinSheng1"},"content":" String from \u003d parts[3];","lastModifiedDate":"2023-09-02"},{"lineNumber":95,"author":{"gitId":"WinSheng1"},"content":" String to \u003d parts[4];","lastModifiedDate":"2023-09-02"},{"lineNumber":96,"author":{"gitId":"WinSheng1"},"content":" task \u003d new Event(description, from, to);","lastModifiedDate":"2023-09-02"},{"lineNumber":97,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":98,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":99,"author":{"gitId":"WinSheng1"},"content":" task.isDone \u003d parts[1].equals(\"1\");","lastModifiedDate":"2023-09-02"},{"lineNumber":100,"author":{"gitId":"WinSheng1"},"content":" return task;","lastModifiedDate":"2023-09-02"},{"lineNumber":101,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"WinSheng1"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"WinSheng1":102}},{"path":"src/main/java/duke/util/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WinSheng1"},"content":"package duke.util;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"WinSheng1"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"WinSheng1"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"WinSheng1"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"WinSheng1"},"content":" * The TaskList class represents a list of tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"WinSheng1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"WinSheng1"},"content":" * @author Win Sheng","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"WinSheng1"},"content":" * @since 3 September 2023","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"WinSheng1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"WinSheng1"},"content":"public class TaskList {","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"WinSheng1"},"content":" private ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"WinSheng1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"WinSheng1"},"content":" * Constructs a TaskList with a list of tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"WinSheng1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"WinSheng1"},"content":" * @param tasks An ArrayList of tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"WinSheng1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"WinSheng1"},"content":" public TaskList(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"WinSheng1"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"WinSheng1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"WinSheng1"},"content":" * Returns the number of tasks in the task list.","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"WinSheng1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"WinSheng1"},"content":" * @return The number of tasks in the task list.","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"WinSheng1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"WinSheng1"},"content":" public int getSize() {","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"WinSheng1"},"content":" return tasks.size();","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"WinSheng1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"WinSheng1"},"content":" * Gets the task from the task list at a specified index.","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"WinSheng1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"WinSheng1"},"content":" * @param index The index of the task to retrieve.","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"WinSheng1"},"content":" * @return The task at the specified index.","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"WinSheng1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"WinSheng1"},"content":" public Task getTask(int index) {","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"WinSheng1"},"content":" return tasks.get(index);","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"WinSheng1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"WinSheng1"},"content":" * Adds a task to the task list.","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"WinSheng1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"WinSheng1"},"content":" * @param task The task to be added to the task list.","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"WinSheng1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"WinSheng1"},"content":" public void addTask(Task task) {","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"WinSheng1"},"content":" tasks.add(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"WinSheng1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"WinSheng1"},"content":" * Deletes a task to the task list at a specified index.","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"WinSheng1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"WinSheng1"},"content":" * @param index The task to be deleted from the task list at a specified index.","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"WinSheng1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"WinSheng1"},"content":" public void deleteTask(int index) {","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"WinSheng1"},"content":" tasks.remove(index);","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"WinSheng1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"WinSheng1"},"content":" * Checks if the task list has any tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"WinSheng1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"WinSheng1"},"content":" * @return true if the task list has no tasks, false otherwise.","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"WinSheng1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"WinSheng1"},"content":" public boolean isEmpty() {","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"WinSheng1"},"content":" return tasks.isEmpty();","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"WinSheng1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"WinSheng1"},"content":" * Gets a copy of all tasks in the task list.","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"WinSheng1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"WinSheng1"},"content":" * @return The list of all tasks in the task list.","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"WinSheng1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"WinSheng1"},"content":" public ArrayList\u003cTask\u003e getAllTasks() {","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"WinSheng1"},"content":" return new ArrayList\u003c\u003e(tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"WinSheng1"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"WinSheng1":79}},{"path":"src/main/java/duke/util/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WinSheng1"},"content":"package duke.util;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"WinSheng1"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"WinSheng1"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"WinSheng1"},"content":" * The Ui class handles the displaying of messages to the user.","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"WinSheng1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"WinSheng1"},"content":" * @author Win Sheng","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"WinSheng1"},"content":" * @since 3 September 2023","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"WinSheng1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"WinSheng1"},"content":"public class Ui {","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"WinSheng1"},"content":" private Scanner scanner;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"WinSheng1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"WinSheng1"},"content":" * Constructs a Ui and initializes the scanner for user input.","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"WinSheng1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"WinSheng1"},"content":" public Ui() {","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"WinSheng1"},"content":" this.scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"WinSheng1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"WinSheng1"},"content":" * Displays a welcome message.","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"WinSheng1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"WinSheng1"},"content":" public void showWelcome() {","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"WinSheng1"},"content":" System.out.println(\"Hi! I\u0027m TaskMate.\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"WinSheng1"},"content":" + \"What can I do for you today?\");","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"WinSheng1"},"content":" printLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"WinSheng1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"WinSheng1"},"content":" * Displays a goodbye message and closes the scanner.","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"WinSheng1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"WinSheng1"},"content":" public void showGoodbye() {","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"WinSheng1"},"content":" System.out.println(\"Goodbye! See you next time!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"WinSheng1"},"content":" printLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"WinSheng1"},"content":" scanner.close();","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"WinSheng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"WinSheng1"},"content":" * Displays a message and then prints a line.","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"WinSheng1"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"WinSheng1"},"content":" * @param message The message to be displayed.","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"WinSheng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"WinSheng1"},"content":" public void showMessage(String message) {","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"WinSheng1"},"content":" System.out.println(message);","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"WinSheng1"},"content":" printLine();","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"WinSheng1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"WinSheng1"},"content":" * Retrieves user input from the console.","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"WinSheng1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"WinSheng1"},"content":" * @return The user\u0027s input.","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"WinSheng1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"WinSheng1"},"content":" public String getUserInput() {","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"WinSheng1"},"content":" System.out.println(\"Enter command: \");","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"WinSheng1"},"content":" return this.scanner.nextLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"WinSheng1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"WinSheng1"},"content":" * Prints a horizontal line to separate printed messages.","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"WinSheng1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"WinSheng1"},"content":" public void printLine() {","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"WinSheng1"},"content":" System.out.println(\"___________________________________________________________________\");","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"WinSheng1"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"WinSheng1":65}},{"path":"src/test/java/duke/task/DeadlineTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WinSheng1"},"content":"package duke.task;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"WinSheng1"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"WinSheng1"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"WinSheng1"},"content":"public class DeadlineTest {","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"WinSheng1"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"WinSheng1"},"content":" void testString() {","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"WinSheng1"},"content":" Deadline task \u003d new Deadline(\"test\", \"2024-12-01 1532\");","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"WinSheng1"},"content":" assertEquals(task.toString(), \"[D][ ] test (by: Dec 1 2024 3:32PM)\");","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"WinSheng1"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"WinSheng1"},"content":" void testInvalidDeadline() {","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"WinSheng1"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"WinSheng1"},"content":" new Deadline(\"test\", \"1234\");","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"WinSheng1"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"WinSheng1"},"content":" assertEquals(\"Please use the following formats:\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"WinSheng1"},"content":" + \"deadline task /by yyyy-mm-dd hhmm\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"WinSheng1"},"content":" + \"deadline task /by dd/mm/yyyy hhmm\", e.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"WinSheng1"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"WinSheng1":23}},{"path":"src/test/java/duke/task/EventTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WinSheng1"},"content":"package duke.task;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"WinSheng1"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"WinSheng1"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"WinSheng1"},"content":"public class EventTest {","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"WinSheng1"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"WinSheng1"},"content":" void testString() {","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"WinSheng1"},"content":" Event task \u003d new Event(\"test\", \"2024-12-01 1532\", \"2024-12-03 1600\");","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"WinSheng1"},"content":" assertEquals(task.toString(), \"[E][ ] test (from: Dec 1 2024 3:32PM to Dec 3 2024 4:00PM)\");","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"WinSheng1"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"WinSheng1"},"content":" void testInvalidDeadline() {","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"WinSheng1"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"WinSheng1"},"content":" new Event(\"test\", \"1234\", \"1234\");","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"WinSheng1"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"WinSheng1"},"content":" assertEquals(\"Please use the following formats:\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"WinSheng1"},"content":" + \"event task /from yyyy-mm-dd hhmm /to yyyy-mm-dd hhmm\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"WinSheng1"},"content":" + \"deadline task /from dd/mm/yyyy hhmm /to dd/mm/yyyy hhmm\", e.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"WinSheng1"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"WinSheng1":23}},{"path":"src/test/java/duke/task/TaskTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WinSheng1"},"content":"package duke.task;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"WinSheng1"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"WinSheng1"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"WinSheng1"},"content":"public class TaskTest {","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"WinSheng1"},"content":" ToDo task \u003d new ToDo(\"test\");","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"WinSheng1"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"WinSheng1"},"content":" void testStatusIcon() {","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"WinSheng1"},"content":" assertEquals(task.getStatusIcon(), \" \");","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"WinSheng1"},"content":" task.updateTaskStatus(true, \"\", \"\");","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"WinSheng1"},"content":" assertEquals(task.getStatusIcon(), \"X\");","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"WinSheng1"},"content":" task.updateTaskStatus(false, \"\", \"\");","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"WinSheng1"},"content":" assertEquals(task.getStatusIcon(), \" \");","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"WinSheng1"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"WinSheng1":16}},{"path":"src/test/java/duke/task/ToDoTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WinSheng1"},"content":"package duke.task;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"WinSheng1"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"WinSheng1"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"WinSheng1"},"content":"public class ToDoTest {","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"WinSheng1"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"WinSheng1"},"content":" void testDescription() {","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"WinSheng1"},"content":" ToDo task \u003d new ToDo(\"test1\");","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"WinSheng1"},"content":" assertEquals(task.getDescription(), \"test1\");","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"WinSheng1"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"WinSheng1"},"content":" void testString() {","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"WinSheng1"},"content":" ToDo task \u003d new ToDo(\"test2\");","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"WinSheng1"},"content":" assertEquals(task.toString(), \"[T][ ] test2\");","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"WinSheng1"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"WinSheng1":18}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"WinSheng1"},"content":"todo borrow book","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"WinSheng1"},"content":"list","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"WinSheng1"},"content":"deadline return book /by Sunday","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"WinSheng1"},"content":"event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"WinSheng1":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":"WinSheng1"},"content":"java -classpath ..\\bin duke.Duke \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-09-04"},{"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":{"WinSheng1":1,"-":20}}] +[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"WinSheng1"},"content":"# duke.Duke project template","lastModifiedDate":"2023-09-04"},{"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":"WinSheng1"},"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-04"},{"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":{"WinSheng1":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":"-"},"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":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"WinSheng1"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"WinSheng1"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"WinSheng1"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"WinSheng1"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"WinSheng1"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-10"},{"lineNumber":21,"author":{"gitId":"WinSheng1"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"WinSheng1"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"WinSheng1"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"WinSheng1"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"WinSheng1"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"WinSheng1"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-10"},{"lineNumber":27,"author":{"gitId":"WinSheng1"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"WinSheng1"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-10"},{"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":"WinSheng1"},"content":" mainClass.set(\"duke.Duke\")","lastModifiedDate":"2023-09-04"},{"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":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":52,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":53,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":54,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":55,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":56,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":57,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"WinSheng1":16,"-":41}},{"path":"src/main/java/duke/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WinSheng1"},"content":"package duke;","lastModifiedDate":"2023-09-10"},{"lineNumber":2,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"WinSheng1"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"WinSheng1"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"WinSheng1"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"WinSheng1"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"WinSheng1"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"WinSheng1"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"WinSheng1"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"WinSheng1"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"WinSheng1"},"content":" private Label text;","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"WinSheng1"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"WinSheng1"},"content":" public DialogBox(Label l, ImageView iv) {","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"WinSheng1"},"content":" text \u003d l;","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"WinSheng1"},"content":" displayPicture \u003d iv;","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"WinSheng1"},"content":" text.setWrapText(true);","lastModifiedDate":"2023-09-10"},{"lineNumber":21,"author":{"gitId":"WinSheng1"},"content":" displayPicture.setFitWidth(100.0);","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"WinSheng1"},"content":" displayPicture.setFitHeight(100.0);","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"WinSheng1"},"content":" this.setAlignment(Pos.TOP_RIGHT);","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"WinSheng1"},"content":" this.getChildren().addAll(text, displayPicture);","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":27,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"WinSheng1"},"content":" private void flip() {","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"WinSheng1"},"content":" this.setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-10"},{"lineNumber":30,"author":{"gitId":"WinSheng1"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"WinSheng1"},"content":" FXCollections.reverse(tmp);","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"WinSheng1"},"content":" this.getChildren().setAll(tmp);","lastModifiedDate":"2023-09-10"},{"lineNumber":33,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":34,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":35,"author":{"gitId":"WinSheng1"},"content":" public static DialogBox getUserDialog(Label l, ImageView iv) {","lastModifiedDate":"2023-09-10"},{"lineNumber":36,"author":{"gitId":"WinSheng1"},"content":" return new DialogBox(l, iv);","lastModifiedDate":"2023-09-10"},{"lineNumber":37,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":38,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":39,"author":{"gitId":"WinSheng1"},"content":" public static DialogBox getDukeDialog(Label l, ImageView iv) {","lastModifiedDate":"2023-09-10"},{"lineNumber":40,"author":{"gitId":"WinSheng1"},"content":" var db \u003d new DialogBox(l, iv);","lastModifiedDate":"2023-09-10"},{"lineNumber":41,"author":{"gitId":"WinSheng1"},"content":" db.flip();","lastModifiedDate":"2023-09-10"},{"lineNumber":42,"author":{"gitId":"WinSheng1"},"content":" return db;","lastModifiedDate":"2023-09-10"},{"lineNumber":43,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":44,"author":{"gitId":"WinSheng1"},"content":"}","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"WinSheng1":44}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WinSheng1"},"content":"package duke;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"WinSheng1"},"content":"import duke.util.Parser;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"WinSheng1"},"content":"import duke.util.Storage;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"WinSheng1"},"content":"import duke.util.TaskList;","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"WinSheng1"},"content":"import duke.util.Ui;","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"WinSheng1"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":10,"author":{"gitId":"WinSheng1"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"WinSheng1"},"content":" * The Duke class represents the TaskMate bot that allows users to","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"WinSheng1"},"content":" * manage tasks by adding, deleting, marking and un-marking tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"WinSheng1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"WinSheng1"},"content":" * @author Win Sheng","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"WinSheng1"},"content":" * @since 3 September 2023","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"WinSheng1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":18,"author":{"gitId":"WinSheng1"},"content":" private static Storage storage;","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"WinSheng1"},"content":" private static TaskList taskList;","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"WinSheng1"},"content":" private static Parser parser;","lastModifiedDate":"2023-09-10"},{"lineNumber":21,"author":{"gitId":"WinSheng1"},"content":" private static Ui ui;","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"WinSheng1"},"content":" public static boolean isDone \u003d false;","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"WinSheng1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"WinSheng1"},"content":" * Constructs a new instance of the task bot with the specified file path.","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"WinSheng1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"WinSheng1"},"content":" public Duke() {","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"WinSheng1"},"content":" storage \u003d new Storage(\"./data/duke.txt\");","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"WinSheng1"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"WinSheng1"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"WinSheng1"},"content":" taskList \u003d new TaskList(storage.load());","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"WinSheng1"},"content":" parser \u003d new Parser(taskList, ui, storage);","lastModifiedDate":"2023-09-10"},{"lineNumber":33,"author":{"gitId":"WinSheng1"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"WinSheng1"},"content":" System.err.println(e);","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"WinSheng1"},"content":" public Ui getUi() {","lastModifiedDate":"2023-09-10"},{"lineNumber":39,"author":{"gitId":"WinSheng1"},"content":" return ui;","lastModifiedDate":"2023-09-10"},{"lineNumber":40,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":42,"author":{"gitId":"WinSheng1"},"content":" public static String getResponse(String userInput) {","lastModifiedDate":"2023-09-10"},{"lineNumber":43,"author":{"gitId":"WinSheng1"},"content":" return parser.parseUserInput(userInput);","lastModifiedDate":"2023-09-10"},{"lineNumber":44,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"WinSheng1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"WinSheng1"},"content":" * The main entry point for the task bot.","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"WinSheng1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"WinSheng1"},"content":" * @param args Not used.","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"WinSheng1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"WinSheng1"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"WinSheng1"},"content":" new Duke();","lastModifiedDate":"2023-09-10"},{"lineNumber":53,"author":{"gitId":"WinSheng1"},"content":" while (!isDone) {","lastModifiedDate":"2023-09-10"},{"lineNumber":54,"author":{"gitId":"WinSheng1"},"content":" System.out.println(getResponse(ui.getUserInput()));","lastModifiedDate":"2023-09-10"},{"lineNumber":55,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":56,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"WinSheng1":55,"-":2}},{"path":"src/main/java/duke/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WinSheng1"},"content":"package duke;","lastModifiedDate":"2023-09-10"},{"lineNumber":2,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"WinSheng1"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"WinSheng1"},"content":"public class Launcher {","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"WinSheng1"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"WinSheng1"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"WinSheng1"},"content":"}","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"WinSheng1":9}},{"path":"src/main/java/duke/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WinSheng1"},"content":"package duke;","lastModifiedDate":"2023-09-10"},{"lineNumber":2,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"WinSheng1"},"content":"import duke.util.Ui;","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"WinSheng1"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"WinSheng1"},"content":"import javafx.application.Platform;","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"WinSheng1"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"WinSheng1"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"WinSheng1"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"WinSheng1"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"WinSheng1"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"WinSheng1"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"WinSheng1"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"WinSheng1"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"WinSheng1"},"content":"import javafx.scene.layout.Region;","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"WinSheng1"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"WinSheng1"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"WinSheng1"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"WinSheng1"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-10"},{"lineNumber":21,"author":{"gitId":"WinSheng1"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"WinSheng1"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"WinSheng1"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"WinSheng1"},"content":" private Scene scene;","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"WinSheng1"},"content":" private Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaUser.png\"));","lastModifiedDate":"2023-09-10"},{"lineNumber":27,"author":{"gitId":"WinSheng1"},"content":" private Image dukeImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaDuke.png\"));","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"WinSheng1"},"content":" private Duke duke \u003d new Duke();","lastModifiedDate":"2023-09-10"},{"lineNumber":30,"author":{"gitId":"WinSheng1"},"content":" Ui ui \u003d duke.getUi();","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"WinSheng1"},"content":" @Override","lastModifiedDate":"2023-09-10"},{"lineNumber":33,"author":{"gitId":"WinSheng1"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-10"},{"lineNumber":34,"author":{"gitId":"WinSheng1"},"content":" //Step 1. Setting up required components","lastModifiedDate":"2023-09-10"},{"lineNumber":35,"author":{"gitId":"WinSheng1"},"content":" //The container for the content of the chat to scroll.","lastModifiedDate":"2023-09-10"},{"lineNumber":36,"author":{"gitId":"WinSheng1"},"content":" scrollPane \u003d new ScrollPane();","lastModifiedDate":"2023-09-10"},{"lineNumber":37,"author":{"gitId":"WinSheng1"},"content":" dialogContainer \u003d new VBox();","lastModifiedDate":"2023-09-10"},{"lineNumber":38,"author":{"gitId":"WinSheng1"},"content":" scrollPane.setContent(dialogContainer);","lastModifiedDate":"2023-09-10"},{"lineNumber":39,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":40,"author":{"gitId":"WinSheng1"},"content":" userInput \u003d new TextField();","lastModifiedDate":"2023-09-10"},{"lineNumber":41,"author":{"gitId":"WinSheng1"},"content":" sendButton \u003d new Button(\"Send\");","lastModifiedDate":"2023-09-10"},{"lineNumber":42,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":43,"author":{"gitId":"WinSheng1"},"content":" AnchorPane mainLayout \u003d new AnchorPane();","lastModifiedDate":"2023-09-10"},{"lineNumber":44,"author":{"gitId":"WinSheng1"},"content":" mainLayout.getChildren().addAll(scrollPane, userInput, sendButton);","lastModifiedDate":"2023-09-10"},{"lineNumber":45,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":46,"author":{"gitId":"WinSheng1"},"content":" scene \u003d new Scene(mainLayout);","lastModifiedDate":"2023-09-10"},{"lineNumber":47,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":48,"author":{"gitId":"WinSheng1"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-10"},{"lineNumber":49,"author":{"gitId":"WinSheng1"},"content":" stage.show();","lastModifiedDate":"2023-09-10"},{"lineNumber":50,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":51,"author":{"gitId":"WinSheng1"},"content":" //Step 2. Formatting the window to look as expected","lastModifiedDate":"2023-09-10"},{"lineNumber":52,"author":{"gitId":"WinSheng1"},"content":" stage.setTitle(\"Duke\");","lastModifiedDate":"2023-09-10"},{"lineNumber":53,"author":{"gitId":"WinSheng1"},"content":" stage.setResizable(false);","lastModifiedDate":"2023-09-10"},{"lineNumber":54,"author":{"gitId":"WinSheng1"},"content":" stage.setMinHeight(600.0);","lastModifiedDate":"2023-09-10"},{"lineNumber":55,"author":{"gitId":"WinSheng1"},"content":" stage.setMinWidth(600.0);","lastModifiedDate":"2023-09-10"},{"lineNumber":56,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":57,"author":{"gitId":"WinSheng1"},"content":" mainLayout.setPrefSize(600.0, 600.0);","lastModifiedDate":"2023-09-10"},{"lineNumber":58,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":59,"author":{"gitId":"WinSheng1"},"content":" scrollPane.setPrefSize(585, 535);","lastModifiedDate":"2023-09-10"},{"lineNumber":60,"author":{"gitId":"WinSheng1"},"content":" scrollPane.setHbarPolicy(ScrollPane.ScrollBarPolicy.NEVER);","lastModifiedDate":"2023-09-10"},{"lineNumber":61,"author":{"gitId":"WinSheng1"},"content":" scrollPane.setVbarPolicy(ScrollPane.ScrollBarPolicy.ALWAYS);","lastModifiedDate":"2023-09-10"},{"lineNumber":62,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":63,"author":{"gitId":"WinSheng1"},"content":" scrollPane.setVvalue(1.0);","lastModifiedDate":"2023-09-10"},{"lineNumber":64,"author":{"gitId":"WinSheng1"},"content":" scrollPane.setFitToWidth(true);","lastModifiedDate":"2023-09-10"},{"lineNumber":65,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":66,"author":{"gitId":"WinSheng1"},"content":" // You will need to import `javafx.scene.layout.Region` for this.","lastModifiedDate":"2023-09-10"},{"lineNumber":67,"author":{"gitId":"WinSheng1"},"content":" dialogContainer.setPrefHeight(Region.USE_COMPUTED_SIZE);","lastModifiedDate":"2023-09-10"},{"lineNumber":68,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":69,"author":{"gitId":"WinSheng1"},"content":" userInput.setPrefWidth(525.0);","lastModifiedDate":"2023-09-10"},{"lineNumber":70,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":71,"author":{"gitId":"WinSheng1"},"content":" sendButton.setPrefWidth(55.0);","lastModifiedDate":"2023-09-10"},{"lineNumber":72,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":73,"author":{"gitId":"WinSheng1"},"content":" AnchorPane.setTopAnchor(scrollPane, 1.0);","lastModifiedDate":"2023-09-10"},{"lineNumber":74,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":75,"author":{"gitId":"WinSheng1"},"content":" AnchorPane.setBottomAnchor(sendButton, 1.0);","lastModifiedDate":"2023-09-10"},{"lineNumber":76,"author":{"gitId":"WinSheng1"},"content":" AnchorPane.setRightAnchor(sendButton, 1.0);","lastModifiedDate":"2023-09-10"},{"lineNumber":77,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":78,"author":{"gitId":"WinSheng1"},"content":" AnchorPane.setLeftAnchor(userInput , 1.0);","lastModifiedDate":"2023-09-10"},{"lineNumber":79,"author":{"gitId":"WinSheng1"},"content":" AnchorPane.setBottomAnchor(userInput, 1.0);","lastModifiedDate":"2023-09-10"},{"lineNumber":80,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":81,"author":{"gitId":"WinSheng1"},"content":" //Step 3. Add functionality to handle user input.","lastModifiedDate":"2023-09-10"},{"lineNumber":82,"author":{"gitId":"WinSheng1"},"content":" sendButton.setOnMouseClicked((event) -\u003e {","lastModifiedDate":"2023-09-10"},{"lineNumber":83,"author":{"gitId":"WinSheng1"},"content":" handleUserInput();","lastModifiedDate":"2023-09-10"},{"lineNumber":84,"author":{"gitId":"WinSheng1"},"content":" });","lastModifiedDate":"2023-09-10"},{"lineNumber":85,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":86,"author":{"gitId":"WinSheng1"},"content":" userInput.setOnAction((event) -\u003e {","lastModifiedDate":"2023-09-10"},{"lineNumber":87,"author":{"gitId":"WinSheng1"},"content":" handleUserInput();","lastModifiedDate":"2023-09-10"},{"lineNumber":88,"author":{"gitId":"WinSheng1"},"content":" });","lastModifiedDate":"2023-09-10"},{"lineNumber":89,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":90,"author":{"gitId":"WinSheng1"},"content":" dialogContainer.heightProperty().addListener((observable) -\u003e scrollPane.setVvalue(1.0));","lastModifiedDate":"2023-09-10"},{"lineNumber":91,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":92,"author":{"gitId":"WinSheng1"},"content":" //To print welcome message on startup of GUI","lastModifiedDate":"2023-09-10"},{"lineNumber":93,"author":{"gitId":"WinSheng1"},"content":" Label dukeText \u003d new Label(ui.welcomeMessage());","lastModifiedDate":"2023-09-10"},{"lineNumber":94,"author":{"gitId":"WinSheng1"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-10"},{"lineNumber":95,"author":{"gitId":"WinSheng1"},"content":" DialogBox.getDukeDialog(dukeText, new ImageView(dukeImage))","lastModifiedDate":"2023-09-10"},{"lineNumber":96,"author":{"gitId":"WinSheng1"},"content":" );","lastModifiedDate":"2023-09-10"},{"lineNumber":97,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":98,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":99,"author":{"gitId":"WinSheng1"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-10"},{"lineNumber":100,"author":{"gitId":"WinSheng1"},"content":" //Close the application","lastModifiedDate":"2023-09-10"},{"lineNumber":101,"author":{"gitId":"WinSheng1"},"content":" if (userInput.getText().equalsIgnoreCase(\"bye\")) {","lastModifiedDate":"2023-09-10"},{"lineNumber":102,"author":{"gitId":"WinSheng1"},"content":" Platform.exit();","lastModifiedDate":"2023-09-10"},{"lineNumber":103,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":104,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":105,"author":{"gitId":"WinSheng1"},"content":" Label userText \u003d new Label(userInput.getText());","lastModifiedDate":"2023-09-10"},{"lineNumber":106,"author":{"gitId":"WinSheng1"},"content":" Label dukeText \u003d new Label(duke.getResponse(userInput.getText()));","lastModifiedDate":"2023-09-10"},{"lineNumber":107,"author":{"gitId":"WinSheng1"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-10"},{"lineNumber":108,"author":{"gitId":"WinSheng1"},"content":" DialogBox.getUserDialog(userText, new ImageView(userImage)),","lastModifiedDate":"2023-09-10"},{"lineNumber":109,"author":{"gitId":"WinSheng1"},"content":" DialogBox.getDukeDialog(dukeText, new ImageView(dukeImage))","lastModifiedDate":"2023-09-10"},{"lineNumber":110,"author":{"gitId":"WinSheng1"},"content":" );","lastModifiedDate":"2023-09-10"},{"lineNumber":111,"author":{"gitId":"WinSheng1"},"content":" userInput.clear();","lastModifiedDate":"2023-09-10"},{"lineNumber":112,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":113,"author":{"gitId":"WinSheng1"},"content":"}","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"WinSheng1":113}},{"path":"src/main/java/duke/exception/InvalidCommandException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WinSheng1"},"content":"package duke.exception;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"WinSheng1"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"WinSheng1"},"content":" * Represents an InvalidCommandException that is thrown when an invalid command is entered by the user.","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"WinSheng1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"WinSheng1"},"content":" * @author Win Sheng","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"WinSheng1"},"content":" * @since 3 September 2023","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"WinSheng1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"WinSheng1"},"content":"public class InvalidCommandException extends Exception {","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"WinSheng1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"WinSheng1"},"content":" * Constructs a new InvalidCommandException with a default error message and the list of available commands.","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"WinSheng1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"WinSheng1"},"content":" public InvalidCommandException() {","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"WinSheng1"},"content":" super(\"Invalid Command.\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"WinSheng1"},"content":" + \"Below are the list of available commands:\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"WinSheng1"},"content":" + \"list - displays the list of tasks\\n\"","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"WinSheng1"},"content":" + \"mark x - marks task x as done\\n\"","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"WinSheng1"},"content":" + \"unmark x - marks task x as undone\\n\"","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"WinSheng1"},"content":" + \"delete x - deletes task x\\n\"","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"WinSheng1"},"content":" + \"todo x - creates task with description x\\n\"","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"WinSheng1"},"content":" + \"deadline x /by y - creates task with description x by deadline y\\n\"","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"WinSheng1"},"content":" + \"event x /from y /to z - creates task with description x from y to z\");","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"WinSheng1"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"WinSheng1":25}},{"path":"src/main/java/duke/exception/MissingInputException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WinSheng1"},"content":"package duke.exception;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"WinSheng1"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"WinSheng1"},"content":" * Represents an MissingInputException that is thrown when the user enters a valid command with missing inputs.","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"WinSheng1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"WinSheng1"},"content":" * @author Win Sheng","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"WinSheng1"},"content":" * @since 3 September 2023","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"WinSheng1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"WinSheng1"},"content":"public class MissingInputException extends Exception {","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"WinSheng1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"WinSheng1"},"content":" * Constructs a new MissingInputException with an error message.","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"WinSheng1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"WinSheng1"},"content":" * @param message The error message describing the missing input.","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"WinSheng1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"WinSheng1"},"content":" public MissingInputException(String message) {","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"WinSheng1"},"content":" super(message);","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"WinSheng1"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"WinSheng1":19}},{"path":"src/main/java/duke/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WinSheng1"},"content":"package duke.task;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"WinSheng1"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"WinSheng1"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"WinSheng1"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"WinSheng1"},"content":"import java.time.format.DateTimeFormatterBuilder;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"WinSheng1"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"WinSheng1"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"WinSheng1"},"content":" * Represents a Deadline task with a specific deadline.","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"WinSheng1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"WinSheng1"},"content":" * @author Win Sheng","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"WinSheng1"},"content":" * @since 3 September 2023","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"WinSheng1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"WinSheng1"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-25"},{"lineNumber":16,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":17,"author":{"gitId":"WinSheng1"},"content":" public LocalDateTime dateTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":19,"author":{"gitId":"WinSheng1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"WinSheng1"},"content":" * Constructs a new Deadline task with the specified description and deadline.","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"WinSheng1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"WinSheng1"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"WinSheng1"},"content":" * @param by The deadline of the task.","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"WinSheng1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"WinSheng1"},"content":" public Deadline(String description, String by) {","lastModifiedDate":"2023-08-25"},{"lineNumber":26,"author":{"gitId":"WinSheng1"},"content":" super(description);","lastModifiedDate":"2023-08-25"},{"lineNumber":27,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"WinSheng1"},"content":" DateTimeFormatter formatter \u003d new DateTimeFormatterBuilder()","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"WinSheng1"},"content":" .parseCaseInsensitive()","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"WinSheng1"},"content":" .appendOptional(DateTimeFormatter.ofPattern(\"yyyy-M-d HHmm\"))","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"WinSheng1"},"content":" .appendOptional(DateTimeFormatter.ofPattern(\"d/M/yyyy HHmm\"))","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"WinSheng1"},"content":" .appendOptional(DateTimeFormatter.ofPattern(\"yyyy-M-d\"))","lastModifiedDate":"2023-09-10"},{"lineNumber":33,"author":{"gitId":"WinSheng1"},"content":" .appendOptional(DateTimeFormatter.ofPattern(\"d/M/yyyy\"))","lastModifiedDate":"2023-09-10"},{"lineNumber":34,"author":{"gitId":"WinSheng1"},"content":" .toFormatter();","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"WinSheng1"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"WinSheng1"},"content":" this.dateTime \u003d LocalDateTime.parse(by, formatter);","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"WinSheng1"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"WinSheng1"},"content":" try {","lastModifiedDate":"2023-09-10"},{"lineNumber":40,"author":{"gitId":"WinSheng1"},"content":" this.dateTime \u003d LocalDate.parse(by, formatter).atStartOfDay();","lastModifiedDate":"2023-09-10"},{"lineNumber":41,"author":{"gitId":"WinSheng1"},"content":" } catch (DateTimeParseException ex) {","lastModifiedDate":"2023-09-10"},{"lineNumber":42,"author":{"gitId":"WinSheng1"},"content":" this.dateTime \u003d null;","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":44,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":46,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":47,"author":{"gitId":"WinSheng1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"WinSheng1"},"content":" * Gets the type of the Deadline task.","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"WinSheng1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"WinSheng1"},"content":" * @return The type \"[D]\" for the Deadline task.","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"WinSheng1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"WinSheng1"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"WinSheng1"},"content":" public String type() {","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"WinSheng1"},"content":" return \"[D]\";","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"WinSheng1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"WinSheng1"},"content":" * Converts the Deadline task to a string format for storing in a file.","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"WinSheng1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"WinSheng1"},"content":" * @return A string representation of the Deadline task for file storage.","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"WinSheng1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"WinSheng1"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":63,"author":{"gitId":"WinSheng1"},"content":" public String toFileString() {","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"WinSheng1"},"content":" return type() + \" | \" + (isDone ? \"1\" : \"0\") + \" | \" + description + \" | \" + dateTime.format(DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\"));","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":66,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":67,"author":{"gitId":"WinSheng1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"WinSheng1"},"content":" * Returns a string representation of the Deadline task.","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"WinSheng1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"WinSheng1"},"content":" * @return A string representation of the Deadline task.","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"WinSheng1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"WinSheng1"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":73,"author":{"gitId":"WinSheng1"},"content":" public String toString() {","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"WinSheng1"},"content":" return type() + super.toString() + \" (by: \" + dateTime.format(DateTimeFormatter.ofPattern(\"MMM d yyyy h:mma\")) + \")\";","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":76,"author":{"gitId":"WinSheng1"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"WinSheng1":76}},{"path":"src/main/java/duke/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WinSheng1"},"content":"package duke.task;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"WinSheng1"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"WinSheng1"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"WinSheng1"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"WinSheng1"},"content":"import java.time.format.DateTimeFormatterBuilder;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"WinSheng1"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"WinSheng1"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"WinSheng1"},"content":" * Represents an Event task with a specific start and end date and time.","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"WinSheng1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"WinSheng1"},"content":" * @author Win Sheng","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"WinSheng1"},"content":" * @since 3 September 2023","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"WinSheng1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"WinSheng1"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-25"},{"lineNumber":16,"author":{"gitId":"WinSheng1"},"content":" public LocalDateTime fromDateTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"WinSheng1"},"content":" public LocalDateTime toDateTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":19,"author":{"gitId":"WinSheng1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"WinSheng1"},"content":" * Constructs a new Event task with the specified description, start and end date and time.","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"WinSheng1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"WinSheng1"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"WinSheng1"},"content":" * @param from The start date and time of the task.","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"WinSheng1"},"content":" * @param to The end date and time of the task.","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"WinSheng1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"WinSheng1"},"content":" public Event(String description, String from, String to) {","lastModifiedDate":"2023-08-25"},{"lineNumber":27,"author":{"gitId":"WinSheng1"},"content":" super(description);","lastModifiedDate":"2023-08-25"},{"lineNumber":28,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"WinSheng1"},"content":" DateTimeFormatter formatter \u003d new DateTimeFormatterBuilder()","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"WinSheng1"},"content":" .parseCaseInsensitive()","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"WinSheng1"},"content":" .appendOptional(DateTimeFormatter.ofPattern(\"yyyy-M-d HHmm\"))","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"WinSheng1"},"content":" .appendOptional(DateTimeFormatter.ofPattern(\"d/M/yyyy HHmm\"))","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"WinSheng1"},"content":" .appendOptional(DateTimeFormatter.ofPattern(\"yyyy-M-d\"))","lastModifiedDate":"2023-09-10"},{"lineNumber":34,"author":{"gitId":"WinSheng1"},"content":" .appendOptional(DateTimeFormatter.ofPattern(\"d/M/yyyy\"))","lastModifiedDate":"2023-09-10"},{"lineNumber":35,"author":{"gitId":"WinSheng1"},"content":" .toFormatter();","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"WinSheng1"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"WinSheng1"},"content":" //try parse date and time","lastModifiedDate":"2023-09-10"},{"lineNumber":39,"author":{"gitId":"WinSheng1"},"content":" this.fromDateTime \u003d LocalDateTime.parse(from, formatter);","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"WinSheng1"},"content":" this.toDateTime \u003d LocalDateTime.parse(to, formatter);","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"WinSheng1"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"WinSheng1"},"content":" try {","lastModifiedDate":"2023-09-10"},{"lineNumber":43,"author":{"gitId":"WinSheng1"},"content":" //try parse by just date","lastModifiedDate":"2023-09-10"},{"lineNumber":44,"author":{"gitId":"WinSheng1"},"content":" this.fromDateTime \u003d LocalDate.parse(from, formatter).atStartOfDay();","lastModifiedDate":"2023-09-10"},{"lineNumber":45,"author":{"gitId":"WinSheng1"},"content":" this.toDateTime \u003d LocalDate.parse(to, formatter).atStartOfDay();","lastModifiedDate":"2023-09-10"},{"lineNumber":46,"author":{"gitId":"WinSheng1"},"content":" } catch (DateTimeParseException ex) {","lastModifiedDate":"2023-09-10"},{"lineNumber":47,"author":{"gitId":"WinSheng1"},"content":" this.fromDateTime \u003d null;","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"WinSheng1"},"content":" this.toDateTime \u003d null;","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":50,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":52,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":53,"author":{"gitId":"WinSheng1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"WinSheng1"},"content":" * Gets the type of the Event task.","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"WinSheng1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"WinSheng1"},"content":" * @return The type \"[E]\" for the Event task.","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"WinSheng1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"WinSheng1"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":59,"author":{"gitId":"WinSheng1"},"content":" public String type() {","lastModifiedDate":"2023-08-28"},{"lineNumber":60,"author":{"gitId":"WinSheng1"},"content":" return \"[E]\";","lastModifiedDate":"2023-08-28"},{"lineNumber":61,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":62,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":63,"author":{"gitId":"WinSheng1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"WinSheng1"},"content":" * Converts the Event task to a string format for storing in a file.","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"WinSheng1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"WinSheng1"},"content":" * @return A string representation of the Event task for file storage.","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"WinSheng1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"WinSheng1"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":69,"author":{"gitId":"WinSheng1"},"content":" public String toFileString() {","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"WinSheng1"},"content":" return type() + \" | \" + (isDone ? \"1\" : \"0\") + \" | \" + description + \" | \" + fromDateTime.format(DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\")) + \" | \" + toDateTime.format(DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\"));","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":72,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":73,"author":{"gitId":"WinSheng1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"WinSheng1"},"content":" * Returns a string representation of the Event task.","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"WinSheng1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"WinSheng1"},"content":" * @return A string representation of the Event task.","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"WinSheng1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":78,"author":{"gitId":"WinSheng1"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":79,"author":{"gitId":"WinSheng1"},"content":" public String toString() {","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"WinSheng1"},"content":" return type() + super.toString() + \" (from: \" + fromDateTime.format(DateTimeFormatter.ofPattern(\"MMM d yyyy h:mma\")) + \" to \" + toDateTime.format(DateTimeFormatter.ofPattern(\"MMM d yyyy h:mma\")) + \")\";","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":82,"author":{"gitId":"WinSheng1"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"WinSheng1":82}},{"path":"src/main/java/duke/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WinSheng1"},"content":"package duke.task;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"WinSheng1"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"WinSheng1"},"content":" * The abstract base class representing a task.","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"WinSheng1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"WinSheng1"},"content":" * @author Win Sheng","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"WinSheng1"},"content":" * @since 3 September 2023","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"WinSheng1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"WinSheng1"},"content":"public abstract class Task {","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"WinSheng1"},"content":" public String description;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"WinSheng1"},"content":" public boolean isDone;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":13,"author":{"gitId":"WinSheng1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"WinSheng1"},"content":" * Constructs a new Task with the specified description.","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"WinSheng1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"WinSheng1"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"WinSheng1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"WinSheng1"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-25"},{"lineNumber":19,"author":{"gitId":"WinSheng1"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-25"},{"lineNumber":20,"author":{"gitId":"WinSheng1"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-25"},{"lineNumber":21,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":22,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":23,"author":{"gitId":"WinSheng1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"WinSheng1"},"content":" * Gets the type of the task.","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"WinSheng1"},"content":" * Subclasses must implement this method to specify the type of the task.","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"WinSheng1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"WinSheng1"},"content":" * @return The type of the task.","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"WinSheng1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"WinSheng1"},"content":" public abstract String type();","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"WinSheng1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"WinSheng1"},"content":" * Converts the task to a string format for storing in a file.","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"WinSheng1"},"content":" * Subclasses must implement this method to specify the string representation of the task when saving it to a file.","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"WinSheng1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"WinSheng1"},"content":" * @return A string representation of the task for file storage.","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"WinSheng1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"WinSheng1"},"content":" public abstract String toFileString();","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"WinSheng1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"WinSheng1"},"content":" * Gets a status icon representing the task\u0027s completion status.","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"WinSheng1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"WinSheng1"},"content":" * @return A status icon (\"X\" for done, \" \" for undone).","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"WinSheng1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"WinSheng1"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-25"},{"lineNumber":45,"author":{"gitId":"WinSheng1"},"content":" return (isDone ? \"X\" : \" \");","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":47,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":48,"author":{"gitId":"WinSheng1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"WinSheng1"},"content":" * Returns a string representation of the task.","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"WinSheng1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"WinSheng1"},"content":" * @return A string representation of the task.","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"WinSheng1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"WinSheng1"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":54,"author":{"gitId":"WinSheng1"},"content":" public String toString() {","lastModifiedDate":"2023-08-25"},{"lineNumber":55,"author":{"gitId":"WinSheng1"},"content":" return \"[\" + getStatusIcon() + \"] \" + description;","lastModifiedDate":"2023-08-25"},{"lineNumber":56,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":57,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"WinSheng1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"WinSheng1"},"content":" * Gets the description of the task.","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"WinSheng1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"WinSheng1"},"content":" * @return The description of the task.","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"WinSheng1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"WinSheng1"},"content":" public String getDescription() {","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"WinSheng1"},"content":" return this.description;","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"WinSheng1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"WinSheng1"},"content":" * Updates the task\u0027s completion status and displays a message based on the expected status.","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"WinSheng1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"WinSheng1"},"content":" * @param expectedStatus The expected status of the task (true for done, false for undone).","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"WinSheng1"},"content":" * @param doneMessage The message to display when the task is done.","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"WinSheng1"},"content":" * @param undoneMessage The message to display when the task is undone.","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"WinSheng1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"WinSheng1"},"content":" public String updateTaskStatus(boolean expectedStatus, String doneMessage, String undoneMessage) {","lastModifiedDate":"2023-09-10"},{"lineNumber":75,"author":{"gitId":"WinSheng1"},"content":" StringBuilder message \u003d new StringBuilder();","lastModifiedDate":"2023-09-10"},{"lineNumber":76,"author":{"gitId":"WinSheng1"},"content":" if (isDone \u003d\u003d expectedStatus) {","lastModifiedDate":"2023-08-28"},{"lineNumber":77,"author":{"gitId":"WinSheng1"},"content":" message.append(doneMessage);","lastModifiedDate":"2023-09-10"},{"lineNumber":78,"author":{"gitId":"WinSheng1"},"content":" } else {","lastModifiedDate":"2023-08-28"},{"lineNumber":79,"author":{"gitId":"WinSheng1"},"content":" isDone \u003d expectedStatus;","lastModifiedDate":"2023-08-28"},{"lineNumber":80,"author":{"gitId":"WinSheng1"},"content":" message.append(undoneMessage);","lastModifiedDate":"2023-09-10"},{"lineNumber":81,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":82,"author":{"gitId":"WinSheng1"},"content":" return message.toString();","lastModifiedDate":"2023-09-10"},{"lineNumber":83,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":84,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":85,"author":{"gitId":"WinSheng1"},"content":" public boolean containsKeyword(String keyword) {","lastModifiedDate":"2023-09-04"},{"lineNumber":86,"author":{"gitId":"WinSheng1"},"content":" return description.toLowerCase().contains(keyword.toLowerCase());","lastModifiedDate":"2023-09-04"},{"lineNumber":87,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":88,"author":{"gitId":"WinSheng1"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"WinSheng1":88}},{"path":"src/main/java/duke/task/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WinSheng1"},"content":"package duke.task;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"WinSheng1"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"WinSheng1"},"content":" * Represents a ToDo task.","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"WinSheng1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"WinSheng1"},"content":" * @author Win Sheng","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"WinSheng1"},"content":" * @since 3 September 2023","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"WinSheng1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"WinSheng1"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-25"},{"lineNumber":10,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":11,"author":{"gitId":"WinSheng1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"WinSheng1"},"content":" * Constructs a new ToDo task with the specified description.","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"WinSheng1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"WinSheng1"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"WinSheng1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"WinSheng1"},"content":" public ToDo(String description) {","lastModifiedDate":"2023-08-25"},{"lineNumber":17,"author":{"gitId":"WinSheng1"},"content":" super(description);","lastModifiedDate":"2023-08-25"},{"lineNumber":18,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":19,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":20,"author":{"gitId":"WinSheng1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"WinSheng1"},"content":" * Gets the type of the ToDo task.","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"WinSheng1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"WinSheng1"},"content":" * @return The type \"[T]\" for the ToDo task.","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"WinSheng1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"WinSheng1"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"WinSheng1"},"content":" public String type() {","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"WinSheng1"},"content":" return \"[T]\";","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"WinSheng1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"WinSheng1"},"content":" * Converts the ToDo task to a string format for storing in a file.","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"WinSheng1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"WinSheng1"},"content":" * @return A string representation of the ToDo task for file storage.","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"WinSheng1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"WinSheng1"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":36,"author":{"gitId":"WinSheng1"},"content":" public String toFileString() {","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"WinSheng1"},"content":" return type() + \" | \" + (isDone ? \"1\" : \"0\") + \" | \" + description;","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"WinSheng1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"WinSheng1"},"content":" * Returns a string representation of the ToDo task.","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"WinSheng1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"WinSheng1"},"content":" * @return A string representation of the ToDo task.","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"WinSheng1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"WinSheng1"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"WinSheng1"},"content":" public String toString() {","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"WinSheng1"},"content":" return type() + super.toString();","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":49,"author":{"gitId":"WinSheng1"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"WinSheng1":49}},{"path":"src/main/java/duke/util/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WinSheng1"},"content":"package duke.util;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"WinSheng1"},"content":"import duke.Duke;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"WinSheng1"},"content":"import duke.exception.InvalidCommandException;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"WinSheng1"},"content":"import duke.exception.MissingInputException;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"WinSheng1"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"WinSheng1"},"content":"import duke.task.Event;","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"WinSheng1"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"WinSheng1"},"content":"import duke.task.ToDo;","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"WinSheng1"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"WinSheng1"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"WinSheng1"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"WinSheng1"},"content":" * The Parser class is responsible for parsing user input and executing corresponding commands.","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"WinSheng1"},"content":" * It handles various user commands such as adding tasks, listing tasks, marking tasks as done, un-marking tasks and","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"WinSheng1"},"content":" * deleting tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"WinSheng1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"WinSheng1"},"content":" * @author Win Sheng","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"WinSheng1"},"content":" * @since 3 September 2023","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"WinSheng1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"WinSheng1"},"content":"public class Parser {","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"WinSheng1"},"content":" private final TaskList taskList;","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"WinSheng1"},"content":" private final Ui ui;","lastModifiedDate":"2023-09-10"},{"lineNumber":27,"author":{"gitId":"WinSheng1"},"content":" private final Storage storage;","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"WinSheng1"},"content":" public Parser(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-10"},{"lineNumber":30,"author":{"gitId":"WinSheng1"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"WinSheng1"},"content":" this.ui \u003d ui;","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"WinSheng1"},"content":" this.storage \u003d storage;","lastModifiedDate":"2023-09-10"},{"lineNumber":33,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":34,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"WinSheng1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"WinSheng1"},"content":" * Parses the user\u0027s input and executes the corresponding commands.","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"WinSheng1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"WinSheng1"},"content":" * @param userInput The user\u0027s input.","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"WinSheng1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"WinSheng1"},"content":" public String parseUserInput(String userInput) {","lastModifiedDate":"2023-09-10"},{"lineNumber":41,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"WinSheng1"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"WinSheng1"},"content":" String[] individualWords \u003d userInput.split(\" \");","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"WinSheng1"},"content":" if (individualWords.length \u003d\u003d 0) {","lastModifiedDate":"2023-09-10"},{"lineNumber":46,"author":{"gitId":"WinSheng1"},"content":" throw new InvalidCommandException();","lastModifiedDate":"2023-09-10"},{"lineNumber":47,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":48,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":49,"author":{"gitId":"WinSheng1"},"content":" String firstWord \u003d individualWords[0];","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"WinSheng1"},"content":" String lowerCapsFirstWord \u003d firstWord.toLowerCase();","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"WinSheng1"},"content":" switch (lowerCapsFirstWord) {","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"WinSheng1"},"content":" case \"bye\":","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"WinSheng1"},"content":" Duke.isDone \u003d true;","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"WinSheng1"},"content":" return ui.goodbyeMessage();","lastModifiedDate":"2023-09-10"},{"lineNumber":56,"author":{"gitId":"WinSheng1"},"content":" case \"list\":","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"WinSheng1"},"content":" return listTasks();","lastModifiedDate":"2023-09-10"},{"lineNumber":58,"author":{"gitId":"WinSheng1"},"content":" case \"mark\":","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"WinSheng1"},"content":" return markTask(userInput);","lastModifiedDate":"2023-09-10"},{"lineNumber":60,"author":{"gitId":"WinSheng1"},"content":" case \"unmark\":","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"WinSheng1"},"content":" return unmarkTask(userInput);","lastModifiedDate":"2023-09-10"},{"lineNumber":62,"author":{"gitId":"WinSheng1"},"content":" case \"delete\":","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"WinSheng1"},"content":" return deleteTask(userInput);","lastModifiedDate":"2023-09-10"},{"lineNumber":64,"author":{"gitId":"WinSheng1"},"content":" case \"todo\":","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"WinSheng1"},"content":" return addTodoTask(userInput);","lastModifiedDate":"2023-09-10"},{"lineNumber":66,"author":{"gitId":"WinSheng1"},"content":" case \"deadline\":","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"WinSheng1"},"content":" return addDeadlineTask(userInput);","lastModifiedDate":"2023-09-10"},{"lineNumber":68,"author":{"gitId":"WinSheng1"},"content":" case \"event\":","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"WinSheng1"},"content":" return addEventTask(userInput);","lastModifiedDate":"2023-09-10"},{"lineNumber":70,"author":{"gitId":"WinSheng1"},"content":" case \"find\":","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"WinSheng1"},"content":" return findByKeyword(userInput);","lastModifiedDate":"2023-09-10"},{"lineNumber":72,"author":{"gitId":"WinSheng1"},"content":" default:","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"WinSheng1"},"content":" throw new InvalidCommandException();","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"WinSheng1"},"content":" } catch (MissingInputException | InvalidCommandException | IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-10"},{"lineNumber":76,"author":{"gitId":"WinSheng1"},"content":" return e.getMessage();","lastModifiedDate":"2023-09-10"},{"lineNumber":77,"author":{"gitId":"WinSheng1"},"content":" } finally {","lastModifiedDate":"2023-09-10"},{"lineNumber":78,"author":{"gitId":"WinSheng1"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"WinSheng1"},"content":" storage.save(taskList.getAllTasks());","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"WinSheng1"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"WinSheng1"},"content":" return(\"Cannot save tasks.\");","lastModifiedDate":"2023-09-10"},{"lineNumber":82,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":83,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"WinSheng1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":87,"author":{"gitId":"WinSheng1"},"content":" * Displays the list of tasks saved.","lastModifiedDate":"2023-09-03"},{"lineNumber":88,"author":{"gitId":"WinSheng1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":89,"author":{"gitId":"WinSheng1"},"content":" private String listTasks() {","lastModifiedDate":"2023-09-10"},{"lineNumber":90,"author":{"gitId":"WinSheng1"},"content":" if (taskList.getSize() \u003d\u003d 0) {","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"WinSheng1"},"content":" return(\"You have 0 task.\");","lastModifiedDate":"2023-09-10"},{"lineNumber":92,"author":{"gitId":"WinSheng1"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"WinSheng1"},"content":" StringBuilder message \u003d new StringBuilder();","lastModifiedDate":"2023-09-10"},{"lineNumber":94,"author":{"gitId":"WinSheng1"},"content":" message.append(\"Here are your tasks:\\n\");","lastModifiedDate":"2023-09-10"},{"lineNumber":95,"author":{"gitId":"WinSheng1"},"content":" for (int i \u003d 0; i \u003c taskList.getSize(); i++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":96,"author":{"gitId":"WinSheng1"},"content":" Task task \u003d taskList.getTask(i);","lastModifiedDate":"2023-09-02"},{"lineNumber":97,"author":{"gitId":"WinSheng1"},"content":" message.append((i + 1) + \".\" + task.toString() + \"\\n\");","lastModifiedDate":"2023-09-10"},{"lineNumber":98,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":99,"author":{"gitId":"WinSheng1"},"content":" return message.toString();","lastModifiedDate":"2023-09-10"},{"lineNumber":100,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":101,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"WinSheng1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":104,"author":{"gitId":"WinSheng1"},"content":" * Marks a task as done.","lastModifiedDate":"2023-09-03"},{"lineNumber":105,"author":{"gitId":"WinSheng1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":106,"author":{"gitId":"WinSheng1"},"content":" * @param userInput The user\u0027s input.","lastModifiedDate":"2023-09-03"},{"lineNumber":107,"author":{"gitId":"WinSheng1"},"content":" * @throws MissingInputException If the user input is missing required information.","lastModifiedDate":"2023-09-03"},{"lineNumber":108,"author":{"gitId":"WinSheng1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":109,"author":{"gitId":"WinSheng1"},"content":" private String markTask(String userInput) throws MissingInputException {","lastModifiedDate":"2023-09-10"},{"lineNumber":110,"author":{"gitId":"WinSheng1"},"content":" String[] individualWords \u003d userInput.split(\" \");","lastModifiedDate":"2023-09-02"},{"lineNumber":111,"author":{"gitId":"WinSheng1"},"content":" if (individualWords.length \u003c\u003d 1) {","lastModifiedDate":"2023-09-02"},{"lineNumber":112,"author":{"gitId":"WinSheng1"},"content":" throw new MissingInputException(\"Task to mark cannot be empty!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":113,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":114,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":115,"author":{"gitId":"WinSheng1"},"content":" if (taskList.isEmpty()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":116,"author":{"gitId":"WinSheng1"},"content":" throw new IndexOutOfBoundsException(\"There are no tasks to mark.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":117,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":118,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":119,"author":{"gitId":"WinSheng1"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":120,"author":{"gitId":"WinSheng1"},"content":" int taskNumber \u003d Integer.parseInt(userInput.substring(5)) - 1;","lastModifiedDate":"2023-09-02"},{"lineNumber":121,"author":{"gitId":"WinSheng1"},"content":" Task task \u003d taskList.getTask(taskNumber);","lastModifiedDate":"2023-09-02"},{"lineNumber":122,"author":{"gitId":"WinSheng1"},"content":" return task.updateTaskStatus(true, \"Task \" + (taskNumber + 1) + \" is already done!\", \"Great job! Task \" + (taskNumber + 1) + \" is done!\\n\");","lastModifiedDate":"2023-09-10"},{"lineNumber":123,"author":{"gitId":"WinSheng1"},"content":" } catch (NumberFormatException | IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":124,"author":{"gitId":"WinSheng1"},"content":" return(\"Invalid task number.\");","lastModifiedDate":"2023-09-10"},{"lineNumber":125,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":126,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":127,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":128,"author":{"gitId":"WinSheng1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":129,"author":{"gitId":"WinSheng1"},"content":" * Marks a task as undone.","lastModifiedDate":"2023-09-03"},{"lineNumber":130,"author":{"gitId":"WinSheng1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":131,"author":{"gitId":"WinSheng1"},"content":" * @param userInput The user\u0027s input.","lastModifiedDate":"2023-09-03"},{"lineNumber":132,"author":{"gitId":"WinSheng1"},"content":" * @throws MissingInputException If the user input is missing required information.","lastModifiedDate":"2023-09-03"},{"lineNumber":133,"author":{"gitId":"WinSheng1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":134,"author":{"gitId":"WinSheng1"},"content":" private String unmarkTask(String userInput) throws MissingInputException {","lastModifiedDate":"2023-09-10"},{"lineNumber":135,"author":{"gitId":"WinSheng1"},"content":" String[] individualWords \u003d userInput.split(\" \");","lastModifiedDate":"2023-09-02"},{"lineNumber":136,"author":{"gitId":"WinSheng1"},"content":" if (individualWords.length \u003c\u003d 1) {","lastModifiedDate":"2023-09-02"},{"lineNumber":137,"author":{"gitId":"WinSheng1"},"content":" throw new MissingInputException(\"Task to unmark cannot be empty!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":138,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":139,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":140,"author":{"gitId":"WinSheng1"},"content":" if (taskList.isEmpty()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":141,"author":{"gitId":"WinSheng1"},"content":" throw new IndexOutOfBoundsException(\"There are no tasks to unmark.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":142,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":143,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":144,"author":{"gitId":"WinSheng1"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":145,"author":{"gitId":"WinSheng1"},"content":" int taskNumber \u003d Integer.parseInt(userInput.substring(7)) - 1;","lastModifiedDate":"2023-09-02"},{"lineNumber":146,"author":{"gitId":"WinSheng1"},"content":" Task task \u003d taskList.getTask(taskNumber);","lastModifiedDate":"2023-09-02"},{"lineNumber":147,"author":{"gitId":"WinSheng1"},"content":" return task.updateTaskStatus(false, \"Task \" + (taskNumber + 1) + \" is still incomplete.\", \"Okay, I\u0027ve updated Task \" + (taskNumber + 1) + \" to be incomplete.\\n\");","lastModifiedDate":"2023-09-10"},{"lineNumber":148,"author":{"gitId":"WinSheng1"},"content":" } catch (NumberFormatException | IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":149,"author":{"gitId":"WinSheng1"},"content":" return(\"Invalid task number.\");","lastModifiedDate":"2023-09-10"},{"lineNumber":150,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":151,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":152,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":153,"author":{"gitId":"WinSheng1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":154,"author":{"gitId":"WinSheng1"},"content":" * Deletes a task from the list of tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":155,"author":{"gitId":"WinSheng1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":156,"author":{"gitId":"WinSheng1"},"content":" * @param userInput The user\u0027s input.","lastModifiedDate":"2023-09-03"},{"lineNumber":157,"author":{"gitId":"WinSheng1"},"content":" * @throws MissingInputException If the user input is missing required information.","lastModifiedDate":"2023-09-03"},{"lineNumber":158,"author":{"gitId":"WinSheng1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":159,"author":{"gitId":"WinSheng1"},"content":" private String deleteTask(String userInput) throws MissingInputException {","lastModifiedDate":"2023-09-10"},{"lineNumber":160,"author":{"gitId":"WinSheng1"},"content":" String[] individualWords \u003d userInput.split(\" \");","lastModifiedDate":"2023-09-02"},{"lineNumber":161,"author":{"gitId":"WinSheng1"},"content":" if (individualWords.length \u003c\u003d 1) {","lastModifiedDate":"2023-09-02"},{"lineNumber":162,"author":{"gitId":"WinSheng1"},"content":" throw new MissingInputException(\"Task to be deleted cannot be empty!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":163,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":164,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":165,"author":{"gitId":"WinSheng1"},"content":" if (taskList.isEmpty()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":166,"author":{"gitId":"WinSheng1"},"content":" throw new IndexOutOfBoundsException(\"There are no tasks to be deleted.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":167,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":168,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":169,"author":{"gitId":"WinSheng1"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":170,"author":{"gitId":"WinSheng1"},"content":" int taskNumber \u003d Integer.parseInt(userInput.substring(7)) - 1;","lastModifiedDate":"2023-09-02"},{"lineNumber":171,"author":{"gitId":"WinSheng1"},"content":" Task deletedTask \u003d taskList.getTask(taskNumber);","lastModifiedDate":"2023-09-02"},{"lineNumber":172,"author":{"gitId":"WinSheng1"},"content":" taskList.deleteTask(taskNumber);","lastModifiedDate":"2023-09-02"},{"lineNumber":173,"author":{"gitId":"WinSheng1"},"content":" return \"This task has been removed:\\n \" +","lastModifiedDate":"2023-09-10"},{"lineNumber":174,"author":{"gitId":"WinSheng1"},"content":" deletedTask +","lastModifiedDate":"2023-09-10"},{"lineNumber":175,"author":{"gitId":"WinSheng1"},"content":" \"\\nYou have a total of \" +","lastModifiedDate":"2023-09-10"},{"lineNumber":176,"author":{"gitId":"WinSheng1"},"content":" taskList.getSize() +","lastModifiedDate":"2023-09-10"},{"lineNumber":177,"author":{"gitId":"WinSheng1"},"content":" (taskList.getSize() \u003d\u003d 1 ? \" task.\\n\" : \" tasks.\\n\");","lastModifiedDate":"2023-09-10"},{"lineNumber":178,"author":{"gitId":"WinSheng1"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":179,"author":{"gitId":"WinSheng1"},"content":" return(\"Invalid task number.\");","lastModifiedDate":"2023-09-10"},{"lineNumber":180,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":181,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":182,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":183,"author":{"gitId":"WinSheng1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":184,"author":{"gitId":"WinSheng1"},"content":" * Adds a ToDo task to the list of tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":185,"author":{"gitId":"WinSheng1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":186,"author":{"gitId":"WinSheng1"},"content":" * @param userInput The user\u0027s input.","lastModifiedDate":"2023-09-03"},{"lineNumber":187,"author":{"gitId":"WinSheng1"},"content":" * @throws MissingInputException If the user input is missing required information.","lastModifiedDate":"2023-09-03"},{"lineNumber":188,"author":{"gitId":"WinSheng1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":189,"author":{"gitId":"WinSheng1"},"content":" private String addTodoTask(String userInput) throws MissingInputException {","lastModifiedDate":"2023-09-10"},{"lineNumber":190,"author":{"gitId":"WinSheng1"},"content":" String[] individualWords \u003d userInput.split(\" \");","lastModifiedDate":"2023-09-02"},{"lineNumber":191,"author":{"gitId":"WinSheng1"},"content":" if (individualWords.length \u003c\u003d 1) {","lastModifiedDate":"2023-09-02"},{"lineNumber":192,"author":{"gitId":"WinSheng1"},"content":" throw new MissingInputException(\"The description of a todo cannot be empty!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":193,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":194,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":195,"author":{"gitId":"WinSheng1"},"content":" String description \u003d userInput.substring(5).trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":196,"author":{"gitId":"WinSheng1"},"content":" ToDo task \u003d new ToDo(description);","lastModifiedDate":"2023-09-02"},{"lineNumber":197,"author":{"gitId":"WinSheng1"},"content":" taskList.addTask(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":198,"author":{"gitId":"WinSheng1"},"content":" return \"I\u0027ve added this task:\\n \" +","lastModifiedDate":"2023-09-10"},{"lineNumber":199,"author":{"gitId":"WinSheng1"},"content":" task +","lastModifiedDate":"2023-09-10"},{"lineNumber":200,"author":{"gitId":"WinSheng1"},"content":" \"\\nYou have a total of \" +","lastModifiedDate":"2023-09-10"},{"lineNumber":201,"author":{"gitId":"WinSheng1"},"content":" taskList.getSize() +","lastModifiedDate":"2023-09-10"},{"lineNumber":202,"author":{"gitId":"WinSheng1"},"content":" (taskList.getSize() \u003d\u003d 1 ? \" task.\" : \" tasks.\");","lastModifiedDate":"2023-09-10"},{"lineNumber":203,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":204,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":205,"author":{"gitId":"WinSheng1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":206,"author":{"gitId":"WinSheng1"},"content":" * Adds a Deadline task to the list of tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":207,"author":{"gitId":"WinSheng1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":208,"author":{"gitId":"WinSheng1"},"content":" * @param userInput The user\u0027s input.","lastModifiedDate":"2023-09-03"},{"lineNumber":209,"author":{"gitId":"WinSheng1"},"content":" * @throws MissingInputException If the user input is missing required information.","lastModifiedDate":"2023-09-03"},{"lineNumber":210,"author":{"gitId":"WinSheng1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":211,"author":{"gitId":"WinSheng1"},"content":" private String addDeadlineTask(String userInput) throws MissingInputException {","lastModifiedDate":"2023-09-10"},{"lineNumber":212,"author":{"gitId":"WinSheng1"},"content":" String[] individualWords \u003d userInput.split(\" \");","lastModifiedDate":"2023-09-02"},{"lineNumber":213,"author":{"gitId":"WinSheng1"},"content":" if (individualWords.length \u003c\u003d 1) {","lastModifiedDate":"2023-09-02"},{"lineNumber":214,"author":{"gitId":"WinSheng1"},"content":" throw new MissingInputException(\"You are missing one or some of these inputs - description/ by.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":215,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":216,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":217,"author":{"gitId":"WinSheng1"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":218,"author":{"gitId":"WinSheng1"},"content":" String fullStr \u003d userInput.substring(9);","lastModifiedDate":"2023-09-02"},{"lineNumber":219,"author":{"gitId":"WinSheng1"},"content":" String[] parts \u003d fullStr.split(\"/by\");","lastModifiedDate":"2023-09-02"},{"lineNumber":220,"author":{"gitId":"WinSheng1"},"content":" String description \u003d parts[0].trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":221,"author":{"gitId":"WinSheng1"},"content":" String by \u003d parts[1].trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":222,"author":{"gitId":"WinSheng1"},"content":" Deadline task \u003d new Deadline(description, by);","lastModifiedDate":"2023-09-02"},{"lineNumber":223,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":224,"author":{"gitId":"WinSheng1"},"content":" if (task.dateTime !\u003d null) {","lastModifiedDate":"2023-09-02"},{"lineNumber":225,"author":{"gitId":"WinSheng1"},"content":" taskList.addTask(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":226,"author":{"gitId":"WinSheng1"},"content":" return \"I\u0027ve added this task:\\n \" +","lastModifiedDate":"2023-09-10"},{"lineNumber":227,"author":{"gitId":"WinSheng1"},"content":" task +","lastModifiedDate":"2023-09-10"},{"lineNumber":228,"author":{"gitId":"WinSheng1"},"content":" \"\\nYou have a total of \" +","lastModifiedDate":"2023-09-10"},{"lineNumber":229,"author":{"gitId":"WinSheng1"},"content":" taskList.getSize() +","lastModifiedDate":"2023-09-10"},{"lineNumber":230,"author":{"gitId":"WinSheng1"},"content":" (taskList.getSize() \u003d\u003d 1 ? \" task.\" : \" tasks.\");","lastModifiedDate":"2023-09-10"},{"lineNumber":231,"author":{"gitId":"WinSheng1"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":232,"author":{"gitId":"WinSheng1"},"content":" return \"Please use the following formats:\\n\" +","lastModifiedDate":"2023-09-10"},{"lineNumber":233,"author":{"gitId":"WinSheng1"},"content":" \"deadline task /by yyyy-mm-dd hhmm\\n\" +","lastModifiedDate":"2023-09-10"},{"lineNumber":234,"author":{"gitId":"WinSheng1"},"content":" \"deadline task /by dd/mm/yyyy hhmm\\n\" +","lastModifiedDate":"2023-09-10"},{"lineNumber":235,"author":{"gitId":"WinSheng1"},"content":" \"deadline task /by yyyy-mm-dd\\n\" +","lastModifiedDate":"2023-09-10"},{"lineNumber":236,"author":{"gitId":"WinSheng1"},"content":" \"deadline task /by dd/mm/yyyy\";","lastModifiedDate":"2023-09-10"},{"lineNumber":237,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":238,"author":{"gitId":"WinSheng1"},"content":" } catch (ArrayIndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":239,"author":{"gitId":"WinSheng1"},"content":" throw new MissingInputException(\"You are missing one or some of these inputs - description/ by.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":240,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":241,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":242,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":243,"author":{"gitId":"WinSheng1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":244,"author":{"gitId":"WinSheng1"},"content":" * Adds an Event task to the list of tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":245,"author":{"gitId":"WinSheng1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":246,"author":{"gitId":"WinSheng1"},"content":" * @param userInput The user\u0027s input.","lastModifiedDate":"2023-09-03"},{"lineNumber":247,"author":{"gitId":"WinSheng1"},"content":" * @throws MissingInputException If the user input is missing required information.","lastModifiedDate":"2023-09-03"},{"lineNumber":248,"author":{"gitId":"WinSheng1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":249,"author":{"gitId":"WinSheng1"},"content":" private String addEventTask(String userInput) throws MissingInputException {","lastModifiedDate":"2023-09-10"},{"lineNumber":250,"author":{"gitId":"WinSheng1"},"content":" String[] individualWords \u003d userInput.split(\" \");","lastModifiedDate":"2023-09-02"},{"lineNumber":251,"author":{"gitId":"WinSheng1"},"content":" if (individualWords.length \u003c\u003d 1) {","lastModifiedDate":"2023-09-02"},{"lineNumber":252,"author":{"gitId":"WinSheng1"},"content":" throw new MissingInputException(\"You are missing one or some of these inputs - description/ from/ to.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":253,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":254,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":255,"author":{"gitId":"WinSheng1"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":256,"author":{"gitId":"WinSheng1"},"content":" String fullStr \u003d userInput.substring(6);","lastModifiedDate":"2023-09-02"},{"lineNumber":257,"author":{"gitId":"WinSheng1"},"content":" String[] partialStr \u003d fullStr.split(\"/from\");","lastModifiedDate":"2023-09-02"},{"lineNumber":258,"author":{"gitId":"WinSheng1"},"content":" String description \u003d partialStr[0].trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":259,"author":{"gitId":"WinSheng1"},"content":" String[] toFrom \u003d partialStr[1].split(\"/to\");","lastModifiedDate":"2023-09-02"},{"lineNumber":260,"author":{"gitId":"WinSheng1"},"content":" String from \u003d toFrom[0].trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":261,"author":{"gitId":"WinSheng1"},"content":" String to \u003d toFrom[1].trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":262,"author":{"gitId":"WinSheng1"},"content":" Event task \u003d new Event(description, from, to);","lastModifiedDate":"2023-09-02"},{"lineNumber":263,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":264,"author":{"gitId":"WinSheng1"},"content":" if (task.fromDateTime !\u003d null \u0026\u0026 task.toDateTime !\u003d null) {","lastModifiedDate":"2023-09-02"},{"lineNumber":265,"author":{"gitId":"WinSheng1"},"content":" //If user sets to date to be before from date","lastModifiedDate":"2023-09-10"},{"lineNumber":266,"author":{"gitId":"WinSheng1"},"content":" if (task.fromDateTime.isAfter(task.toDateTime)) {","lastModifiedDate":"2023-09-10"},{"lineNumber":267,"author":{"gitId":"WinSheng1"},"content":" return(\"To date cannot be before from date.\");","lastModifiedDate":"2023-09-10"},{"lineNumber":268,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":269,"author":{"gitId":"WinSheng1"},"content":" taskList.addTask(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":270,"author":{"gitId":"WinSheng1"},"content":" return \"I\u0027ve added this task:\\n \" + task + \"\\nYou have a total of \" + taskList.getSize() + (taskList.getSize() \u003d\u003d 1 ? \" task.\\n\" : \" tasks.\\n\");","lastModifiedDate":"2023-09-10"},{"lineNumber":271,"author":{"gitId":"WinSheng1"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":272,"author":{"gitId":"WinSheng1"},"content":" return \"Please use the following formats:\\n\" +","lastModifiedDate":"2023-09-10"},{"lineNumber":273,"author":{"gitId":"WinSheng1"},"content":" \"event task /from yyyy-mm-dd hhmm /to yyyy-mm-dd hhmm\\n\" +","lastModifiedDate":"2023-09-10"},{"lineNumber":274,"author":{"gitId":"WinSheng1"},"content":" \"event task /from dd/mm/yyyy hhmm /to dd/mm/yyyy hhmm\\n\" +","lastModifiedDate":"2023-09-10"},{"lineNumber":275,"author":{"gitId":"WinSheng1"},"content":" \"event task /from yyyy-mm-dd /to yyyy-mm-dd\\n\" +","lastModifiedDate":"2023-09-10"},{"lineNumber":276,"author":{"gitId":"WinSheng1"},"content":" \"event task /from dd/mm/yyyy /to dd/mm/yyyy\\n\";","lastModifiedDate":"2023-09-10"},{"lineNumber":277,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":278,"author":{"gitId":"WinSheng1"},"content":" } catch (ArrayIndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":279,"author":{"gitId":"WinSheng1"},"content":" throw new MissingInputException(\"You are missing one or some of these inputs - description/ from/ to.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":280,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":281,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":282,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":283,"author":{"gitId":"WinSheng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":284,"author":{"gitId":"WinSheng1"},"content":" * Finds all tasks matching a specified keyword and displays the list of matching tasks.","lastModifiedDate":"2023-09-04"},{"lineNumber":285,"author":{"gitId":"WinSheng1"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":286,"author":{"gitId":"WinSheng1"},"content":" * @param userInput The user\u0027s input.","lastModifiedDate":"2023-09-04"},{"lineNumber":287,"author":{"gitId":"WinSheng1"},"content":" * @throws MissingInputException If the user input is missing required information.","lastModifiedDate":"2023-09-04"},{"lineNumber":288,"author":{"gitId":"WinSheng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":289,"author":{"gitId":"WinSheng1"},"content":" private String findByKeyword (String userInput) throws MissingInputException {","lastModifiedDate":"2023-09-10"},{"lineNumber":290,"author":{"gitId":"WinSheng1"},"content":" String[] individualWords \u003d userInput.split(\" \");","lastModifiedDate":"2023-09-04"},{"lineNumber":291,"author":{"gitId":"WinSheng1"},"content":" if (individualWords.length \u003c\u003d 1) {","lastModifiedDate":"2023-09-04"},{"lineNumber":292,"author":{"gitId":"WinSheng1"},"content":" throw new MissingInputException(\"Keyword cannot be empty.\");","lastModifiedDate":"2023-09-04"},{"lineNumber":293,"author":{"gitId":"WinSheng1"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":294,"author":{"gitId":"WinSheng1"},"content":" String keyword \u003d individualWords[1];","lastModifiedDate":"2023-09-04"},{"lineNumber":295,"author":{"gitId":"WinSheng1"},"content":" ArrayList\u003cTask\u003e matchingTasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-04"},{"lineNumber":296,"author":{"gitId":"WinSheng1"},"content":" ArrayList\u003cTask\u003e tasks \u003d taskList.getAllTasks();","lastModifiedDate":"2023-09-04"},{"lineNumber":297,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":298,"author":{"gitId":"WinSheng1"},"content":" for (Task task: tasks) {","lastModifiedDate":"2023-09-04"},{"lineNumber":299,"author":{"gitId":"WinSheng1"},"content":" if (task.containsKeyword(keyword)) {","lastModifiedDate":"2023-09-04"},{"lineNumber":300,"author":{"gitId":"WinSheng1"},"content":" matchingTasks.add(task);","lastModifiedDate":"2023-09-04"},{"lineNumber":301,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":302,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":303,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":304,"author":{"gitId":"WinSheng1"},"content":" if (matchingTasks.isEmpty()) {","lastModifiedDate":"2023-09-04"},{"lineNumber":305,"author":{"gitId":"WinSheng1"},"content":" return(\"No matching tasks found.\");","lastModifiedDate":"2023-09-10"},{"lineNumber":306,"author":{"gitId":"WinSheng1"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":307,"author":{"gitId":"WinSheng1"},"content":" StringBuilder message \u003d new StringBuilder();","lastModifiedDate":"2023-09-10"},{"lineNumber":308,"author":{"gitId":"WinSheng1"},"content":" message.append(\"Here are the matching tasks in your list:\\n\");","lastModifiedDate":"2023-09-10"},{"lineNumber":309,"author":{"gitId":"WinSheng1"},"content":" for (int i \u003d 0; i \u003c matchingTasks.size(); i++) {","lastModifiedDate":"2023-09-04"},{"lineNumber":310,"author":{"gitId":"WinSheng1"},"content":" Task task \u003d matchingTasks.get(i);","lastModifiedDate":"2023-09-04"},{"lineNumber":311,"author":{"gitId":"WinSheng1"},"content":" message.append((i + 1) + \".\" + task.toString() + \"\\n\");","lastModifiedDate":"2023-09-10"},{"lineNumber":312,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":313,"author":{"gitId":"WinSheng1"},"content":" matchingTasks.clear();","lastModifiedDate":"2023-09-04"},{"lineNumber":314,"author":{"gitId":"WinSheng1"},"content":" return message.toString();","lastModifiedDate":"2023-09-10"},{"lineNumber":315,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":316,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":317,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":318,"author":{"gitId":"WinSheng1"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"WinSheng1":318}},{"path":"src/main/java/duke/util/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WinSheng1"},"content":"package duke.util;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"WinSheng1"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"WinSheng1"},"content":"import duke.task.Event;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"WinSheng1"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"WinSheng1"},"content":"import duke.task.ToDo;","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"WinSheng1"},"content":"import java.io.BufferedReader;","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"WinSheng1"},"content":"import java.io.File;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"WinSheng1"},"content":"import java.io.FileReader;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"WinSheng1"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"WinSheng1"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"WinSheng1"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"WinSheng1"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"WinSheng1"},"content":" * The Storage class handles loading and saving of tasks to a file specified by a file path.","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"WinSheng1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"WinSheng1"},"content":" * @author Win Sheng","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"WinSheng1"},"content":" * @since 3 September 2023","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"WinSheng1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"WinSheng1"},"content":"public class Storage {","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"WinSheng1"},"content":" private String filePath;","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"WinSheng1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"WinSheng1"},"content":" * Constructs a new Storage with the specified file path.","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"WinSheng1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"WinSheng1"},"content":" * @param filePath The file path that stores the task data in text format.","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"WinSheng1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"WinSheng1"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"WinSheng1"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"WinSheng1"},"content":" public ArrayList\u003cTask\u003e load() throws IOException {","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"WinSheng1"},"content":" ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"WinSheng1"},"content":" File file \u003d new File(filePath);","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"WinSheng1"},"content":" if (!file.exists()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"WinSheng1"},"content":" file.createNewFile();","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"WinSheng1"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"WinSheng1"},"content":" FileReader reader \u003d new FileReader(filePath);","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"WinSheng1"},"content":" BufferedReader bufferedReader \u003d new BufferedReader(reader);","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"WinSheng1"},"content":" String fileLine;","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"WinSheng1"},"content":" while ((fileLine \u003d bufferedReader.readLine()) !\u003d null) {","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"WinSheng1"},"content":" Task task \u003d createTaskFromFile(fileLine);","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"WinSheng1"},"content":" tasks.add(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"WinSheng1"},"content":" bufferedReader.close();","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"WinSheng1"},"content":" return tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"WinSheng1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"WinSheng1"},"content":" * Saves the list of tasks to the file specified by the file path.","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"WinSheng1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"WinSheng1"},"content":" * @param tasks The list of tasks to be saved.","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"WinSheng1"},"content":" * @throws IOException If there are issues saving the tasks to the file.","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"WinSheng1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"WinSheng1"},"content":" public void save(ArrayList\u003cTask\u003e tasks) throws IOException {","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"WinSheng1"},"content":" FileWriter writer \u003d new FileWriter(filePath);","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"WinSheng1"},"content":" for (Task task: tasks) {","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"WinSheng1"},"content":" String taskFileString \u003d task.toFileString();","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"WinSheng1"},"content":" writer.write(taskFileString + \"\\n\");","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"WinSheng1"},"content":" writer.close();","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"WinSheng1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"WinSheng1"},"content":" * Creates a Task based on the line of text from the file.","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"WinSheng1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"WinSheng1"},"content":" * @param fileLine A line of text from the file that represents a task.","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"WinSheng1"},"content":" * @return The task created from the file line.","lastModifiedDate":"2023-09-03"},{"lineNumber":78,"author":{"gitId":"WinSheng1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":79,"author":{"gitId":"WinSheng1"},"content":" private static Task createTaskFromFile(String fileLine) {","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"WinSheng1"},"content":" String[] parts \u003d fileLine.split(\"\\\\|\");","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"WinSheng1"},"content":" for (int i \u003d 0; i \u003c parts.length; i++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"WinSheng1"},"content":" parts[i] \u003d parts[i].trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"WinSheng1"},"content":" String type \u003d parts[0];","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"WinSheng1"},"content":" String description \u003d parts[2];","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"WinSheng1"},"content":" Task task;","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":89,"author":{"gitId":"WinSheng1"},"content":" if (type.equals(\"[T]\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"WinSheng1"},"content":" task \u003d new ToDo(description);","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"WinSheng1"},"content":" } else if (type.equals(\"[D]\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"WinSheng1"},"content":" String by \u003d parts[3];","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"WinSheng1"},"content":" task \u003d new Deadline(description, by);","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"WinSheng1"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":95,"author":{"gitId":"WinSheng1"},"content":" String from \u003d parts[3];","lastModifiedDate":"2023-09-02"},{"lineNumber":96,"author":{"gitId":"WinSheng1"},"content":" String to \u003d parts[4];","lastModifiedDate":"2023-09-02"},{"lineNumber":97,"author":{"gitId":"WinSheng1"},"content":" task \u003d new Event(description, from, to);","lastModifiedDate":"2023-09-02"},{"lineNumber":98,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":99,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":100,"author":{"gitId":"WinSheng1"},"content":" task.isDone \u003d parts[1].equals(\"1\");","lastModifiedDate":"2023-09-02"},{"lineNumber":101,"author":{"gitId":"WinSheng1"},"content":" return task;","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"WinSheng1"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"WinSheng1":103}},{"path":"src/main/java/duke/util/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WinSheng1"},"content":"package duke.util;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"WinSheng1"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"WinSheng1"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"WinSheng1"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"WinSheng1"},"content":" * The TaskList class represents a list of tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"WinSheng1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"WinSheng1"},"content":" * @author Win Sheng","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"WinSheng1"},"content":" * @since 3 September 2023","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"WinSheng1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"WinSheng1"},"content":"public class TaskList {","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"WinSheng1"},"content":" private ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"WinSheng1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"WinSheng1"},"content":" * Constructs a TaskList with a list of tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"WinSheng1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"WinSheng1"},"content":" * @param tasks An ArrayList of tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"WinSheng1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"WinSheng1"},"content":" public TaskList(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"WinSheng1"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"WinSheng1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"WinSheng1"},"content":" * Returns the number of tasks in the task list.","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"WinSheng1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"WinSheng1"},"content":" * @return The number of tasks in the task list.","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"WinSheng1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"WinSheng1"},"content":" public int getSize() {","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"WinSheng1"},"content":" return tasks.size();","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"WinSheng1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"WinSheng1"},"content":" * Gets the task from the task list at a specified index.","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"WinSheng1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"WinSheng1"},"content":" * @param index The index of the task to retrieve.","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"WinSheng1"},"content":" * @return The task at the specified index.","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"WinSheng1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"WinSheng1"},"content":" public Task getTask(int index) {","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"WinSheng1"},"content":" return tasks.get(index);","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"WinSheng1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"WinSheng1"},"content":" * Adds a task to the task list.","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"WinSheng1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"WinSheng1"},"content":" * @param task The task to be added to the task list.","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"WinSheng1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"WinSheng1"},"content":" public void addTask(Task task) {","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"WinSheng1"},"content":" tasks.add(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"WinSheng1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"WinSheng1"},"content":" * Deletes a task to the task list at a specified index.","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"WinSheng1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"WinSheng1"},"content":" * @param index The task to be deleted from the task list at a specified index.","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"WinSheng1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"WinSheng1"},"content":" public void deleteTask(int index) {","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"WinSheng1"},"content":" tasks.remove(index);","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"WinSheng1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"WinSheng1"},"content":" * Checks if the task list has any tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"WinSheng1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"WinSheng1"},"content":" * @return true if the task list has no tasks, false otherwise.","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"WinSheng1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"WinSheng1"},"content":" public boolean isEmpty() {","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"WinSheng1"},"content":" return tasks.isEmpty();","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"WinSheng1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"WinSheng1"},"content":" * Gets a copy of all tasks in the task list.","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"WinSheng1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"WinSheng1"},"content":" * @return The list of all tasks in the task list.","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"WinSheng1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"WinSheng1"},"content":" public ArrayList\u003cTask\u003e getAllTasks() {","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"WinSheng1"},"content":" return new ArrayList\u003c\u003e(tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"WinSheng1"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"WinSheng1":79}},{"path":"src/main/java/duke/util/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WinSheng1"},"content":"package duke.util;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"WinSheng1"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"WinSheng1"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"WinSheng1"},"content":" * The Ui class handles the displaying of messages to the user.","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"WinSheng1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"WinSheng1"},"content":" * @author Win Sheng","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"WinSheng1"},"content":" * @since 3 September 2023","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"WinSheng1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"WinSheng1"},"content":"public class Ui {","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"WinSheng1"},"content":" //public static final String HORIZONTAL_LINE \u003d \"___________________________________________________________________\";","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"WinSheng1"},"content":" private Scanner scanner;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"WinSheng1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"WinSheng1"},"content":" * Constructs an Ui and initializes the scanner for user input.","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"WinSheng1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"WinSheng1"},"content":" public Ui() {","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"WinSheng1"},"content":" this.scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"WinSheng1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"WinSheng1"},"content":" * Displays a welcome message.","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"WinSheng1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"WinSheng1"},"content":" public String welcomeMessage() {","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"WinSheng1"},"content":" return \"Hi! I\u0027m TaskMate.\\nWhat can I do for you today?\";","lastModifiedDate":"2023-09-10"},{"lineNumber":27,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"WinSheng1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"WinSheng1"},"content":" * Displays a goodbye message and closes the scanner.","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"WinSheng1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"WinSheng1"},"content":" public String goodbyeMessage() {","lastModifiedDate":"2023-09-10"},{"lineNumber":33,"author":{"gitId":"WinSheng1"},"content":" scanner.close();","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"WinSheng1"},"content":" return \"Goodbye! See you next time!\";","lastModifiedDate":"2023-09-10"},{"lineNumber":35,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"WinSheng1"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"WinSheng1"},"content":" * Retrieves user input from the console.","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"WinSheng1"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"WinSheng1"},"content":" * @return The user\u0027s input.","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"WinSheng1"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"WinSheng1"},"content":" public String getUserInput() {","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"WinSheng1"},"content":" System.out.println(\"Enter command: \");","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"WinSheng1"},"content":" return this.scanner.nextLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"WinSheng1"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"WinSheng1":46}},{"path":"src/test/java/duke/task/DeadlineTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WinSheng1"},"content":"package duke.task;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"WinSheng1"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"WinSheng1"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"WinSheng1"},"content":"public class DeadlineTest {","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"WinSheng1"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"WinSheng1"},"content":" void testString() {","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"WinSheng1"},"content":" Deadline task \u003d new Deadline(\"test\", \"2024-12-01 1532\");","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"WinSheng1"},"content":" assertEquals(task.toString(), \"[D][ ] test (by: Dec 1 2024 3:32PM)\");","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"WinSheng1"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"WinSheng1"},"content":" void testInvalidDeadline() {","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"WinSheng1"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"WinSheng1"},"content":" new Deadline(\"test\", \"1234\");","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"WinSheng1"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"WinSheng1"},"content":" assertEquals(\"Please use the following formats:\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"WinSheng1"},"content":" + \"deadline task /by yyyy-mm-dd hhmm\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"WinSheng1"},"content":" + \"deadline task /by dd/mm/yyyy hhmm\", e.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"WinSheng1"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"WinSheng1":23}},{"path":"src/test/java/duke/task/EventTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WinSheng1"},"content":"package duke.task;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"WinSheng1"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"WinSheng1"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"WinSheng1"},"content":"public class EventTest {","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"WinSheng1"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"WinSheng1"},"content":" void testString() {","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"WinSheng1"},"content":" Event task \u003d new Event(\"test\", \"2024-12-01 1532\", \"2024-12-03 1600\");","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"WinSheng1"},"content":" assertEquals(task.toString(), \"[E][ ] test (from: Dec 1 2024 3:32PM to Dec 3 2024 4:00PM)\");","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"WinSheng1"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"WinSheng1"},"content":" void testInvalidDeadline() {","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"WinSheng1"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"WinSheng1"},"content":" new Event(\"test\", \"1234\", \"1234\");","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"WinSheng1"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"WinSheng1"},"content":" assertEquals(\"Please use the following formats:\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"WinSheng1"},"content":" + \"event task /from yyyy-mm-dd hhmm /to yyyy-mm-dd hhmm\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"WinSheng1"},"content":" + \"deadline task /from dd/mm/yyyy hhmm /to dd/mm/yyyy hhmm\", e.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"WinSheng1"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"WinSheng1":23}},{"path":"src/test/java/duke/task/TaskTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WinSheng1"},"content":"package duke.task;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"WinSheng1"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"WinSheng1"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"WinSheng1"},"content":"public class TaskTest {","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"WinSheng1"},"content":" ToDo task \u003d new ToDo(\"test\");","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"WinSheng1"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"WinSheng1"},"content":" void testStatusIcon() {","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"WinSheng1"},"content":" assertEquals(task.getStatusIcon(), \" \");","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"WinSheng1"},"content":" task.updateTaskStatus(true, \"\", \"\");","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"WinSheng1"},"content":" assertEquals(task.getStatusIcon(), \"X\");","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"WinSheng1"},"content":" task.updateTaskStatus(false, \"\", \"\");","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"WinSheng1"},"content":" assertEquals(task.getStatusIcon(), \" \");","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"WinSheng1"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"WinSheng1":16}},{"path":"src/test/java/duke/task/ToDoTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WinSheng1"},"content":"package duke.task;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"WinSheng1"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"WinSheng1"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"WinSheng1"},"content":"public class ToDoTest {","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"WinSheng1"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"WinSheng1"},"content":" void testDescription() {","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"WinSheng1"},"content":" ToDo task \u003d new ToDo(\"test1\");","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"WinSheng1"},"content":" assertEquals(task.getDescription(), \"test1\");","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"WinSheng1"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"WinSheng1"},"content":" void testString() {","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"WinSheng1"},"content":" ToDo task \u003d new ToDo(\"test2\");","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"WinSheng1"},"content":" assertEquals(task.toString(), \"[T][ ] test2\");","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"WinSheng1"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"WinSheng1":18}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"WinSheng1"},"content":"todo borrow book","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"WinSheng1"},"content":"list","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"WinSheng1"},"content":"deadline return book /by Sunday","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"WinSheng1"},"content":"event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"WinSheng1":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":"WinSheng1"},"content":"java -classpath ..\\bin duke.Duke \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-09-04"},{"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":{"WinSheng1":1,"-":20}}] diff --git a/WinSheng1_ip_master/commits.json b/WinSheng1_ip_master/commits.json index b4280899..9efe313a 100644 --- a/WinSheng1_ip_master/commits.json +++ b/WinSheng1_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"WinSheng1":[{"date":"2023-08-23","commitResults":[{"hash":"fc84eaaa609f3ecdceb2f3eca7ab923506788849","isMergeCommit":false,"messageTitle":"Level 0. Rename, Greet, Exit","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":6}}}]},{"date":"2023-08-25","commitResults":[{"hash":"ac583b6c351bf71ba737c2bdf3fe97147835faeb","isMergeCommit":false,"messageTitle":"Level 1. Echo","messageBody":"","tags":["level-1"],"fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":4}}},{"hash":"04b37b60e5a5439ee669e476637ad05cc56a2937","isMergeCommit":false,"messageTitle":"Level 2. Add, List","messageBody":"","tags":["level-2"],"fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":1}}},{"hash":"e6b789bce8b3a89b02c391d297e91717c75428be","isMergeCommit":false,"messageTitle":"Level 3. Mark as Done","messageBody":"","tags":["level-3"],"fileTypesAndContributionMap":{"java":{"insertions":49,"deletions":8}}},{"hash":"a0c1405ce7f808d8fca1270fc3fee1e824236294","isMergeCommit":false,"messageTitle":"Level 4. ToDos, Events, Deadlines","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":90,"deletions":30}}},{"hash":"bffe50c41a94c2dce116001b24e6d0c57b662200","isMergeCommit":false,"messageTitle":"Level 4. ToDos, Events, Deadlines","messageBody":"","tags":["level-4"],"fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":3}}}]},{"date":"2023-08-26","commitResults":[{"hash":"b2e78aff3ce5018f810ae704e16810ce1fc75208","isMergeCommit":false,"messageTitle":"A-TextUiTesting","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":0},"java":{"insertions":3,"deletions":3}}},{"hash":"e355cdc4b600a6781ccac41adc07c2220eabffaa","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/master\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"f4f76d6328e195508133446b8491d7bad13a666f","isMergeCommit":false,"messageTitle":"Level 5. Handle Errors","messageBody":"","tags":["level-5"],"fileTypesAndContributionMap":{"java":{"insertions":75,"deletions":37}}},{"hash":"3747a2474b4538855064502209e6ffa6d8a2feed","isMergeCommit":false,"messageTitle":"Level 6. Delete","messageBody":"","tags":["level-6"],"fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":0}}}]},{"date":"2023-08-28","commitResults":[{"hash":"1cf2649bb3f45efab4a41fe73f5ed1ae33b6f87a","isMergeCommit":false,"messageTitle":"Updated parts of code for readability","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":87,"deletions":65}}},{"hash":"2974f5e75ef2f30694556c6ca2ce6c9f77e32965","isMergeCommit":false,"messageTitle":"Level 7. Save","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":133,"deletions":10}}}]},{"date":"2023-08-30","commitResults":[{"hash":"82c7b6d79c6f5498bb9dbd01960a7d526980b70a","isMergeCommit":false,"messageTitle":"Level 7. Save","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":0},"java":{"insertions":1,"deletions":1}}},{"hash":"6f8f8c95df216d90946c162061d684244fedcde5","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["level-7"],"fileTypesAndContributionMap":{}},{"hash":"12f15d22992a8ad4546a5868992d76c8d668a76e","isMergeCommit":false,"messageTitle":"Level 7. Save","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}}]},{"date":"2023-09-01","commitResults":[{"hash":"64e43c3700c6e2ffae3f73a1a78e2b91c164eeed","isMergeCommit":false,"messageTitle":"Level 8. Dates and Times","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0},"java":{"insertions":70,"deletions":21}}},{"hash":"3ca9dee05b13468b50cfc53cb2953059c8bd6c5e","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["level-8"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-02","commitResults":[{"hash":"5bf43707702761c9082c8e3928e398b7f5c23c6b","isMergeCommit":false,"messageTitle":"A-MoreOOP","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":3},"java":{"insertions":345,"deletions":212}}},{"hash":"fbf8da63e637b4e92f55b27495cc23f971cef8ee","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-MoreOOP\u0027","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"4153606cbfb91e78f2a8c31c30bbd65f9dbece7b","isMergeCommit":false,"messageTitle":"A-Packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":60,"deletions":14},"bat":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}},{"hash":"88af51667695702da5186dacaa36be6c569ea7de","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/add-gradle-support\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"0616fc117aed77d33e128b51615fd5aced030850","isMergeCommit":false,"messageTitle":"A-Gradle","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"txt":{"insertions":2,"deletions":0},"java":{"insertions":45,"deletions":37},"bat":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}},{"hash":"21f1e9265d4f61c49c8b6ff24f0779a031a9865a","isMergeCommit":false,"messageTitle":"A-JUnit","messageBody":"","tags":["A-Jar","A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":113,"deletions":29}}}]},{"date":"2023-09-03","commitResults":[{"hash":"721e8fa7ed66dcd17902b07308efead3191b77cb","isMergeCommit":false,"messageTitle":"A-JavaDoc","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":0},"java":{"insertions":339,"deletions":2}}}]},{"date":"2023-09-04","commitResults":[{"hash":"c6b21b31954c1cc617e7eb9296b954522afdf3cc","isMergeCommit":false,"messageTitle":"A-CodingStandard","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":57,"deletions":55}}},{"hash":"9b5baaab816f0ef32b480a02db50a82766096823","isMergeCommit":false,"messageTitle":"Level 9. Find","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":2},"java":{"insertions":38,"deletions":1}}},{"hash":"11f7dce27a5b79809728b56970ea8517d771b650","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{}},{"hash":"dabdacabfb58bf33333d0a08524736d55abd5763","isMergeCommit":true,"messageTitle":"resolving conflicts for A-CodingStandard","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"ec3195dd48660059487cfb670b179e1441831144","isMergeCommit":true,"messageTitle":"resolving conflicts for Level-9","messageBody":"","tags":["level-9"],"fileTypesAndContributionMap":{}},{"hash":"34d39ffd4bbe10bc67c8c0d733941ea454b950f9","isMergeCommit":false,"messageTitle":"refactored files, modified and added JavaDocs","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":2},"txt":{"insertions":2,"deletions":0},"java":{"insertions":50,"deletions":36},"bat":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}}]}]},"authorFileTypeContributionMap":{"WinSheng1":{"java":1031,"md":2,"fxml":0,"sh":0,"bat":1,"gradle":1,"txt":6}},"authorContributionVariance":{"WinSheng1":46089.53},"authorDisplayNameMap":{"WinSheng1":"CS2103T-W15-3 LIM ..HENG"}} +{"authorDailyContributionsMap":{"WinSheng1":[{"date":"2023-08-23","commitResults":[{"hash":"fc84eaaa609f3ecdceb2f3eca7ab923506788849","isMergeCommit":false,"messageTitle":"Level 0. Rename, Greet, Exit","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":6}}}]},{"date":"2023-08-25","commitResults":[{"hash":"ac583b6c351bf71ba737c2bdf3fe97147835faeb","isMergeCommit":false,"messageTitle":"Level 1. Echo","messageBody":"","tags":["level-1"],"fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":4}}},{"hash":"04b37b60e5a5439ee669e476637ad05cc56a2937","isMergeCommit":false,"messageTitle":"Level 2. Add, List","messageBody":"","tags":["level-2"],"fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":1}}},{"hash":"e6b789bce8b3a89b02c391d297e91717c75428be","isMergeCommit":false,"messageTitle":"Level 3. Mark as Done","messageBody":"","tags":["level-3"],"fileTypesAndContributionMap":{"java":{"insertions":49,"deletions":8}}},{"hash":"a0c1405ce7f808d8fca1270fc3fee1e824236294","isMergeCommit":false,"messageTitle":"Level 4. ToDos, Events, Deadlines","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":90,"deletions":30}}},{"hash":"bffe50c41a94c2dce116001b24e6d0c57b662200","isMergeCommit":false,"messageTitle":"Level 4. ToDos, Events, Deadlines","messageBody":"","tags":["level-4"],"fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":3}}}]},{"date":"2023-08-26","commitResults":[{"hash":"b2e78aff3ce5018f810ae704e16810ce1fc75208","isMergeCommit":false,"messageTitle":"A-TextUiTesting","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":0},"java":{"insertions":3,"deletions":3}}},{"hash":"e355cdc4b600a6781ccac41adc07c2220eabffaa","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/master\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"f4f76d6328e195508133446b8491d7bad13a666f","isMergeCommit":false,"messageTitle":"Level 5. Handle Errors","messageBody":"","tags":["level-5"],"fileTypesAndContributionMap":{"java":{"insertions":75,"deletions":37}}},{"hash":"3747a2474b4538855064502209e6ffa6d8a2feed","isMergeCommit":false,"messageTitle":"Level 6. Delete","messageBody":"","tags":["level-6"],"fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":0}}}]},{"date":"2023-08-28","commitResults":[{"hash":"1cf2649bb3f45efab4a41fe73f5ed1ae33b6f87a","isMergeCommit":false,"messageTitle":"Updated parts of code for readability","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":87,"deletions":65}}},{"hash":"2974f5e75ef2f30694556c6ca2ce6c9f77e32965","isMergeCommit":false,"messageTitle":"Level 7. Save","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":133,"deletions":10}}}]},{"date":"2023-08-30","commitResults":[{"hash":"82c7b6d79c6f5498bb9dbd01960a7d526980b70a","isMergeCommit":false,"messageTitle":"Level 7. Save","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":0},"java":{"insertions":1,"deletions":1}}},{"hash":"6f8f8c95df216d90946c162061d684244fedcde5","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["level-7"],"fileTypesAndContributionMap":{}},{"hash":"12f15d22992a8ad4546a5868992d76c8d668a76e","isMergeCommit":false,"messageTitle":"Level 7. Save","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}}]},{"date":"2023-09-01","commitResults":[{"hash":"64e43c3700c6e2ffae3f73a1a78e2b91c164eeed","isMergeCommit":false,"messageTitle":"Level 8. Dates and Times","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0},"java":{"insertions":70,"deletions":21}}},{"hash":"3ca9dee05b13468b50cfc53cb2953059c8bd6c5e","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["level-8"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-02","commitResults":[{"hash":"5bf43707702761c9082c8e3928e398b7f5c23c6b","isMergeCommit":false,"messageTitle":"A-MoreOOP","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":3},"java":{"insertions":345,"deletions":212}}},{"hash":"fbf8da63e637b4e92f55b27495cc23f971cef8ee","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-MoreOOP\u0027","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"4153606cbfb91e78f2a8c31c30bbd65f9dbece7b","isMergeCommit":false,"messageTitle":"A-Packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":60,"deletions":14},"bat":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}},{"hash":"88af51667695702da5186dacaa36be6c569ea7de","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/add-gradle-support\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"0616fc117aed77d33e128b51615fd5aced030850","isMergeCommit":false,"messageTitle":"A-Gradle","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"txt":{"insertions":2,"deletions":0},"java":{"insertions":45,"deletions":37},"bat":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}},{"hash":"21f1e9265d4f61c49c8b6ff24f0779a031a9865a","isMergeCommit":false,"messageTitle":"A-JUnit","messageBody":"","tags":["A-Jar","A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":113,"deletions":29}}}]},{"date":"2023-09-03","commitResults":[{"hash":"721e8fa7ed66dcd17902b07308efead3191b77cb","isMergeCommit":false,"messageTitle":"A-JavaDoc","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":0},"java":{"insertions":339,"deletions":2}}}]},{"date":"2023-09-04","commitResults":[{"hash":"c6b21b31954c1cc617e7eb9296b954522afdf3cc","isMergeCommit":false,"messageTitle":"A-CodingStandard","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":57,"deletions":55}}},{"hash":"9b5baaab816f0ef32b480a02db50a82766096823","isMergeCommit":false,"messageTitle":"Level 9. Find","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":2},"java":{"insertions":38,"deletions":1}}},{"hash":"11f7dce27a5b79809728b56970ea8517d771b650","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{}},{"hash":"dabdacabfb58bf33333d0a08524736d55abd5763","isMergeCommit":true,"messageTitle":"resolving conflicts for A-CodingStandard","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"ec3195dd48660059487cfb670b179e1441831144","isMergeCommit":true,"messageTitle":"resolving conflicts for Level-9","messageBody":"","tags":["level-9"],"fileTypesAndContributionMap":{}},{"hash":"34d39ffd4bbe10bc67c8c0d733941ea454b950f9","isMergeCommit":false,"messageTitle":"refactored files, modified and added JavaDocs","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":2},"txt":{"insertions":2,"deletions":0},"java":{"insertions":50,"deletions":36},"bat":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}}]},{"date":"2023-09-10","commitResults":[{"hash":"d9f89184d99c51d5e08d308d89b77dbf826d4f11","isMergeCommit":false,"messageTitle":"Level 10. GUI","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":15,"deletions":0},"txt":{"insertions":0,"deletions":2},"java":{"insertions":324,"deletions":169}}},{"hash":"e77b6fcc8f4dd47ca69c9be7d60279b4c96e44c5","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-10\u0027","messageBody":"","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"WinSheng1":{"java":1186,"md":2,"fxml":0,"sh":0,"bat":1,"gradle":16,"txt":4}},"authorContributionVariance":{"WinSheng1":43879.535},"authorDisplayNameMap":{"WinSheng1":"CS2103T-W15-3 LIM ..HENG"}} diff --git a/ZD292_ip_master/authorship.json b/ZD292_ip_master/authorship.json index cfc9e42b..9046a5b4 100644 --- a/ZD292_ip_master/authorship.json +++ b/ZD292_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"# Duke project template","lastModifiedDate":"2020-05-25"},{"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":"ZD292"},"content":"1. Open Intellij (if you are not in the welcome screen, click `Records` \u003e `Close Project` to close the existing project first)","lastModifiedDate":"2023-08-31"},{"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":"-"},"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":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":{"ZD292":1,"-":23}},{"path":"build.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"plugins {","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"ZD292"},"content":"// id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"-"},"content":" id \u0027java\u0027","lastModifiedDate":"2020-05-25"},{"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":"ZD292"},"content":"//checkstyle {","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"ZD292"},"content":"// toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"ZD292"},"content":"//}","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":18,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":19,"author":{"gitId":"ZD292"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"ZD292"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"ZD292"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"ZD292"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"ZD292"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"ZD292"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"ZD292"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"ZD292"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"ZD292"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"ZD292"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"ZD292"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"ZD292"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"ZD292"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-04"},{"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":"-"},"content":" mainClass.set(\"seedu.duke.Duke\")","lastModifiedDate":"2023-08-05"},{"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":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"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":{"ZD292":18,"-":42}},{"path":"duke.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"ZD292"},"content":"T | 0 | hello ","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"ZD292"},"content":"T | 0 | hello","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"ZD292"},"content":"T | 0 | hello","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"ZD292"},"content":"E | 0 | aa | 2023-06-26T06:00 | 2023-06-29T09:00","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"ZD292"},"content":"D | 0 | aa | 2023-06-29T06:00","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"ZD292"},"content":"E | 0 | aa | 2023-06-26T06:00 | 2023-06-29T09:00","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"ZD292"},"content":"E | 0 | aa | 2015-04-24T06:30 | 2015-05-25T07:30","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"ZD292":7}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ZD292"},"content":"package duke;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"ZD292"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"ZD292"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"ZD292"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"ZD292"},"content":"import duke.command.Command;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"ZD292"},"content":"import duke.parser.Parser;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"ZD292"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"ZD292"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"ZD292"},"content":" * Represent the ChatBot.","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"ZD292"},"content":" * Run the ChatBot to intereact with it.","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"ZD292"},"content":" * Contains a list of tasks, TaskList, a user interface Ui, and storage, Storage.","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"ZD292"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"ZD292"},"content":"public class Duke {","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"ZD292"},"content":" private static final String filePath \u003d \"./duke.txt\";","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"ZD292"},"content":" private final Ui ui;","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"ZD292"},"content":" private TaskList tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"ZD292"},"content":" private final Storage storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"ZD292"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"ZD292"},"content":" * Constructs a new ChatBot to chat with.","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"ZD292"},"content":" * @param name Name of the ChatBot","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"ZD292"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"ZD292"},"content":" public Duke(String name) {","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"ZD292"},"content":" this.ui \u003d new Ui(name);","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"ZD292"},"content":" storage \u003d new Storage(filePath);","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"ZD292"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"ZD292"},"content":" tasks \u003d new TaskList(storage.readFile());","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"ZD292"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"ZD292"},"content":" ui.showLoadingError(e);","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"ZD292"},"content":" this.tasks \u003d new TaskList();","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"ZD292"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"ZD292"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"ZD292"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"ZD292"},"content":" * Runs the ChatBot.","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"ZD292"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"ZD292"},"content":" public void run() {","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"ZD292"},"content":" ui.showWelcome();","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"ZD292"},"content":" while (ui.hasNextLine()) {","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"ZD292"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"ZD292"},"content":" String fullCommand \u003d ui.readCommand();","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"ZD292"},"content":" ui.showLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"ZD292"},"content":" Command c \u003d Parser.parse(fullCommand);","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"ZD292"},"content":" c.execute(tasks, ui, storage);","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"ZD292"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"ZD292"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"ZD292"},"content":" } finally {","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"ZD292"},"content":" ui.showLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"ZD292"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"ZD292"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"ZD292"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"ZD292"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"ZD292"},"content":" * @param args Main method to run ChatBot.","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"ZD292"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"ZD292"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"ZD292"},"content":" new Duke(filePath).run();","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"ZD292"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"ZD292"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"ZD292":61}},{"path":"src/main/java/duke/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ZD292"},"content":"package duke;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"ZD292"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"ZD292"},"content":"\tpublic DukeException(String e) {","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"ZD292"},"content":"\t\tsuper(e);","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"ZD292"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"ZD292":6}},{"path":"src/main/java/duke/command/AddCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ZD292"},"content":"package duke.command;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"ZD292"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"ZD292"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"ZD292"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"ZD292"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"ZD292"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"ZD292"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"ZD292"},"content":" * Represents a Command to which adds a tasks when executed.","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"ZD292"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"ZD292"},"content":"public class AddCommand extends Command {","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"ZD292"},"content":"\tprivate final Task task;","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"ZD292"},"content":"\tpublic AddCommand(Task task) {","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"ZD292"},"content":"\t\tthis.task \u003d task;","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"ZD292"},"content":"\t/**","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"ZD292"},"content":"\t * Executes the add command which add the task into taskList.","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"ZD292"},"content":"\t * Ui displays adding to user.","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"ZD292"},"content":"\t * Output of task is stored in Storage which writes to a text file.","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"ZD292"},"content":"\t * @param taskList list of tasks to execute.","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"ZD292"},"content":"\t * @param u displays execution of adding.","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"ZD292"},"content":"\t * @param storage can write tasks to store on the text file.","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"ZD292"},"content":"\t */","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"ZD292"},"content":"\t@Override","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"ZD292"},"content":"\tpublic void execute(TaskList taskList, Ui u, Storage storage) {","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"ZD292"},"content":"\t\ttaskList.addTask(task);","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"ZD292"},"content":"\t\ttry {","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"ZD292"},"content":"\t\t\tstorage.writeFile(task);","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"ZD292"},"content":"\t\t} catch (IOException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"ZD292"},"content":"\t\t\tSystem.out.println(\"Fail to write to file\\n\" + e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"ZD292"},"content":"\t\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"ZD292"},"content":"}","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"ZD292":36}},{"path":"src/main/java/duke/command/ByeCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ZD292"},"content":"package duke.command;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"ZD292"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"ZD292"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"ZD292"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"ZD292"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"ZD292"},"content":" * Command to exit the system and say bye.","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"ZD292"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"ZD292"},"content":"public class ByeCommand extends Command {","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"ZD292"},"content":"\t/**","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"ZD292"},"content":"\t * Executes the bye command which exits system.","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"ZD292"},"content":"\t * Ui displays exiting to user.","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"ZD292"},"content":"\t * @param taskList list of tasks to execute.","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"ZD292"},"content":"\t * @param u displays execution of adding.","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"ZD292"},"content":"\t * @param storage can write tasks to store on the text file.","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"ZD292"},"content":"\t */","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"ZD292"},"content":"\t@Override","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"ZD292"},"content":"\tpublic void execute(TaskList taskList, Ui u, Storage storage) {","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"ZD292"},"content":"\t\tString echo \u003d \"____________________________________________________________\\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\"Bye. Hope to see you again soon!\\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\"____________________________________________________________\";","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"ZD292"},"content":"\t\tSystem.out.println(echo);","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"ZD292"},"content":"\t\t// write to file before leaving the system","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"ZD292"},"content":"\t\tSystem.exit(0);","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"ZD292"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"ZD292":26}},{"path":"src/main/java/duke/command/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ZD292"},"content":"package duke.command;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"ZD292"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"ZD292"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"ZD292"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"ZD292"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"ZD292"},"content":" * Abstract class that represent a Command.","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"ZD292"},"content":" * A Command is an executable that can execute to perform different actions.","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"ZD292"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"ZD292"},"content":"public abstract class Command {","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"ZD292"},"content":"\t// only inheritors can use","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"ZD292"},"content":"\t/**","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"ZD292"},"content":"\t /**","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"ZD292"},"content":"\t * Type of Comomand execution depends on the implementation.","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"ZD292"},"content":"\t * @param taskList list of tasks to execute Command on.","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"ZD292"},"content":"\t * @param u displays execution of Command.","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"ZD292"},"content":"\t * @param storage can write tasks to store to text file depending on Command type.","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"ZD292"},"content":"\t */","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"ZD292"},"content":"\tpublic abstract void execute(TaskList taskList, Ui u, Storage storage);","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"ZD292"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"ZD292":21}},{"path":"src/main/java/duke/command/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ZD292"},"content":"package duke.command;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"ZD292"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"ZD292"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"ZD292"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"ZD292"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"ZD292"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"ZD292"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"ZD292"},"content":" * Commmand to delete a task from the tasklist","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"ZD292"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"ZD292"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"ZD292"},"content":"\tprivate final int pos;","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"ZD292"},"content":"\tpublic DeleteCommand(int pos) {","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"ZD292"},"content":"\t\tthis.pos \u003d pos;","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"ZD292"},"content":"\t/**","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"ZD292"},"content":"\t * Executes the delete command which deletes a task from taskList.","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"ZD292"},"content":"\t * Ui displays deleting to user.","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"ZD292"},"content":"\t * Deletion changes the contents in storage.","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"ZD292"},"content":"\t * @param taskList list of tasks to execute.","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"ZD292"},"content":"\t * @param u displays execution of deleting.","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"ZD292"},"content":"\t * @param storage can write tasks to store on the text file.","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"ZD292"},"content":"\t */","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"ZD292"},"content":"\t@Override","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"ZD292"},"content":"\tpublic void execute(TaskList taskList, Ui u, Storage storage) {","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"ZD292"},"content":"\t\ttry {","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"ZD292"},"content":"\t\t\ttaskList.delete(this.pos);","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"ZD292"},"content":"\t\t} catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"ZD292"},"content":"\t\t\tSystem.out.println(e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"ZD292"},"content":"\t\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"ZD292"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"ZD292":32}},{"path":"src/main/java/duke/command/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ZD292"},"content":"package duke.command;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"ZD292"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"ZD292"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"ZD292"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"ZD292"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"ZD292"},"content":" * Finds Task in taskList according to keyword.","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"ZD292"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"ZD292"},"content":"public class FindCommand extends Command {","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"ZD292"},"content":"\tprivate String keyWord;","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"ZD292"},"content":"\tpublic FindCommand(String keyWord) {","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"ZD292"},"content":"\t\tthis.keyWord \u003d keyWord;","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"ZD292"},"content":"\t/**","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"ZD292"},"content":"\t * Finds the Tasks that contains keywords and prints thenm in a list","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"ZD292"},"content":"\t * @param t list of Task.","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"ZD292"},"content":"\t * @param u Ui to interact with User.","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"ZD292"},"content":"\t * @param s Storage to store Task.","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"ZD292"},"content":"\t */","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"ZD292"},"content":"\t@Override","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"ZD292"},"content":"\tpublic void execute(TaskList t, Ui u, Storage s) {","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"ZD292"},"content":"\t\tt.findTask(this.keyWord);","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"ZD292"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"ZD292":26}},{"path":"src/main/java/duke/command/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ZD292"},"content":"package duke.command;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"ZD292"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"ZD292"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"ZD292"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"ZD292"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"ZD292"},"content":" * Command to list the task in the list of tasks, taskList.","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"ZD292"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"ZD292"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"ZD292"},"content":"\t/**","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"ZD292"},"content":"\t * Executes the list command which lists all tasks from taskList.","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"ZD292"},"content":"\t * Ui displays listing to user.","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"ZD292"},"content":"\t * Storage does not store anything in this case.","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"ZD292"},"content":"\t * @param taskList list of tasks to execute.","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"ZD292"},"content":"\t * @param u displays listing of task in taskList.","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"ZD292"},"content":"\t * @param storage can write tasks to store on the text file.","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"ZD292"},"content":"\t */","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"ZD292"},"content":"\t@Override","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"ZD292"},"content":"\tpublic void execute(TaskList taskList, Ui u, Storage storage) {","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"ZD292"},"content":"\t\ttaskList.list();","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"ZD292"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"ZD292":21}},{"path":"src/main/java/duke/command/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ZD292"},"content":"package duke.command;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"ZD292"},"content":"import duke.DukeException;","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"ZD292"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"ZD292"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"ZD292"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"ZD292"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"ZD292"},"content":" * Command to Mark or Unmark task in the taskList.","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"ZD292"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"ZD292"},"content":"public class MarkCommand extends Command {","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"ZD292"},"content":"\tprivate final boolean toMark;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"ZD292"},"content":"\tprivate final int pos;","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"ZD292"},"content":"\tpublic MarkCommand(boolean toMark, int pos) {","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"ZD292"},"content":"\t\tthis.toMark \u003d toMark;","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"ZD292"},"content":"\t\tthis.pos \u003d pos;","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"ZD292"},"content":"\t/**","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"ZD292"},"content":"\t * Executes the Mark command which Marks or Unmarks a task from taskList.","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"ZD292"},"content":"\t * Ui displays Marking or Unmarks to user.","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"ZD292"},"content":"\t * @param taskList list of tasks to mark.","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"ZD292"},"content":"\t * @param u displays execution of Marking or Unmarking.","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"ZD292"},"content":"\t * @param storage can write tasks to store on the text file.","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"ZD292"},"content":"\t */","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"ZD292"},"content":"\t@Override","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"ZD292"},"content":"\tpublic void execute(TaskList taskList, Ui u, Storage storage) {","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"ZD292"},"content":"\t\ttry {","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"ZD292"},"content":"\t\t\ttaskList.toMark(toMark, pos);","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"ZD292"},"content":"\t\t} catch (DukeException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"ZD292"},"content":"\t\t\tSystem.out.println(e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"ZD292"},"content":"\t\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"ZD292"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"ZD292":33}},{"path":"src/main/java/duke/messages/Messages.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ZD292"},"content":"package duke.messages;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"ZD292"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"ZD292"},"content":" * Represents different commonly used Messages to be printed to user.","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"ZD292"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"ZD292"},"content":"public class Messages {","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"ZD292"},"content":"\tpublic static final String MESSAGE_INVALID_COMMAND_FORMAT \u003d \"Invalid command format \\n%s\";","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"ZD292"},"content":"\tpublic static final String MESSGAE_INIT_FAILED \u003d \"Failed to read duke text storage file: \\n%s\";","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"ZD292"},"content":"\tpublic static final String MESSGAE_USING_STORAGE \u003d \"Using duke text storage file: \\n%s\";","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"ZD292"},"content":"\tpublic static final String MESSGAE_INCORRECT_TIME \u003d \"Enter time formt either like: \\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t+ \"630am 29june or 06:30:00 2023-06-29\";","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"ZD292"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"ZD292":14}},{"path":"src/main/java/duke/parser/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ZD292"},"content":"package duke.parser;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"ZD292"},"content":"import duke.DukeException;","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"ZD292"},"content":"import duke.command.AddCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"ZD292"},"content":"import duke.command.ByeCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"ZD292"},"content":"import duke.command.Command;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"ZD292"},"content":"import duke.command.DeleteCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"ZD292"},"content":"import duke.command.FindCommand;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"ZD292"},"content":"import duke.command.ListCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"ZD292"},"content":"import duke.command.MarkCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"ZD292"},"content":"import duke.task.DeadLine;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"ZD292"},"content":"import duke.task.Event;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"ZD292"},"content":"import duke.task.ToDo;","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"ZD292"},"content":"import java.util.Arrays;","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"ZD292"},"content":"import java.util.Calendar;","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"ZD292"},"content":"import java.util.Date;","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"ZD292"},"content":"import java.text.ParseException;","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"ZD292"},"content":"import java.text.SimpleDateFormat;","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"ZD292"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"ZD292"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"ZD292"},"content":" * Represents a formatting object that formats inputs in known formats.","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"ZD292"},"content":" * Reformats these inputs into different forms depending on the Command.","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"ZD292"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"ZD292"},"content":"public class Parser {","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"ZD292"},"content":"\t/**","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"ZD292"},"content":"\t * Returns the integer value of a month.","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"ZD292"},"content":"\t * @param month String representation of month.","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"ZD292"},"content":"\t * @return Integer representation of month","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"ZD292"},"content":"\t * @throws IllegalArgumentException Throws exception should the month not be recognised.","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"ZD292"},"content":"\t */","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"ZD292"},"content":"\tpublic static String monthValue(String month) throws IllegalArgumentException {","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"ZD292"},"content":"\t\tswitch (month.toLowerCase()) {","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"ZD292"},"content":"\t\t\tcase \"january\":","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"ZD292"},"content":"\t\t\t\treturn \"01\";","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"ZD292"},"content":"\t\t\tcase \"february\":","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"ZD292"},"content":"\t\t\t\treturn \"02\";","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"ZD292"},"content":"\t\t\tcase \"march\":","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"ZD292"},"content":"\t\t\t\treturn \"03\";","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"ZD292"},"content":"\t\t\tcase \"april\":","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"ZD292"},"content":"\t\t\t\treturn \"04\";","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"ZD292"},"content":"\t\t\tcase \"may\":","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"ZD292"},"content":"\t\t\t\treturn \"05\";","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"ZD292"},"content":"\t\t\tcase \"june\":","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"ZD292"},"content":"\t\t\t\treturn \"06\";","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"ZD292"},"content":"\t\t\tcase \"july\":","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"ZD292"},"content":"\t\t\t\treturn \"07\";","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"ZD292"},"content":"\t\t\tcase \"august\":","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"ZD292"},"content":"\t\t\t\treturn \"08\";","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"ZD292"},"content":"\t\t\tcase \"september\":","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"ZD292"},"content":"\t\t\t\treturn \"09\";","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"ZD292"},"content":"\t\t\tcase \"october\":","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"ZD292"},"content":"\t\t\t\treturn \"10\";","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"ZD292"},"content":"\t\t\tcase \"november\":","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"ZD292"},"content":"\t\t\t\treturn \"11\";","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"ZD292"},"content":"\t\t\tcase \"december\":","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"ZD292"},"content":"\t\t\t\treturn \"12\";","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"ZD292"},"content":"\t\t\tdefault:","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"ZD292"},"content":"\t\t\t\tthrow new IllegalArgumentException(\"Invalid month string\");","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"ZD292"},"content":"\t\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"ZD292"},"content":"\t/**","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"ZD292"},"content":"\t * Returns the Date formatted in the form: 2015-02-20T06:30:00.","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"ZD292"},"content":"\t * @param timeDate Array containing time and date at index 0 and 1.","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"ZD292"},"content":"\t * @return Formatted String.","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"ZD292"},"content":"\t */","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"ZD292"},"content":"\tpublic static String formatDate(String[] timeDate) {","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"ZD292"},"content":"\t\tSimpleDateFormat inputTime \u003d new SimpleDateFormat(\"ha\");","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"ZD292"},"content":"\t\tSimpleDateFormat outputTime \u003d new SimpleDateFormat(\"HH:mm:ss\");","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"ZD292"},"content":"\t\tString year \u003d Integer.toString(Calendar.getInstance().get(Calendar.YEAR));","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"ZD292"},"content":"\t\tString dateFormat \u003d \"\";","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"ZD292"},"content":"\t\ttry {","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"ZD292"},"content":"\t\t\tDate time \u003d inputTime.parse(timeDate[0]);","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"ZD292"},"content":"\t\t\tString formatTime \u003d outputTime.format(time);","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"ZD292"},"content":"\t\t\tif (timeDate.length !\u003d 2) {","lastModifiedDate":"2023-09-04"},{"lineNumber":77,"author":{"gitId":"ZD292"},"content":"\t\t\t\tthrow new DukeException(\"Enter time and Date properly\");","lastModifiedDate":"2023-09-04"},{"lineNumber":78,"author":{"gitId":"ZD292"},"content":"\t\t\t}","lastModifiedDate":"2023-09-04"},{"lineNumber":79,"author":{"gitId":"ZD292"},"content":"\t\t\tString dayMonth \u003d timeDate[1];","lastModifiedDate":"2023-09-03"},{"lineNumber":80,"author":{"gitId":"ZD292"},"content":"\t\t\tString day;","lastModifiedDate":"2023-09-03"},{"lineNumber":81,"author":{"gitId":"ZD292"},"content":"\t\t\tString month;","lastModifiedDate":"2023-09-03"},{"lineNumber":82,"author":{"gitId":"ZD292"},"content":"\t\t\ttry {","lastModifiedDate":"2023-09-03"},{"lineNumber":83,"author":{"gitId":"ZD292"},"content":"\t\t\t\tInteger.parseInt(dayMonth.substring(1, 2));","lastModifiedDate":"2023-09-03"},{"lineNumber":84,"author":{"gitId":"ZD292"},"content":"\t\t\t\tday \u003d dayMonth.substring(0,2);","lastModifiedDate":"2023-09-03"},{"lineNumber":85,"author":{"gitId":"ZD292"},"content":"\t\t\t\tmonth \u003d dayMonth.substring(2);","lastModifiedDate":"2023-09-03"},{"lineNumber":86,"author":{"gitId":"ZD292"},"content":"\t\t\t} catch (NumberFormatException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":87,"author":{"gitId":"ZD292"},"content":"\t\t\t\tday \u003d dayMonth.substring(0,1);","lastModifiedDate":"2023-09-03"},{"lineNumber":88,"author":{"gitId":"ZD292"},"content":"\t\t\t\tmonth \u003d dayMonth.substring(1);","lastModifiedDate":"2023-09-03"},{"lineNumber":89,"author":{"gitId":"ZD292"},"content":"\t\t\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":90,"author":{"gitId":"ZD292"},"content":"\t\t\tStringBuilder br \u003d new StringBuilder();","lastModifiedDate":"2023-09-03"},{"lineNumber":91,"author":{"gitId":"ZD292"},"content":"\t\t\tbr.append(year).append(\"-\").append(monthValue(month)).append(\"-\").append(day).append(\"T\").append(formatTime);","lastModifiedDate":"2023-09-03"},{"lineNumber":92,"author":{"gitId":"ZD292"},"content":"\t\t\tdateFormat \u003d br.toString();","lastModifiedDate":"2023-09-03"},{"lineNumber":93,"author":{"gitId":"ZD292"},"content":"\t\t} catch (ParseException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":94,"author":{"gitId":"ZD292"},"content":"\t\t\tSystem.out.println(\"format of time is not right, enter it as /by 630pm 18june\");","lastModifiedDate":"2023-09-03"},{"lineNumber":95,"author":{"gitId":"ZD292"},"content":"\t\t} catch (DukeException d) {","lastModifiedDate":"2023-09-04"},{"lineNumber":96,"author":{"gitId":"ZD292"},"content":"\t\t\tSystem.out.println(d.getMessage());","lastModifiedDate":"2023-09-04"},{"lineNumber":97,"author":{"gitId":"ZD292"},"content":"\t\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":98,"author":{"gitId":"ZD292"},"content":"\t\treturn dateFormat;","lastModifiedDate":"2023-09-03"},{"lineNumber":99,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":100,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":101,"author":{"gitId":"ZD292"},"content":"\t/**","lastModifiedDate":"2023-09-04"},{"lineNumber":102,"author":{"gitId":"ZD292"},"content":"\t * Converts formatted string into a command.","lastModifiedDate":"2023-09-04"},{"lineNumber":103,"author":{"gitId":"ZD292"},"content":"\t * first String array contains description of command.","lastModifiedDate":"2023-09-04"},{"lineNumber":104,"author":{"gitId":"ZD292"},"content":"\t * Accepeted inputs for time are,","lastModifiedDate":"2023-09-04"},{"lineNumber":105,"author":{"gitId":"ZD292"},"content":"\t * /by 06:30:00 2015-06-29","lastModifiedDate":"2023-09-04"},{"lineNumber":106,"author":{"gitId":"ZD292"},"content":"\t * /by 630am or pm 29 june.","lastModifiedDate":"2023-09-04"},{"lineNumber":107,"author":{"gitId":"ZD292"},"content":"\t * @param fullCommand String representing the Command with all details.","lastModifiedDate":"2023-09-04"},{"lineNumber":108,"author":{"gitId":"ZD292"},"content":"\t * @return Command which can be executed.","lastModifiedDate":"2023-09-04"},{"lineNumber":109,"author":{"gitId":"ZD292"},"content":"\t * @throws DukeException If fullCommand does not match any known Command.","lastModifiedDate":"2023-09-04"},{"lineNumber":110,"author":{"gitId":"ZD292"},"content":"\t */","lastModifiedDate":"2023-09-04"},{"lineNumber":111,"author":{"gitId":"ZD292"},"content":"\tpublic static Command parse(String fullCommand) throws DukeException {","lastModifiedDate":"2023-09-03"},{"lineNumber":112,"author":{"gitId":"ZD292"},"content":"\t\tString[] command \u003d fullCommand.split(\" \");","lastModifiedDate":"2023-09-03"},{"lineNumber":113,"author":{"gitId":"ZD292"},"content":"\t\tString commandWord \u003d fullCommand.split(\" \")[0];","lastModifiedDate":"2023-09-03"},{"lineNumber":114,"author":{"gitId":"ZD292"},"content":"\t\tString[] items \u003d fullCommand.split(\"/\");","lastModifiedDate":"2023-09-03"},{"lineNumber":115,"author":{"gitId":"ZD292"},"content":"\t\tString[] first \u003d items[0].split(\" \");","lastModifiedDate":"2023-09-03"},{"lineNumber":116,"author":{"gitId":"ZD292"},"content":"\t\tStringBuilder description \u003d new StringBuilder();","lastModifiedDate":"2023-09-03"},{"lineNumber":117,"author":{"gitId":"ZD292"},"content":"\t\tStringBuilder startTime \u003d new StringBuilder();","lastModifiedDate":"2023-09-03"},{"lineNumber":118,"author":{"gitId":"ZD292"},"content":"\t\tStringBuilder endTime \u003d new StringBuilder();","lastModifiedDate":"2023-09-03"},{"lineNumber":119,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":120,"author":{"gitId":"ZD292"},"content":"\t\tswitch (commandWord) {","lastModifiedDate":"2023-09-03"},{"lineNumber":121,"author":{"gitId":"ZD292"},"content":"\t\t\tcase \"bye\":","lastModifiedDate":"2023-09-03"},{"lineNumber":122,"author":{"gitId":"ZD292"},"content":"\t\t\t\treturn new ByeCommand();","lastModifiedDate":"2023-09-03"},{"lineNumber":123,"author":{"gitId":"ZD292"},"content":"\t\t\tcase \"list\":","lastModifiedDate":"2023-09-03"},{"lineNumber":124,"author":{"gitId":"ZD292"},"content":"\t\t\t\treturn new ListCommand();","lastModifiedDate":"2023-09-03"},{"lineNumber":125,"author":{"gitId":"ZD292"},"content":"\t\t\tcase \"find\":","lastModifiedDate":"2023-09-04"},{"lineNumber":126,"author":{"gitId":"ZD292"},"content":"\t\t\t\ttry {","lastModifiedDate":"2023-09-04"},{"lineNumber":127,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\tif (command.length !\u003d 2) {","lastModifiedDate":"2023-09-04"},{"lineNumber":128,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\tthrow new DukeException(\"Enter the find with one keyword\");","lastModifiedDate":"2023-09-04"},{"lineNumber":129,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t}","lastModifiedDate":"2023-09-04"},{"lineNumber":130,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\tString keyWord \u003d command[1];","lastModifiedDate":"2023-09-04"},{"lineNumber":131,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\treturn new FindCommand(keyWord);","lastModifiedDate":"2023-09-04"},{"lineNumber":132,"author":{"gitId":"ZD292"},"content":"\t\t\t\t} catch (DukeException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":133,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\tSystem.out.println(e.getMessage());","lastModifiedDate":"2023-09-04"},{"lineNumber":134,"author":{"gitId":"ZD292"},"content":"\t\t\t\t}","lastModifiedDate":"2023-09-04"},{"lineNumber":135,"author":{"gitId":"ZD292"},"content":"\t\t\t\tbreak;","lastModifiedDate":"2023-09-04"},{"lineNumber":136,"author":{"gitId":"ZD292"},"content":"\t\t\tcase \"mark\":","lastModifiedDate":"2023-09-03"},{"lineNumber":137,"author":{"gitId":"ZD292"},"content":"\t\t\t\ttry {","lastModifiedDate":"2023-09-03"},{"lineNumber":138,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\tif (command.length !\u003d 2) {","lastModifiedDate":"2023-09-04"},{"lineNumber":139,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\tthrow new DukeException(\"Please specify where to mark\");","lastModifiedDate":"2023-09-04"},{"lineNumber":140,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t}","lastModifiedDate":"2023-09-04"},{"lineNumber":141,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\tint pos \u003d Integer.parseInt(command[1]);","lastModifiedDate":"2023-09-03"},{"lineNumber":142,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\treturn new MarkCommand(true, pos);","lastModifiedDate":"2023-09-03"},{"lineNumber":143,"author":{"gitId":"ZD292"},"content":"\t\t\t\t} catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":144,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\tSystem.out.println(\"Cannot mark given position\\n\" + e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":145,"author":{"gitId":"ZD292"},"content":"\t\t\t\t} catch (NumberFormatException n) {","lastModifiedDate":"2023-09-03"},{"lineNumber":146,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\tSystem.out.println(\"Not a valid position to mark\\n\" + n.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":147,"author":{"gitId":"ZD292"},"content":"\t\t\t\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":148,"author":{"gitId":"ZD292"},"content":"\t\t\t\tbreak;","lastModifiedDate":"2023-09-04"},{"lineNumber":149,"author":{"gitId":"ZD292"},"content":"\t\t\tcase \"unmark\":","lastModifiedDate":"2023-09-03"},{"lineNumber":150,"author":{"gitId":"ZD292"},"content":"\t\t\t\ttry {","lastModifiedDate":"2023-09-03"},{"lineNumber":151,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\tif (command.length !\u003d 2) {","lastModifiedDate":"2023-09-04"},{"lineNumber":152,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\tthrow new DukeException(\"Please specify where to unmark\");","lastModifiedDate":"2023-09-04"},{"lineNumber":153,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t}","lastModifiedDate":"2023-09-04"},{"lineNumber":154,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\tint pos \u003d Integer.parseInt(command[1]);","lastModifiedDate":"2023-09-03"},{"lineNumber":155,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\treturn new MarkCommand(false, pos);","lastModifiedDate":"2023-09-03"},{"lineNumber":156,"author":{"gitId":"ZD292"},"content":"\t\t\t\t} catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":157,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\tSystem.out.println(\"Cannot mark given position\\n\" + e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":158,"author":{"gitId":"ZD292"},"content":"\t\t\t\t} catch (NumberFormatException n) {","lastModifiedDate":"2023-09-03"},{"lineNumber":159,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\tSystem.out.println(\"Not a valid position to mark\\n\" + n.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":160,"author":{"gitId":"ZD292"},"content":"\t\t\t\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":161,"author":{"gitId":"ZD292"},"content":"\t\t\t\tbreak;","lastModifiedDate":"2023-09-04"},{"lineNumber":162,"author":{"gitId":"ZD292"},"content":"\t\t\tcase \"delete\":","lastModifiedDate":"2023-09-03"},{"lineNumber":163,"author":{"gitId":"ZD292"},"content":"\t\t\t\ttry {","lastModifiedDate":"2023-09-03"},{"lineNumber":164,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\tif (command.length !\u003d 2) {","lastModifiedDate":"2023-09-03"},{"lineNumber":165,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\tthrow new DukeException(\"Enter a valid position to delete\");","lastModifiedDate":"2023-09-03"},{"lineNumber":166,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":167,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\tint pos \u003d Integer.parseInt(command[1]) - 1;","lastModifiedDate":"2023-09-03"},{"lineNumber":168,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\treturn new DeleteCommand(pos);","lastModifiedDate":"2023-09-03"},{"lineNumber":169,"author":{"gitId":"ZD292"},"content":"\t\t\t\t} catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":170,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\tSystem.out.println(\"Trying to delete from an invalid index\\n\" + e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":171,"author":{"gitId":"ZD292"},"content":"\t\t\t\t} catch (DukeException d) {","lastModifiedDate":"2023-09-03"},{"lineNumber":172,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\tSystem.out.println(d.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":173,"author":{"gitId":"ZD292"},"content":"\t\t\t\t} catch (NumberFormatException n) {","lastModifiedDate":"2023-09-03"},{"lineNumber":174,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\tSystem.out.println(\"The delete argument is not recognise as an integer\\n\" + n.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":175,"author":{"gitId":"ZD292"},"content":"\t\t\t\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":176,"author":{"gitId":"ZD292"},"content":"\t\t\t\tbreak;","lastModifiedDate":"2023-09-04"},{"lineNumber":177,"author":{"gitId":"ZD292"},"content":"\t\t\tcase \"todo\":","lastModifiedDate":"2023-09-03"},{"lineNumber":178,"author":{"gitId":"ZD292"},"content":"\t\t\t\ttry {","lastModifiedDate":"2023-09-03"},{"lineNumber":179,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\tif (command.length \u003d\u003d 1) {","lastModifiedDate":"2023-09-03"},{"lineNumber":180,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\tthrow new DukeException(\"Enter todo with a description!\");","lastModifiedDate":"2023-09-03"},{"lineNumber":181,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":182,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\tfor (String s : Arrays.copyOfRange(command, 1, command.length)) {","lastModifiedDate":"2023-09-03"},{"lineNumber":183,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\tdescription.append(s);","lastModifiedDate":"2023-09-03"},{"lineNumber":184,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\tdescription.append(\" \");","lastModifiedDate":"2023-09-03"},{"lineNumber":185,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":186,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\tdescription.deleteCharAt(description.length() - 1);","lastModifiedDate":"2023-09-03"},{"lineNumber":187,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\treturn new AddCommand(new ToDo(description.toString()));","lastModifiedDate":"2023-09-04"},{"lineNumber":188,"author":{"gitId":"ZD292"},"content":"\t\t\t\t} catch (DukeException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":189,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\tSystem.out.println(e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":190,"author":{"gitId":"ZD292"},"content":"\t\t\t\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":191,"author":{"gitId":"ZD292"},"content":"\t\t\t\tbreak;","lastModifiedDate":"2023-09-04"},{"lineNumber":192,"author":{"gitId":"ZD292"},"content":"\t\t\tcase \"deadline\":","lastModifiedDate":"2023-09-03"},{"lineNumber":193,"author":{"gitId":"ZD292"},"content":"\t\t\t\ttry {","lastModifiedDate":"2023-09-03"},{"lineNumber":194,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\tif (items.length !\u003d 2) {","lastModifiedDate":"2023-09-04"},{"lineNumber":195,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\tthrow new DukeException(\"enter deadline like this, deadline description /by:\");","lastModifiedDate":"2023-09-03"},{"lineNumber":196,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":197,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\tString[] byCheck \u003d items[1].split(\" \");","lastModifiedDate":"2023-09-04"},{"lineNumber":198,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\tif (!byCheck[0].equals(\"by\")) {","lastModifiedDate":"2023-09-04"},{"lineNumber":199,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\tthrow new DukeException(\"enter deadline like this, deadline description /by: enter the by!\");","lastModifiedDate":"2023-09-04"},{"lineNumber":200,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t}","lastModifiedDate":"2023-09-04"},{"lineNumber":201,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\tString[] start \u003d items[0].split(\" \");","lastModifiedDate":"2023-09-03"},{"lineNumber":202,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\tif (start.length \u003d\u003d 1) {","lastModifiedDate":"2023-09-04"},{"lineNumber":203,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\tthrow new DukeException(\"enter deadline with description\");","lastModifiedDate":"2023-09-04"},{"lineNumber":204,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t}","lastModifiedDate":"2023-09-04"},{"lineNumber":205,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\tfor (String s : Arrays.copyOfRange(start, 1, start.length)) {","lastModifiedDate":"2023-09-03"},{"lineNumber":206,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\tdescription.append(s).append(\" \");","lastModifiedDate":"2023-09-03"},{"lineNumber":207,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":208,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\tdescription.deleteCharAt(description.length() - 1);","lastModifiedDate":"2023-09-03"},{"lineNumber":209,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\tif (items[1].contains(\"am\") || items[1].contains(\"pm\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":210,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\tString[] timeDate \u003d Arrays.copyOfRange(items[1].split(\" \"), 1, items[1].split(\" \").length);","lastModifiedDate":"2023-09-03"},{"lineNumber":211,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\tif (timeDate.length !\u003d 2) {","lastModifiedDate":"2023-09-04"},{"lineNumber":212,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\t\tthrow new DukeException(\"Enter time and date properly\");","lastModifiedDate":"2023-09-04"},{"lineNumber":213,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\t}","lastModifiedDate":"2023-09-04"},{"lineNumber":214,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\tString dateFormat \u003d formatDate(timeDate);","lastModifiedDate":"2023-09-03"},{"lineNumber":215,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\tLocalDateTime begin \u003d LocalDateTime.parse(dateFormat);","lastModifiedDate":"2023-09-03"},{"lineNumber":216,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\treturn new AddCommand(new DeadLine(description.toString(), begin));","lastModifiedDate":"2023-09-04"},{"lineNumber":217,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t} else {","lastModifiedDate":"2023-09-03"},{"lineNumber":218,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\tString[] time \u003d Arrays.copyOfRange(items[1].split(\" \"), 1, 3);","lastModifiedDate":"2023-09-03"},{"lineNumber":219,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\tstartTime.append(time[1]).append(\"T\").append(time[0]);","lastModifiedDate":"2023-09-03"},{"lineNumber":220,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\tLocalDateTime begin \u003d LocalDateTime.parse(startTime.toString());","lastModifiedDate":"2023-09-03"},{"lineNumber":221,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\treturn new AddCommand(new DeadLine(description.toString(), begin));","lastModifiedDate":"2023-09-04"},{"lineNumber":222,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":223,"author":{"gitId":"ZD292"},"content":"\t\t\t\t} catch (DukeException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":224,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\tSystem.out.println(e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":225,"author":{"gitId":"ZD292"},"content":"\t\t\t\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":226,"author":{"gitId":"ZD292"},"content":"\t\t\t\tbreak;","lastModifiedDate":"2023-09-04"},{"lineNumber":227,"author":{"gitId":"ZD292"},"content":"\t\t\tcase \"event\":","lastModifiedDate":"2023-09-03"},{"lineNumber":228,"author":{"gitId":"ZD292"},"content":"\t\t\t\ttry {","lastModifiedDate":"2023-09-03"},{"lineNumber":229,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\tif (items.length !\u003d 3) {","lastModifiedDate":"2023-09-04"},{"lineNumber":230,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\tthrow new DukeException(\"enter event properly, event description /from /to\");","lastModifiedDate":"2023-09-04"},{"lineNumber":231,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t}","lastModifiedDate":"2023-09-04"},{"lineNumber":232,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\tString[] startCheck \u003d items[1].split(\" \");","lastModifiedDate":"2023-09-03"},{"lineNumber":233,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\tString[] endCheck \u003d items[2].split(\" \");","lastModifiedDate":"2023-09-03"},{"lineNumber":234,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\tif (!endCheck[0].equals(\"to\") || !startCheck[0].equals(\"from\")) {","lastModifiedDate":"2023-09-04"},{"lineNumber":235,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\tthrow new DukeException(\"enter event properly, event description /from /to\");","lastModifiedDate":"2023-09-03"},{"lineNumber":236,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":237,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\tfor (String s : Arrays.copyOfRange(first, 1, first.length)) {","lastModifiedDate":"2023-09-03"},{"lineNumber":238,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\tdescription.append(s).append(\" \");","lastModifiedDate":"2023-09-03"},{"lineNumber":239,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":240,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\tdescription.deleteCharAt(description.length() - 1);","lastModifiedDate":"2023-09-03"},{"lineNumber":241,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\tif (items[1].contains(\"am\") || items[1].contains(\"pm\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":242,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\tString[] fromTimeStart \u003d items[1].split(\" \");","lastModifiedDate":"2023-09-04"},{"lineNumber":243,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\tString[] byTimeEnd \u003d items[2].split(\" \");","lastModifiedDate":"2023-09-04"},{"lineNumber":244,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\tif (fromTimeStart.length !\u003d 3 || byTimeEnd.length !\u003d 3) {","lastModifiedDate":"2023-09-04"},{"lineNumber":245,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\t\tthrow new DukeException(\"Enter Event properly\");","lastModifiedDate":"2023-09-04"},{"lineNumber":246,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\t}","lastModifiedDate":"2023-09-04"},{"lineNumber":247,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\tString[] timeDateStart \u003d Arrays.copyOfRange(fromTimeStart, 1, fromTimeStart.length);","lastModifiedDate":"2023-09-04"},{"lineNumber":248,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\tString dateFormatStart \u003d formatDate(timeDateStart);","lastModifiedDate":"2023-09-03"},{"lineNumber":249,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\tLocalDateTime begin \u003d LocalDateTime.parse(dateFormatStart);","lastModifiedDate":"2023-09-03"},{"lineNumber":250,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\tString[] timeDateEnd \u003d Arrays.copyOfRange(byTimeEnd, 1, byTimeEnd.length);","lastModifiedDate":"2023-09-04"},{"lineNumber":251,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\tString dateFormatEnd \u003d formatDate(timeDateEnd);","lastModifiedDate":"2023-09-03"},{"lineNumber":252,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\tLocalDateTime end \u003d LocalDateTime.parse(dateFormatEnd);","lastModifiedDate":"2023-09-03"},{"lineNumber":253,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\tif (begin.isAfter(end)) {","lastModifiedDate":"2023-09-03"},{"lineNumber":254,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\t\tthrow new DukeException(\"Start is after end!\");","lastModifiedDate":"2023-09-03"},{"lineNumber":255,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":256,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\treturn new AddCommand(new Event(description.toString(), begin, end));","lastModifiedDate":"2023-09-03"},{"lineNumber":257,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t} else {","lastModifiedDate":"2023-09-03"},{"lineNumber":258,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\tString[] timeStart \u003d Arrays.copyOfRange(items[1].split(\" \"), 1, 3);","lastModifiedDate":"2023-09-03"},{"lineNumber":259,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\tstartTime.append(timeStart[1]).append(\"T\").append(timeStart[0]);","lastModifiedDate":"2023-09-03"},{"lineNumber":260,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\tSystem.out.println(startTime.toString());","lastModifiedDate":"2023-09-03"},{"lineNumber":261,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\tLocalDateTime begin \u003d LocalDateTime.parse(startTime.toString());","lastModifiedDate":"2023-09-03"},{"lineNumber":262,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":263,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\tString[] timeEnd \u003d Arrays.copyOfRange(items[2].split(\" \"), 1, 3);","lastModifiedDate":"2023-09-03"},{"lineNumber":264,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\tendTime.append(timeEnd[1]).append(\"T\").append(timeEnd[0]);","lastModifiedDate":"2023-09-03"},{"lineNumber":265,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\tLocalDateTime end \u003d LocalDateTime.parse(endTime.toString());","lastModifiedDate":"2023-09-03"},{"lineNumber":266,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\tif (begin.isAfter(end)) {","lastModifiedDate":"2023-09-03"},{"lineNumber":267,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\t\tthrow new DukeException(\"Start is after end!\");","lastModifiedDate":"2023-09-03"},{"lineNumber":268,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":269,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\treturn new AddCommand(new Event(description.toString(), begin, end));","lastModifiedDate":"2023-09-03"},{"lineNumber":270,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":271,"author":{"gitId":"ZD292"},"content":"\t\t\t\t} catch (DukeException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":272,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\tSystem.out.println(e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":273,"author":{"gitId":"ZD292"},"content":"\t\t\t\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":274,"author":{"gitId":"ZD292"},"content":"\t\t\t\tbreak;","lastModifiedDate":"2023-09-04"},{"lineNumber":275,"author":{"gitId":"ZD292"},"content":"\t\t\tdefault:","lastModifiedDate":"2023-09-03"},{"lineNumber":276,"author":{"gitId":"ZD292"},"content":"\t\t\t\tthrow new DukeException(\"Invalid command that do not match any known command\");","lastModifiedDate":"2023-09-03"},{"lineNumber":277,"author":{"gitId":"ZD292"},"content":"\t\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":278,"author":{"gitId":"ZD292"},"content":"\t\tthrow new DukeException(\"Invalid command does not match any known command\");","lastModifiedDate":"2023-09-04"},{"lineNumber":279,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":280,"author":{"gitId":"ZD292"},"content":"}","lastModifiedDate":"2023-09-03"},{"lineNumber":281,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"ZD292":281}},{"path":"src/main/java/duke/storage/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ZD292"},"content":"package duke.storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"ZD292"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"ZD292"},"content":"import duke.task.ToDo;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"ZD292"},"content":"import duke.task.DeadLine;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"ZD292"},"content":"import duke.task.Event;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"ZD292"},"content":"import java.io.BufferedReader;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"ZD292"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"ZD292"},"content":"import java.io.FileReader;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"ZD292"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"ZD292"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"ZD292"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"ZD292"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"ZD292"},"content":" * Represents te computer storage system.","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"ZD292"},"content":" * Able to write Task to storage text file through writeFile method.","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"ZD292"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"ZD292"},"content":"public class Storage {","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"ZD292"},"content":"\tprivate String filePath;","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"ZD292"},"content":"\tprivate ArrayList\u003cTask\u003e taskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"ZD292"},"content":"\tpublic Storage(String filePath) {","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"ZD292"},"content":"\t\tthis.filePath \u003d filePath;","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"ZD292"},"content":"\t\tthis.taskList \u003d new ArrayList\u003cTask\u003e(100);","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"ZD292"},"content":"\t/**","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"ZD292"},"content":"\t * Writes Task into text file.","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"ZD292"},"content":"\t * Creates text file if it does not exist.","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"ZD292"},"content":"\t * @param task Thing to be done.","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"ZD292"},"content":"\t * @throws IOException If unable to write file.","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"ZD292"},"content":"\t */","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"ZD292"},"content":"\tpublic void writeFile(Task task) throws IOException {","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"ZD292"},"content":"\t\ttry {","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"ZD292"},"content":"\t\t\tFileWriter fw \u003d new FileWriter(filePath, true);","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"ZD292"},"content":"\t\t\t\tfw.write(task.writeToFile());","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"ZD292"},"content":"\t\t\t\tfw.write(\"\\n\");","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"ZD292"},"content":"\t\t\tfw.close();","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"ZD292"},"content":"\t\t} catch (IOException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"ZD292"},"content":"\t\t\tthrow new IOException(\"write fail\");","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"ZD292"},"content":"\t\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"ZD292"},"content":"\t/**","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"ZD292"},"content":"\t * Reads stored text file line by line.","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"ZD292"},"content":"\t * @return ArrayList of Task.","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"ZD292"},"content":"\t * @throws IOException If unable to read lines in text file.","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"ZD292"},"content":"\t */","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"ZD292"},"content":"\tpublic ArrayList\u003cTask\u003e readFile() throws IOException {","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"ZD292"},"content":"\t\ttry (BufferedReader in \u003d new BufferedReader(new FileReader(filePath))) {","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"ZD292"},"content":"\t\t\tStringBuilder br \u003d new StringBuilder();","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"ZD292"},"content":"\t\t\tString fileLine;","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"ZD292"},"content":"\t\t\twhile ((fileLine \u003d in.readLine()) !\u003d null) {","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"ZD292"},"content":"\t\t\t\t// append raw unformatted version","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"ZD292"},"content":"\t\t\t\tbr.append(fileLine);","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"ZD292"},"content":"\t\t\t\tbr.append(\"\\n\");","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"ZD292"},"content":"\t\t\t\treadTask(fileLine);","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"ZD292"},"content":"\t\t\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"ZD292"},"content":"\t\t} catch (IOException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"ZD292"},"content":"\t\t\tSystem.out.println(e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"ZD292"},"content":"\t\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"ZD292"},"content":"\t\treturn taskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"ZD292"},"content":"\t// the file stored needs to be reformatted","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"ZD292"},"content":"\t/**","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"ZD292"},"content":"\t * Converts each line into the format shown to reader.","lastModifiedDate":"2023-09-04"},{"lineNumber":72,"author":{"gitId":"ZD292"},"content":"\t * @param fileLine Each line in the file.","lastModifiedDate":"2023-09-04"},{"lineNumber":73,"author":{"gitId":"ZD292"},"content":"\t * @throws IOException If unable to read task in file as Deadline[D], Event[E] or ToDos[T].","lastModifiedDate":"2023-09-04"},{"lineNumber":74,"author":{"gitId":"ZD292"},"content":"\t */","lastModifiedDate":"2023-09-04"},{"lineNumber":75,"author":{"gitId":"ZD292"},"content":"\tpublic void readTask(String fileLine) throws IOException {","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"ZD292"},"content":"\t\tString[] str \u003d fileLine.split(\"\\\\|\");","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"ZD292"},"content":"\t\tfor (int i \u003d 0; i \u003c str.length; i++) {","lastModifiedDate":"2023-09-03"},{"lineNumber":78,"author":{"gitId":"ZD292"},"content":"\t\t\tString s \u003d str[i].trim();","lastModifiedDate":"2023-09-03"},{"lineNumber":79,"author":{"gitId":"ZD292"},"content":"\t\t\tstr[i] \u003d s;","lastModifiedDate":"2023-09-03"},{"lineNumber":80,"author":{"gitId":"ZD292"},"content":"\t\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":81,"author":{"gitId":"ZD292"},"content":"\t\tStringBuilder br \u003d new StringBuilder();","lastModifiedDate":"2023-09-03"},{"lineNumber":82,"author":{"gitId":"ZD292"},"content":"\t\tString taskType \u003d str[0];","lastModifiedDate":"2023-09-03"},{"lineNumber":83,"author":{"gitId":"ZD292"},"content":"\t\tString isDone \u003d str[1];","lastModifiedDate":"2023-09-03"},{"lineNumber":84,"author":{"gitId":"ZD292"},"content":"\t\tswitch(taskType) {","lastModifiedDate":"2023-09-03"},{"lineNumber":85,"author":{"gitId":"ZD292"},"content":"\t\t\tcase \"T\":","lastModifiedDate":"2023-09-03"},{"lineNumber":86,"author":{"gitId":"ZD292"},"content":"\t\t\t\ttaskList.add(new ToDo(str[2]));","lastModifiedDate":"2023-09-04"},{"lineNumber":87,"author":{"gitId":"ZD292"},"content":"\t\t\t\tbreak;","lastModifiedDate":"2023-09-03"},{"lineNumber":88,"author":{"gitId":"ZD292"},"content":"\t\t\tcase \"D\":","lastModifiedDate":"2023-09-03"},{"lineNumber":89,"author":{"gitId":"ZD292"},"content":"\t\t\t\tLocalDateTime startTime \u003d LocalDateTime.parse(str[3]);","lastModifiedDate":"2023-09-03"},{"lineNumber":90,"author":{"gitId":"ZD292"},"content":"\t\t\t\ttaskList.add(new DeadLine(str[2], startTime));","lastModifiedDate":"2023-09-04"},{"lineNumber":91,"author":{"gitId":"ZD292"},"content":"\t\t\t\t// t.add(new Deadline(str[2], str[3]));","lastModifiedDate":"2023-09-03"},{"lineNumber":92,"author":{"gitId":"ZD292"},"content":"\t\t\t\tbreak;","lastModifiedDate":"2023-09-03"},{"lineNumber":93,"author":{"gitId":"ZD292"},"content":"\t\t\tcase \"E\":","lastModifiedDate":"2023-09-03"},{"lineNumber":94,"author":{"gitId":"ZD292"},"content":"\t\t\t\tLocalDateTime start \u003d LocalDateTime.parse(str[3]);","lastModifiedDate":"2023-09-03"},{"lineNumber":95,"author":{"gitId":"ZD292"},"content":"\t\t\t\tLocalDateTime end \u003d LocalDateTime.parse(str[4]);","lastModifiedDate":"2023-09-03"},{"lineNumber":96,"author":{"gitId":"ZD292"},"content":"\t\t\t\ttaskList.add(new Event(str[2], start, end));","lastModifiedDate":"2023-09-03"},{"lineNumber":97,"author":{"gitId":"ZD292"},"content":"\t\t\t\tbreak;","lastModifiedDate":"2023-09-03"},{"lineNumber":98,"author":{"gitId":"ZD292"},"content":"\t\t\tdefault:","lastModifiedDate":"2023-09-03"},{"lineNumber":99,"author":{"gitId":"ZD292"},"content":"\t\t\t\tthrow new IOException(\"read fail\");","lastModifiedDate":"2023-09-03"},{"lineNumber":100,"author":{"gitId":"ZD292"},"content":"\t\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":101,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":102,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":103,"author":{"gitId":"ZD292"},"content":"\t/**","lastModifiedDate":"2023-09-04"},{"lineNumber":104,"author":{"gitId":"ZD292"},"content":"\t * Deletes tasks from taskList.","lastModifiedDate":"2023-09-04"},{"lineNumber":105,"author":{"gitId":"ZD292"},"content":"\t * @param i Position of tasks to be deleted.","lastModifiedDate":"2023-09-04"},{"lineNumber":106,"author":{"gitId":"ZD292"},"content":"\t */","lastModifiedDate":"2023-09-04"},{"lineNumber":107,"author":{"gitId":"ZD292"},"content":"\tpublic void deleteTask(int i) {","lastModifiedDate":"2023-09-03"},{"lineNumber":108,"author":{"gitId":"ZD292"},"content":"\t\ttaskList.remove(i - 1);","lastModifiedDate":"2023-09-04"},{"lineNumber":109,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":110,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":111,"author":{"gitId":"ZD292"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"ZD292":111}},{"path":"src/main/java/duke/task/DeadLine.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ZD292"},"content":"package duke.task;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"ZD292"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"ZD292"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"ZD292"},"content":" * Represents a Deadline Task which.","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"ZD292"},"content":" * Has a description and Deadline endTime.","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"ZD292"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"ZD292"},"content":"public class DeadLine extends Task {","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"ZD292"},"content":"\tprivate final LocalDateTime endTime;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"ZD292"},"content":"\t/**","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"ZD292"},"content":"\t * Represents a DeadLine Task.","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"ZD292"},"content":"\t * @param description Describes the Task.","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"ZD292"},"content":"\t * @param endTime By what time must I complete this DeadLine Task.","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"ZD292"},"content":"\t */","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"ZD292"},"content":"\tpublic DeadLine(String description, LocalDateTime endTime) {","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"ZD292"},"content":"\t\tsuper(description);","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"ZD292"},"content":"\t\tthis.endTime \u003d endTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"ZD292"},"content":"\t/**","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"ZD292"},"content":"\t * Returns a String to be written into Storage.","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"ZD292"},"content":"\t * @return Reformatted String suitable for Storage.","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"ZD292"},"content":"\t */","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"ZD292"},"content":"\t@Override","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"ZD292"},"content":"\tpublic String writeToFile() {","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"ZD292"},"content":"\t\tStringBuilder b \u003d new StringBuilder();","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"ZD292"},"content":"\t\tb.append(\"D\" + \" | \");","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"ZD292"},"content":"\t\tif (this.isDone) {","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"ZD292"},"content":"\t\t\tb.append(\"1\" + \" | \");","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"ZD292"},"content":"\t\t} else {","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"ZD292"},"content":"\t\t\tb.append(\"0\" + \" | \");","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"ZD292"},"content":"\t\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"ZD292"},"content":"\t\tb.append(this.description).append(\" | \");","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"ZD292"},"content":"\t\tb.append(this.endTime.toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"ZD292"},"content":"\t\treturn b.toString();","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"ZD292"},"content":"\t/**","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"ZD292"},"content":"\t * @return String representation of DeadLine.","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"ZD292"},"content":"\t */","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"ZD292"},"content":"\t@Override","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"ZD292"},"content":"\tpublic String toString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"ZD292"},"content":"\t\tString[] time \u003d this.endTime.toString().split(\"T\");","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"ZD292"},"content":"\t\tString timeDate \u003d time[1] + \" \" + time[0];","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"ZD292"},"content":"\t\treturn \"[D]\" + super.toString() + \" (by: \" + timeDate + \")\";","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"ZD292"},"content":"\tpublic String getIcon() {","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"ZD292"},"content":"\t\treturn \"[D]\" + super.getTask();","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"ZD292"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"ZD292":52}},{"path":"src/main/java/duke/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ZD292"},"content":"package duke.task;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"ZD292"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"ZD292"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"ZD292"},"content":" * Represents an Event Task.","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"ZD292"},"content":" * Has a description, startTime and endTime.","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"ZD292"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"ZD292"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"ZD292"},"content":"\tprivate final LocalDateTime startTime;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"ZD292"},"content":"\tprivate final LocalDateTime endTime;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"ZD292"},"content":"\t/**","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"ZD292"},"content":"\t * Represents an Event Task.","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"ZD292"},"content":"\t * @param description Describes the Event.","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"ZD292"},"content":"\t * @param startTime Time Event starts.","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"ZD292"},"content":"\t * @param endTime Time Event ends.","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"ZD292"},"content":"\t */","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"ZD292"},"content":"\tpublic Event(String description, LocalDateTime startTime, LocalDateTime endTime) {","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"ZD292"},"content":"\t\tsuper(description);","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"ZD292"},"content":"\t\tthis.startTime \u003d startTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"ZD292"},"content":"\t\tthis.endTime \u003d endTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"ZD292"},"content":"\t/**","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"ZD292"},"content":"\t * Returns a String to be written into Storage.","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"ZD292"},"content":"\t * @return Reformatted String suitable for Storage.","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"ZD292"},"content":"\t */","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"ZD292"},"content":"\t@Override","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"ZD292"},"content":"\tpublic String writeToFile() {","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"ZD292"},"content":"\t\tStringBuilder b \u003d new StringBuilder();","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"ZD292"},"content":"\t\tb.append(\"E\" + \" | \");","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"ZD292"},"content":"\t\tif (this.isDone) {","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"ZD292"},"content":"\t\t\tb.append(\"1\" + \" | \");","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"ZD292"},"content":"\t\t} else {","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"ZD292"},"content":"\t\t\tb.append(\"0\" + \" | \");","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"ZD292"},"content":"\t\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"ZD292"},"content":"\t\tb.append(this.description).append(\" | \");","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"ZD292"},"content":"\t\tb.append(this.startTime).append(\" | \").append(this.endTime);","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"ZD292"},"content":"\t\treturn b.toString();","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"ZD292"},"content":"\t/**","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"ZD292"},"content":"\t * @return String representation of Event.","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"ZD292"},"content":"\t */","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"ZD292"},"content":"\t@Override","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"ZD292"},"content":"\tpublic String toString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"ZD292"},"content":"\t\tString[] start \u003d this.startTime.toString().split(\"T\");","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"ZD292"},"content":"\t\tString startDate \u003d start[1] + \" \" + start[0];","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"ZD292"},"content":"\t\tString[] end \u003d this.endTime.toString().split(\"T\");","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"ZD292"},"content":"\t\tString endDate \u003d end[1] + \" \" + end[0];","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"ZD292"},"content":"\t\treturn \"[E]\" + super.toString() + \" (from: \" + startDate + \" to: \" + endDate + \")\";","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"ZD292"},"content":"\tpublic String getIcon() {","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"ZD292"},"content":"\t\treturn \"[E]\" + super.getTask();","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"ZD292"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"ZD292":58}},{"path":"src/main/java/duke/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ZD292"},"content":"package duke.task;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"ZD292"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"ZD292"},"content":" * Represents a Task.","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"ZD292"},"content":" * Task can be marked as done or unmarked.","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"ZD292"},"content":" * Can be written to Storage.","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"ZD292"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"ZD292"},"content":"public class Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"ZD292"},"content":"\tprotected String description;","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"ZD292"},"content":"\tprotected boolean isDone;","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"ZD292"},"content":"\t/**","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"ZD292"},"content":"\t * Represents the Task.","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"ZD292"},"content":"\t * @param description Describes the Task.","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"ZD292"},"content":"\t */","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"ZD292"},"content":"\tpublic Task(String description) {","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"ZD292"},"content":"\t\tthis.description \u003d description;","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"ZD292"},"content":"\t\tthis.isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"ZD292"},"content":"\t/**","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"ZD292"},"content":"\t * Marks Task as done.","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"ZD292"},"content":"\t */","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"ZD292"},"content":"\tpublic void markAsDone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"ZD292"},"content":"\t\tthis.isDone \u003d true;","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"ZD292"},"content":"\t/**","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"ZD292"},"content":"\t * Unmarks the Task.","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"ZD292"},"content":"\t */","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"ZD292"},"content":"\tpublic void unMark() {","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"ZD292"},"content":"\t\tthis.isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"ZD292"},"content":"\t/**","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"ZD292"},"content":"\t * @return String Representation of whether Task is done or not.","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"ZD292"},"content":"\t */","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"ZD292"},"content":"\tpublic String getTask() {","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"ZD292"},"content":"\t\treturn isDone ? \"[X]\" : \"[ ]\";","lastModifiedDate":"2023-08-24"},{"lineNumber":42,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-08-24"},{"lineNumber":43,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"ZD292"},"content":"\t/**","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"ZD292"},"content":"\t * @return String representation of Task to be written to text file.","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"ZD292"},"content":"\t */","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"ZD292"},"content":"\tpublic String writeToFile() {","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"ZD292"},"content":"\t\treturn \"\";","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"ZD292"},"content":"\t/**","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"ZD292"},"content":" \t * @return String representation of Task.","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"ZD292"},"content":"\t */","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"ZD292"},"content":"\t@Override","lastModifiedDate":"2023-08-24"},{"lineNumber":55,"author":{"gitId":"ZD292"},"content":"\tpublic String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":56,"author":{"gitId":"ZD292"},"content":"\t\treturn isDone ? \"[X]\" + \" \" + this.description : \"[ ]\" + \" \" + this.description;","lastModifiedDate":"2023-08-24"},{"lineNumber":57,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-08-24"},{"lineNumber":58,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":59,"author":{"gitId":"ZD292"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"ZD292":59}},{"path":"src/main/java/duke/task/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ZD292"},"content":"package duke.task;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"ZD292"},"content":"import duke.DukeException;","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"ZD292"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"ZD292"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"ZD292"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"ZD292"},"content":" * Represents a List of Task.","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"ZD292"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"ZD292"},"content":"public class TaskList {","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"ZD292"},"content":"\tprivate ArrayList\u003cTask\u003e taskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"ZD292"},"content":"\t/**","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"ZD292"},"content":"\t * @param taskList Represents the list of Task.","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"ZD292"},"content":"\t */","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"ZD292"},"content":"\tpublic TaskList(ArrayList\u003cTask\u003e taskList) {","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"ZD292"},"content":"\t\tthis.taskList \u003d taskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"ZD292"},"content":"\t/**","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"ZD292"},"content":"\t * Initialises a new arrayList to store Task.","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"ZD292"},"content":"\t */","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"ZD292"},"content":"\tpublic TaskList() {","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"ZD292"},"content":"\t\tthis.taskList \u003d new ArrayList\u003cTask\u003e(100);","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"ZD292"},"content":"\t/**","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"ZD292"},"content":"\t * Add task to list.","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"ZD292"},"content":"\t * @param t Task to be added.","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"ZD292"},"content":"\t */","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"ZD292"},"content":"\tpublic void add(Task t) {","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"ZD292"},"content":"\t\ttaskList.add(t);","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"ZD292"},"content":"\t/**","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"ZD292"},"content":"\t * List all task in taskList in numbered format.","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"ZD292"},"content":"\t */","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"ZD292"},"content":"\tpublic void list() {","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"ZD292"},"content":"\t\tString lst \u003d \"\";","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"ZD292"},"content":"\t\tStringBuilder br \u003d new StringBuilder();","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"ZD292"},"content":"\t\tfor (int i \u003d 0; i \u003c taskList.size(); i++) {","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"ZD292"},"content":"\t\t\t// int idx \u003d i + 1;","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"ZD292"},"content":"\t\t\tbr.append(i + 1).append(\". \");","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"ZD292"},"content":"\t\t\tbr.append((taskList.get(i)).toString()).append(\"\\n\");","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"ZD292"},"content":"\t\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"ZD292"},"content":"\t\tString echo \u003d String.format(\"____________________________________________________________\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"ZD292"},"content":"\t\t\t\t+ \"Here are the task in your list:\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"ZD292"},"content":"\t\t\t\t+ \"%s\"","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"ZD292"},"content":"\t\t\t\t+ \"____________________________________________________________\", br.toString());","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"ZD292"},"content":"\t\tSystem.out.println(echo);","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"ZD292"},"content":"\t/**","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"ZD292"},"content":"\t * Marks task.","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"ZD292"},"content":"\t * @param toMark Whether to mark Task as done or not.","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"ZD292"},"content":"\t * @param idx Index of task to be marked, starting from 0.","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"ZD292"},"content":"\t * @throws DukeException If unable to mark task at specified idx.","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"ZD292"},"content":"\t */","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"ZD292"},"content":"\tpublic void toMark(Boolean toMark, int idx) throws DukeException {","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"ZD292"},"content":"\t\tif (idx + 1 \u003e taskList.size()) {","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"ZD292"},"content":"\t\t\tthrow new DukeException(\"Trying to mark or unmark something beyond the list\");","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"ZD292"},"content":"\t\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"ZD292"},"content":"\t\tTask t \u003d taskList.get(idx);","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"ZD292"},"content":"\t\tif (toMark) {","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"ZD292"},"content":"\t\t\tt.markAsDone();","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"ZD292"},"content":"\t\t\tString echo \u003d String.format(\"____________________________________________________________\\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\"Nice! I\u0027ve marked this task as done:\\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\tt.toString() + \"\\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\"____________________________________________________________\");","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"ZD292"},"content":"\t\t\tSystem.out.println(echo);","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"ZD292"},"content":"\t\t} else {","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"ZD292"},"content":"\t\t\ttaskList.get(idx).unMark();","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"ZD292"},"content":"\t\t\tString echo \u003d String.format(\"____________________________________________________________\\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\"Nice! I\u0027ve marked this task as not done yet:\\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\tt.toString() + \"\\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\"____________________________________________________________\");","lastModifiedDate":"2023-09-03"},{"lineNumber":78,"author":{"gitId":"ZD292"},"content":"\t\t\tSystem.out.println(echo);","lastModifiedDate":"2023-09-03"},{"lineNumber":79,"author":{"gitId":"ZD292"},"content":"\t\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":80,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":81,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":82,"author":{"gitId":"ZD292"},"content":"\t/**","lastModifiedDate":"2023-09-04"},{"lineNumber":83,"author":{"gitId":"ZD292"},"content":"\t * Adds task and prints String represntation of what was done.","lastModifiedDate":"2023-09-04"},{"lineNumber":84,"author":{"gitId":"ZD292"},"content":"\t * @param task Represents the Task to be added to taskList.","lastModifiedDate":"2023-09-04"},{"lineNumber":85,"author":{"gitId":"ZD292"},"content":"\t */","lastModifiedDate":"2023-09-04"},{"lineNumber":86,"author":{"gitId":"ZD292"},"content":"\tpublic void addTask(Task task) {","lastModifiedDate":"2023-09-03"},{"lineNumber":87,"author":{"gitId":"ZD292"},"content":"\t\tthis.taskList.add(task);","lastModifiedDate":"2023-09-03"},{"lineNumber":88,"author":{"gitId":"ZD292"},"content":"\t\tTask t \u003d taskList.get(taskList.size() - 1);","lastModifiedDate":"2023-09-03"},{"lineNumber":89,"author":{"gitId":"ZD292"},"content":"\t\tString echo \u003d String.format(\"____________________________________________________________\\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":90,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\"Got it. I\u0027ve added this task:\\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":91,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\"%s\\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":92,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\"Now you have %s tasks in the list\\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":93,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\"____________________________________________________________\", t.toString(), taskList.size());","lastModifiedDate":"2023-09-03"},{"lineNumber":94,"author":{"gitId":"ZD292"},"content":"\t\tSystem.out.println(echo);","lastModifiedDate":"2023-09-03"},{"lineNumber":95,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":96,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":97,"author":{"gitId":"ZD292"},"content":"\t/**","lastModifiedDate":"2023-09-04"},{"lineNumber":98,"author":{"gitId":"ZD292"},"content":"\t * Deletes task from the taskList.","lastModifiedDate":"2023-09-04"},{"lineNumber":99,"author":{"gitId":"ZD292"},"content":"\t * @param pos Position of Task in the taskList to be deleted.","lastModifiedDate":"2023-09-04"},{"lineNumber":100,"author":{"gitId":"ZD292"},"content":"\t */","lastModifiedDate":"2023-09-04"},{"lineNumber":101,"author":{"gitId":"ZD292"},"content":"\tpublic void delete(int pos) {","lastModifiedDate":"2023-09-03"},{"lineNumber":102,"author":{"gitId":"ZD292"},"content":"\t\tTask t \u003d taskList.get(pos - 1);","lastModifiedDate":"2023-09-03"},{"lineNumber":103,"author":{"gitId":"ZD292"},"content":"\t\tString remaining \u003d Integer.toString(taskList.size() - 1);","lastModifiedDate":"2023-09-03"},{"lineNumber":104,"author":{"gitId":"ZD292"},"content":"\t\ttaskList.remove(pos);","lastModifiedDate":"2023-09-03"},{"lineNumber":105,"author":{"gitId":"ZD292"},"content":"\t\tString echo \u003d String.format(\"____________________________________________________________\\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":106,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\"Noted. I\u0027ve removed this task:\\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":107,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\"%s\\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":108,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\"Now you have %s tasks in the list.\\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":109,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\"____________________________________________________________\", t.toString(), remaining);","lastModifiedDate":"2023-09-03"},{"lineNumber":110,"author":{"gitId":"ZD292"},"content":"\t\tSystem.out.println(echo);","lastModifiedDate":"2023-09-03"},{"lineNumber":111,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":112,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":113,"author":{"gitId":"ZD292"},"content":"\t/**","lastModifiedDate":"2023-09-04"},{"lineNumber":114,"author":{"gitId":"ZD292"},"content":"\t * Returns String representation of task at a given index, starting from 0.","lastModifiedDate":"2023-09-04"},{"lineNumber":115,"author":{"gitId":"ZD292"},"content":" \t * @param i Index of Task in taskList that we are interested in.","lastModifiedDate":"2023-09-04"},{"lineNumber":116,"author":{"gitId":"ZD292"},"content":"\t * @return String representation of Task.","lastModifiedDate":"2023-09-04"},{"lineNumber":117,"author":{"gitId":"ZD292"},"content":"\t */","lastModifiedDate":"2023-09-04"},{"lineNumber":118,"author":{"gitId":"ZD292"},"content":"\tpublic String getTask(int i) {","lastModifiedDate":"2023-09-04"},{"lineNumber":119,"author":{"gitId":"ZD292"},"content":"\t\treturn taskList.get(i).toString();","lastModifiedDate":"2023-09-04"},{"lineNumber":120,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-09-04"},{"lineNumber":121,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":122,"author":{"gitId":"ZD292"},"content":"\tpublic void findTask(String keyWord) {","lastModifiedDate":"2023-09-04"},{"lineNumber":123,"author":{"gitId":"ZD292"},"content":"\t\tint count \u003d 1;","lastModifiedDate":"2023-09-04"},{"lineNumber":124,"author":{"gitId":"ZD292"},"content":"\t\tStringBuilder br \u003d new StringBuilder();","lastModifiedDate":"2023-09-04"},{"lineNumber":125,"author":{"gitId":"ZD292"},"content":"\t\tfor (Task t: taskList) {","lastModifiedDate":"2023-09-04"},{"lineNumber":126,"author":{"gitId":"ZD292"},"content":"\t\t\tString[] words \u003d t.toString().split(\" \");","lastModifiedDate":"2023-09-04"},{"lineNumber":127,"author":{"gitId":"ZD292"},"content":"\t\t\tfor (String w: words) {","lastModifiedDate":"2023-09-04"},{"lineNumber":128,"author":{"gitId":"ZD292"},"content":"\t\t\t\tif (w.equals(keyWord)) {","lastModifiedDate":"2023-09-04"},{"lineNumber":129,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\tbr.append(count).append(\". \").append(t.toString()).append(\"\\n\");","lastModifiedDate":"2023-09-04"},{"lineNumber":130,"author":{"gitId":"ZD292"},"content":"\t\t\t\t}","lastModifiedDate":"2023-09-04"},{"lineNumber":131,"author":{"gitId":"ZD292"},"content":"\t\t\t}","lastModifiedDate":"2023-09-04"},{"lineNumber":132,"author":{"gitId":"ZD292"},"content":"\t\t\tcount++;","lastModifiedDate":"2023-09-04"},{"lineNumber":133,"author":{"gitId":"ZD292"},"content":"\t\t}","lastModifiedDate":"2023-09-04"},{"lineNumber":134,"author":{"gitId":"ZD292"},"content":"\t\tSystem.out.println(br.toString());","lastModifiedDate":"2023-09-04"},{"lineNumber":135,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-09-04"},{"lineNumber":136,"author":{"gitId":"ZD292"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"ZD292":136}},{"path":"src/main/java/duke/task/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ZD292"},"content":"package duke.task;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"ZD292"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"ZD292"},"content":" * Represents Task to be done.","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"ZD292"},"content":" * Contains a description of what is to be done.","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"ZD292"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"ZD292"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"ZD292"},"content":"\tpublic ToDo(String description) {","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"ZD292"},"content":"\t\tsuper(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"ZD292"},"content":"\t/**","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"ZD292"},"content":"\t * Returns a String to be written into Storage.","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"ZD292"},"content":"\t * @return Reformatted String suitable for Storage.","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"ZD292"},"content":"\t */","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"ZD292"},"content":"\t@Override","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"ZD292"},"content":"\tpublic String writeToFile() {","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"ZD292"},"content":"\t\tStringBuilder b \u003d new StringBuilder();","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"ZD292"},"content":"\t\tb.append(\"T\" + \" | \");","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"ZD292"},"content":"\t\tif (this.isDone) {","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"ZD292"},"content":"\t\t\tb.append(\"1\" + \" | \");","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"ZD292"},"content":"\t\t} else {","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"ZD292"},"content":"\t\t\tb.append(\"0\" + \" | \");","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"ZD292"},"content":"\t\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"ZD292"},"content":"\t\tb.append(this.description);","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"ZD292"},"content":"\t\treturn b.toString();","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"ZD292"},"content":"\t/**","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"ZD292"},"content":"\t * @return String representation of Task.","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"ZD292"},"content":"\t */","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"ZD292"},"content":"\t@Override","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"ZD292"},"content":"\tpublic String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"ZD292"},"content":"\t\treturn \"[T]\" + super.toString();","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"ZD292"},"content":"\tpublic String getIcon() {","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"ZD292"},"content":"\t\treturn \"[D]\" + super.getTask();","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"ZD292"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"ZD292":39}},{"path":"src/main/java/duke/ui/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ZD292"},"content":"package duke.ui;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"ZD292"},"content":"import java.io.InputStream;","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"ZD292"},"content":"import java.io.PrintStream;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"ZD292"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"ZD292"},"content":"public class Ui {","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"ZD292"},"content":"\tprivate String name;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"ZD292"},"content":"\tprivate final Scanner in;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"ZD292"},"content":"\tprivate PrintStream out;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"ZD292"},"content":"\tprivate static final String COMMENT_LINE_REGEX \u003d \"#.\";","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"ZD292"},"content":"\tprivate static final String LOGO \u003d \" ____ _ \\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"ZD292"},"content":"\t\t\t+ \"| _ \\\\ _ _| | _____ \\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"ZD292"},"content":"\t\t\t+ \"| | | | | | | |/ / _ \\\\\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"ZD292"},"content":"\t\t\t+ \"| |_| | |_| | \u003c __/\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"ZD292"},"content":"\t\t\t+ \"|____/ \\\\__,_|_|\\\\_\\\\___|\\n\";","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"ZD292"},"content":"\tprivate static final String DIVIDER \u003d \"____________________________________________________________\\n\";","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"ZD292"},"content":"\t// scannner takes in inputstream","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"ZD292"},"content":"\tpublic Ui(InputStream in, PrintStream out) {","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"ZD292"},"content":"\t\tthis.in \u003d new Scanner(in);","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"ZD292"},"content":"\t\tthis.out \u003d out;","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"ZD292"},"content":"\tpublic Ui(String name) {","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"ZD292"},"content":"\t\tthis(System.in, System.out);","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"ZD292"},"content":"\t\tthis.name \u003d name;","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"ZD292"},"content":"\tpublic boolean hasNextLine() {","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"ZD292"},"content":"\t\treturn this.in.hasNextLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"ZD292"},"content":"\t// return the fullcommand? lines(--\u003e commands) separated by \\n","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"ZD292"},"content":"\t//","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"ZD292"},"content":"\t// our run will do ui.hasnextline()","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"ZD292"},"content":"\tprivate boolean isCommentLine(String inputLine) {","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"ZD292"},"content":"\t\treturn inputLine.trim().matches(COMMENT_LINE_REGEX);","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"ZD292"},"content":"\tprivate boolean shouldIgnore(String inputLine) {","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"ZD292"},"content":"\t\treturn inputLine.trim().isEmpty() || isCommentLine(inputLine);","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"ZD292"},"content":"\tpublic String readCommand() {","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"ZD292"},"content":"\t\t// has nextline then save it skip the comments","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"ZD292"},"content":"\t\tout.print(\"Enter your Command:\");","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"ZD292"},"content":"\t\tString inputLine \u003d in.nextLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"ZD292"},"content":"\t\twhile (shouldIgnore(inputLine)) {","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"ZD292"},"content":"\t\t\tinputLine \u003d in.nextLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"ZD292"},"content":"\t\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"ZD292"},"content":"\t\tString message \u003d String.format(\"Command entered: %s\", inputLine);","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"ZD292"},"content":"\t\tSystem.out.println(message);","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"ZD292"},"content":"\t\treturn inputLine;","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"ZD292"},"content":"\tpublic void showLoadingError(Exception e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"ZD292"},"content":"\t\tSystem.out.println(\"Unable to process stored file:\");","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"ZD292"},"content":"\t\tSystem.out.println(e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"ZD292"},"content":"\tpublic void showWelcome() {","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"ZD292"},"content":"\t\tString greeting \u003d String.format(\"____________________________________________________________\\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\"Hello! I\u0027m %s\\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\"What can I do for you?\\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\"____________________________________________________________\", this.name);","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"ZD292"},"content":"\t\tSystem.out.println(LOGO);","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"ZD292"},"content":"\t\tSystem.out.println(greeting);","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"ZD292"},"content":"\tpublic void showGoodBye() {","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"ZD292"},"content":"\t\tString bye \u003d \"____________________________________________________________\\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\"Bye. Hope to see you again soon!\\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\"____________________________________________________________\";","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"ZD292"},"content":"\t\tSystem.out.println(bye);","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"ZD292"},"content":"\t\t// write to file before leaving the system","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"ZD292"},"content":"//\t\tr.writeFile();","lastModifiedDate":"2023-09-03"},{"lineNumber":78,"author":{"gitId":"ZD292"},"content":"\t\tSystem.exit(0);","lastModifiedDate":"2023-09-03"},{"lineNumber":79,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":80,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":81,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":82,"author":{"gitId":"ZD292"},"content":"\tpublic void showLine() {","lastModifiedDate":"2023-09-03"},{"lineNumber":83,"author":{"gitId":"ZD292"},"content":"\t\tSystem.out.println(DIVIDER);","lastModifiedDate":"2023-09-03"},{"lineNumber":84,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":85,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":86,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":87,"author":{"gitId":"ZD292"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"ZD292":87}},{"path":"src/test/java/duke/parser/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ZD292"},"content":"package duke.parser;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"ZD292"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"ZD292"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"ZD292"},"content":"public class ParserTest {","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"ZD292"},"content":"\t@Test","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"ZD292"},"content":"\tpublic void formatDateTest() {","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"ZD292"},"content":"\t\tString expected \u003d \"2023-06-29T06:00:00\";","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"ZD292"},"content":"\t\tString[] input \u003d {\"630am\", \"29june\"};","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"ZD292"},"content":"\t\tString actual \u003d Parser.formatDate(input);","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"ZD292"},"content":"\t\tassertEquals(expected, actual);","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"ZD292"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"ZD292":16}},{"path":"src/test/java/duke/task/ToDoTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ZD292"},"content":"package duke.task;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"ZD292"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"ZD292"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"ZD292"},"content":"public class ToDoTest {","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"ZD292"},"content":"\t@Test","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"ZD292"},"content":"\tpublic void writeToFileTest() {","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"ZD292"},"content":"\t\tToDo t \u003d new ToDo(\"hello\");","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"ZD292"},"content":"\t\tString expected \u003d \"T | 0 | hello\";","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"ZD292"},"content":"\t\tassertEquals(t.writeToFile(), expected);","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"ZD292"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"ZD292":14}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"ZD292"},"content":"todo read book","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"ZD292"},"content":"mark 1","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"ZD292"},"content":"deadline return book /by June 6th","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"ZD292"},"content":"event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"ZD292"},"content":"list","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"ZD292"},"content":"unmark 1","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"ZD292"},"content":"list","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"ZD292"},"content":"deadline do homework /by no idea :-p","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"ZD292"},"content":"bye","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"ZD292":9}},{"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":"ZD292"},"content":"java -classpath ..\\bin Duke \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":"# convert to UNIX format","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":"cp EXPECTED.TXT EXPECTED-UNIX.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":"dos2unix ACTUAL.TXT EXPECTED-UNIX.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":"# compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":"diff ACTUAL.TXT EXPECTED-UNIX.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":"if [ $? -eq 0 ]","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":" echo \"Test result: PASSED\"","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":" exit 0","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"else","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":" echo \"Test result: FAILED\"","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":" exit 1","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"ZD292":1,"-":36}}] +[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"# Duke project template","lastModifiedDate":"2020-05-25"},{"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":"ZD292"},"content":"1. Open Intellij (if you are not in the welcome screen, click `Records` \u003e `Close Project` to close the existing project first)","lastModifiedDate":"2023-08-31"},{"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":"-"},"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":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":{"ZD292":1,"-":23}},{"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":"ZD292"},"content":"// change this","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"ZD292"},"content":"application {","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"ZD292"},"content":" mainClass.set(\"duke.Launcher\")","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"ZD292"},"content":"}","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"ZD292"},"content":" maven { url \u0027https://oss.sonatype.org/content/repositories/snapshots/\u0027 }","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"ZD292"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":21,"author":{"gitId":"ZD292"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"ZD292"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"ZD292"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"ZD292"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"ZD292"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"ZD292"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"ZD292"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"ZD292"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"ZD292"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"ZD292"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"ZD292"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"ZD292"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":36,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2023-09-10"},{"lineNumber":37,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-09-10"},{"lineNumber":38,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-09-10"},{"lineNumber":39,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2023-09-10"},{"lineNumber":40,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":41,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":47,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":48,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":49,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":50,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":51,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":52,"author":{"gitId":"-"},"content":" }","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":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":57,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":58,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":59,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":60,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":61,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":62,"author":{"gitId":"-"},"content":"run {","lastModifiedDate":"2020-05-25"},{"lineNumber":63,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":64,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"ZD292":22,"-":42}},{"path":"duke.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"ZD292"},"content":"T | 0 | aa","lastModifiedDate":"2023-09-10"},{"lineNumber":2,"author":{"gitId":"ZD292"},"content":"T | 0 | aaa","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"ZD292"},"content":"T | 0 | hello","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"ZD292"},"content":"T | 0 | hello","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"ZD292"},"content":"T | 0 | aaaa","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"ZD292"},"content":"T | 0 | aaa","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"ZD292"},"content":"T | 0 | aaa","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"ZD292"},"content":"T | 0 | aaa","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"ZD292"},"content":"T | 0 | aaa","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"ZD292":9}},{"path":"src/main/java/duke/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ZD292"},"content":"package duke;","lastModifiedDate":"2023-09-10"},{"lineNumber":2,"author":{"gitId":"ZD292"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"ZD292"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"ZD292"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"ZD292"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"ZD292"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"ZD292"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"ZD292"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"ZD292"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"ZD292"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"ZD292"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"ZD292"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"ZD292"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"ZD292"},"content":"/**","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"ZD292"},"content":" * An example of a custom control using FXML.","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"ZD292"},"content":" * This control represents a dialog box consisting of an ImageView to represent the speaker\u0027s face and a label","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"ZD292"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"ZD292"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":21,"author":{"gitId":"ZD292"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"ZD292"},"content":"\t@FXML","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"ZD292"},"content":"\tprivate Label dialog;","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"ZD292"},"content":"\t@FXML","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"ZD292"},"content":"\tprivate ImageView displayPicture;","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":27,"author":{"gitId":"ZD292"},"content":"\t/**","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"ZD292"},"content":"\t * Represents a DialogBox object which users interact with","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"ZD292"},"content":"\t * @param text text in the dialog box","lastModifiedDate":"2023-09-10"},{"lineNumber":30,"author":{"gitId":"ZD292"},"content":"\t * @param img image to be loaded","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"ZD292"},"content":"\t */","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"ZD292"},"content":"\tprivate DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-10"},{"lineNumber":33,"author":{"gitId":"ZD292"},"content":"\t\ttry {","lastModifiedDate":"2023-09-10"},{"lineNumber":34,"author":{"gitId":"ZD292"},"content":"\t\t\tFXMLLoader fxmlLoader \u003d new FXMLLoader(duke.MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-10"},{"lineNumber":35,"author":{"gitId":"ZD292"},"content":"\t\t\tfxmlLoader.setController(this);","lastModifiedDate":"2023-09-10"},{"lineNumber":36,"author":{"gitId":"ZD292"},"content":"\t\t\tfxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-10"},{"lineNumber":37,"author":{"gitId":"ZD292"},"content":"\t\t\tfxmlLoader.load();","lastModifiedDate":"2023-09-10"},{"lineNumber":38,"author":{"gitId":"ZD292"},"content":"\t\t} catch (IOException e) {","lastModifiedDate":"2023-09-10"},{"lineNumber":39,"author":{"gitId":"ZD292"},"content":"\t\t\te.printStackTrace();","lastModifiedDate":"2023-09-10"},{"lineNumber":40,"author":{"gitId":"ZD292"},"content":"\t\t}","lastModifiedDate":"2023-09-10"},{"lineNumber":41,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":42,"author":{"gitId":"ZD292"},"content":"\t\tdialog.setText(text);","lastModifiedDate":"2023-09-10"},{"lineNumber":43,"author":{"gitId":"ZD292"},"content":"\t\tdisplayPicture.setImage(img);","lastModifiedDate":"2023-09-10"},{"lineNumber":44,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-09-10"},{"lineNumber":45,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":46,"author":{"gitId":"ZD292"},"content":"\t/**","lastModifiedDate":"2023-09-10"},{"lineNumber":47,"author":{"gitId":"ZD292"},"content":"\t * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-10"},{"lineNumber":48,"author":{"gitId":"ZD292"},"content":"\t */","lastModifiedDate":"2023-09-10"},{"lineNumber":49,"author":{"gitId":"ZD292"},"content":"\tprivate void flip() {","lastModifiedDate":"2023-09-10"},{"lineNumber":50,"author":{"gitId":"ZD292"},"content":"\t\tObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-10"},{"lineNumber":51,"author":{"gitId":"ZD292"},"content":"\t\tCollections.reverse(tmp);","lastModifiedDate":"2023-09-10"},{"lineNumber":52,"author":{"gitId":"ZD292"},"content":"\t\tgetChildren().setAll(tmp);","lastModifiedDate":"2023-09-10"},{"lineNumber":53,"author":{"gitId":"ZD292"},"content":"\t\tsetAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-10"},{"lineNumber":54,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-09-10"},{"lineNumber":55,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":56,"author":{"gitId":"ZD292"},"content":"\t/**","lastModifiedDate":"2023-09-10"},{"lineNumber":57,"author":{"gitId":"ZD292"},"content":"\t * Returns a Dialog Box","lastModifiedDate":"2023-09-10"},{"lineNumber":58,"author":{"gitId":"ZD292"},"content":"\t * @param text the text entered","lastModifiedDate":"2023-09-10"},{"lineNumber":59,"author":{"gitId":"ZD292"},"content":"\t * @param img the image","lastModifiedDate":"2023-09-10"},{"lineNumber":60,"author":{"gitId":"ZD292"},"content":"\t * @return a Dialog Box","lastModifiedDate":"2023-09-10"},{"lineNumber":61,"author":{"gitId":"ZD292"},"content":"\t */","lastModifiedDate":"2023-09-10"},{"lineNumber":62,"author":{"gitId":"ZD292"},"content":"\tpublic static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-10"},{"lineNumber":63,"author":{"gitId":"ZD292"},"content":"\t\treturn new DialogBox(text, img);","lastModifiedDate":"2023-09-10"},{"lineNumber":64,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-09-10"},{"lineNumber":65,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":66,"author":{"gitId":"ZD292"},"content":"\t/**","lastModifiedDate":"2023-09-10"},{"lineNumber":67,"author":{"gitId":"ZD292"},"content":"\t * returns DialogBox","lastModifiedDate":"2023-09-10"},{"lineNumber":68,"author":{"gitId":"ZD292"},"content":"\t * @param text the text","lastModifiedDate":"2023-09-10"},{"lineNumber":69,"author":{"gitId":"ZD292"},"content":"\t * @param img the image","lastModifiedDate":"2023-09-10"},{"lineNumber":70,"author":{"gitId":"ZD292"},"content":"\t * @return DialogBox","lastModifiedDate":"2023-09-10"},{"lineNumber":71,"author":{"gitId":"ZD292"},"content":"\t */","lastModifiedDate":"2023-09-10"},{"lineNumber":72,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":73,"author":{"gitId":"ZD292"},"content":"\tpublic static DialogBox getDukeDialog(String text, Image img) {","lastModifiedDate":"2023-09-10"},{"lineNumber":74,"author":{"gitId":"ZD292"},"content":"\t\tvar db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-10"},{"lineNumber":75,"author":{"gitId":"ZD292"},"content":"\t\tdb.flip();","lastModifiedDate":"2023-09-10"},{"lineNumber":76,"author":{"gitId":"ZD292"},"content":"\t\treturn db;","lastModifiedDate":"2023-09-10"},{"lineNumber":77,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-09-10"},{"lineNumber":78,"author":{"gitId":"ZD292"},"content":"}","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"ZD292":78}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ZD292"},"content":"package duke;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"ZD292"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"ZD292"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"ZD292"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"ZD292"},"content":"import duke.command.Command;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"ZD292"},"content":"import duke.parser.Parser;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"ZD292"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"ZD292"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"ZD292"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"ZD292"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"ZD292"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"ZD292"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"ZD292"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"ZD292"},"content":" * Represent the ChatBot.","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"ZD292"},"content":" * Run the ChatBot to intereact with it.","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"ZD292"},"content":" * Contains a list of tasks, TaskList, a user interface Ui, and storage, Storage.","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"ZD292"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"ZD292"},"content":"public class Duke {","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"ZD292"},"content":" private static final String filePath \u003d \"./duke.txt\";","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"ZD292"},"content":" private final Ui ui;","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"ZD292"},"content":" private TaskList tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"ZD292"},"content":" private final Storage storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"ZD292"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"ZD292"},"content":" * Constructs a new ChatBot to chat with.","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"ZD292"},"content":" * Default name of the ChatBot is Duke","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"ZD292"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"ZD292"},"content":" public Duke() {","lastModifiedDate":"2023-09-10"},{"lineNumber":34,"author":{"gitId":"ZD292"},"content":" this.ui \u003d new Ui(\"Duke\");","lastModifiedDate":"2023-09-10"},{"lineNumber":35,"author":{"gitId":"ZD292"},"content":" storage \u003d new Storage(filePath);","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"ZD292"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"ZD292"},"content":" tasks \u003d new TaskList(storage.readFile());","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"ZD292"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"ZD292"},"content":" ui.showLoadingError(e);","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"ZD292"},"content":" this.tasks \u003d new TaskList();","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"ZD292"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"ZD292"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"ZD292"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"ZD292"},"content":" * Runs the ChatBot.","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"ZD292"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"ZD292"},"content":" public void run() {","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"ZD292"},"content":" ui.showWelcome();","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"ZD292"},"content":" while (ui.hasNextLine()) {","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"ZD292"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"ZD292"},"content":" String fullCommand \u003d ui.readCommand();","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"ZD292"},"content":" ui.showLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"ZD292"},"content":" Command c \u003d Parser.parse(fullCommand);","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"ZD292"},"content":" c.execute(tasks, ui, storage);","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"ZD292"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"ZD292"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"ZD292"},"content":" } finally {","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"ZD292"},"content":" ui.showLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"ZD292"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"ZD292"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"ZD292"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"ZD292"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"ZD292"},"content":" * @param args Main method to run ChatBot.","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"ZD292"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"ZD292"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"ZD292"},"content":"\t\t// filepath was here","lastModifiedDate":"2023-09-10"},{"lineNumber":68,"author":{"gitId":"ZD292"},"content":" new Duke().run();","lastModifiedDate":"2023-09-10"},{"lineNumber":69,"author":{"gitId":"ZD292"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":71,"author":{"gitId":"ZD292"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":72,"author":{"gitId":"ZD292"},"content":" * Get a response from interacting with GUI","lastModifiedDate":"2023-09-10"},{"lineNumber":73,"author":{"gitId":"ZD292"},"content":" * @param input the input user gives","lastModifiedDate":"2023-09-10"},{"lineNumber":74,"author":{"gitId":"ZD292"},"content":" * @return String representing response of ChatBot","lastModifiedDate":"2023-09-10"},{"lineNumber":75,"author":{"gitId":"ZD292"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":76,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":77,"author":{"gitId":"ZD292"},"content":"\tpublic String getResponse(String input) {","lastModifiedDate":"2023-09-10"},{"lineNumber":78,"author":{"gitId":"ZD292"},"content":" StringBuilder br \u003d new StringBuilder();","lastModifiedDate":"2023-09-10"},{"lineNumber":79,"author":{"gitId":"ZD292"},"content":" try {","lastModifiedDate":"2023-09-10"},{"lineNumber":80,"author":{"gitId":"ZD292"},"content":" br.append(input);","lastModifiedDate":"2023-09-10"},{"lineNumber":81,"author":{"gitId":"ZD292"},"content":" br.append(\"\\n\");","lastModifiedDate":"2023-09-10"},{"lineNumber":82,"author":{"gitId":"ZD292"},"content":" br.append(ui.getLine());","lastModifiedDate":"2023-09-10"},{"lineNumber":83,"author":{"gitId":"ZD292"},"content":" Command c \u003d Parser.parse(input);","lastModifiedDate":"2023-09-10"},{"lineNumber":84,"author":{"gitId":"ZD292"},"content":" br.append(c.execute(tasks, ui, storage));","lastModifiedDate":"2023-09-10"},{"lineNumber":85,"author":{"gitId":"ZD292"},"content":" return br.toString();","lastModifiedDate":"2023-09-10"},{"lineNumber":86,"author":{"gitId":"ZD292"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-10"},{"lineNumber":87,"author":{"gitId":"ZD292"},"content":" return e.getMessage();","lastModifiedDate":"2023-09-10"},{"lineNumber":88,"author":{"gitId":"ZD292"},"content":" } finally {","lastModifiedDate":"2023-09-10"},{"lineNumber":89,"author":{"gitId":"ZD292"},"content":" br.append(ui.getLine());","lastModifiedDate":"2023-09-10"},{"lineNumber":90,"author":{"gitId":"ZD292"},"content":" return br.toString();","lastModifiedDate":"2023-09-10"},{"lineNumber":91,"author":{"gitId":"ZD292"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":92,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-09-10"},{"lineNumber":93,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":94,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":95,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":96,"author":{"gitId":"ZD292"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"ZD292":96}},{"path":"src/main/java/duke/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ZD292"},"content":"package duke;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"ZD292"},"content":"/**","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"ZD292"},"content":" * Represents exception specific to ChatBot duke","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"ZD292"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"ZD292"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"ZD292"},"content":"\tpublic DukeException(String e) {","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"ZD292"},"content":"\t\tsuper(e);","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"ZD292"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"ZD292":10}},{"path":"src/main/java/duke/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ZD292"},"content":"package duke;","lastModifiedDate":"2023-09-10"},{"lineNumber":2,"author":{"gitId":"ZD292"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"ZD292"},"content":"/**","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"ZD292"},"content":" * Represents the launching of GUI","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"ZD292"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"ZD292"},"content":"public class Launcher {","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"ZD292"},"content":"\tpublic static void main(String[] args) {","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"ZD292"},"content":"\t\tApplication.launch(duke.Main.class, args);","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"ZD292"},"content":"}","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"ZD292":12}},{"path":"src/main/java/duke/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ZD292"},"content":"package duke;","lastModifiedDate":"2023-09-10"},{"lineNumber":2,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"ZD292"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"ZD292"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"ZD292"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"ZD292"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"ZD292"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"ZD292"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"ZD292"},"content":"/**","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"ZD292"},"content":" * A GUI for Duke using FXML.","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"ZD292"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"ZD292"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"ZD292"},"content":"\tprivate Duke duke \u003d new Duke();","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"ZD292"},"content":"\t/**","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"ZD292"},"content":"\t * Initialise GUI elements","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"ZD292"},"content":"\t * @param stage the primary stage for this application, onto which","lastModifiedDate":"2023-09-10"},{"lineNumber":21,"author":{"gitId":"ZD292"},"content":"\t * the application scene can be set.","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"ZD292"},"content":"\t * Applications may create other stages, if needed, but they will not be","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"ZD292"},"content":"\t * primary stages.","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"ZD292"},"content":"\t */","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"ZD292"},"content":"\t@Override","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"ZD292"},"content":"\tpublic void start(Stage stage) {","lastModifiedDate":"2023-09-10"},{"lineNumber":27,"author":{"gitId":"ZD292"},"content":"\t\ttry {","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"ZD292"},"content":"\t\t\tFXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"ZD292"},"content":"\t\t\tAnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-10"},{"lineNumber":30,"author":{"gitId":"ZD292"},"content":"\t\t\tScene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"ZD292"},"content":"\t\t\tstage.setScene(scene);","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"ZD292"},"content":"\t\t\tfxmlLoader.\u003cMainWindow\u003egetController().setDuke(duke);","lastModifiedDate":"2023-09-10"},{"lineNumber":33,"author":{"gitId":"ZD292"},"content":"\t\t\tstage.show();","lastModifiedDate":"2023-09-10"},{"lineNumber":34,"author":{"gitId":"ZD292"},"content":"\t\t} catch (IOException e) {","lastModifiedDate":"2023-09-10"},{"lineNumber":35,"author":{"gitId":"ZD292"},"content":"\t\t\te.printStackTrace();","lastModifiedDate":"2023-09-10"},{"lineNumber":36,"author":{"gitId":"ZD292"},"content":"\t\t}","lastModifiedDate":"2023-09-10"},{"lineNumber":37,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-09-10"},{"lineNumber":38,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":39,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":40,"author":{"gitId":"ZD292"},"content":"}","lastModifiedDate":"2023-09-10"},{"lineNumber":41,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"ZD292":41}},{"path":"src/main/java/duke/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ZD292"},"content":"package duke;","lastModifiedDate":"2023-09-10"},{"lineNumber":2,"author":{"gitId":"ZD292"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"ZD292"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"ZD292"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"ZD292"},"content":"import duke.command.Command;","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"ZD292"},"content":"import duke.parser.Parser;","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"ZD292"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"ZD292"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"ZD292"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"ZD292"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"ZD292"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"ZD292"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"ZD292"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"ZD292"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"ZD292"},"content":"/**","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"ZD292"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"ZD292"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"ZD292"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-10"},{"lineNumber":21,"author":{"gitId":"ZD292"},"content":"\t@FXML","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"ZD292"},"content":"\tprivate ScrollPane scrollPane;","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"ZD292"},"content":"\t@FXML","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"ZD292"},"content":"\tprivate VBox dialogContainer;","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"ZD292"},"content":"\t@FXML","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"ZD292"},"content":"\tprivate TextField userInput;","lastModifiedDate":"2023-09-10"},{"lineNumber":27,"author":{"gitId":"ZD292"},"content":"\t@FXML","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"ZD292"},"content":"\tprivate Button sendButton;","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"ZD292"},"content":"\tprivate Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaUser.png\"));","lastModifiedDate":"2023-09-10"},{"lineNumber":30,"author":{"gitId":"ZD292"},"content":"\tprivate Image dukeImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaDuke.png\"));","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"ZD292"},"content":"\tprivate Duke duke;","lastModifiedDate":"2023-09-10"},{"lineNumber":33,"author":{"gitId":"ZD292"},"content":"\tprivate static final String filePath \u003d \"./duke.txt\";","lastModifiedDate":"2023-09-10"},{"lineNumber":34,"author":{"gitId":"ZD292"},"content":"\tprivate final Ui ui \u003d new Ui(\"Duke\");","lastModifiedDate":"2023-09-10"},{"lineNumber":35,"author":{"gitId":"ZD292"},"content":"\tprivate final Storage storage \u003d new Storage(filePath);","lastModifiedDate":"2023-09-10"},{"lineNumber":36,"author":{"gitId":"ZD292"},"content":"\tprivate final TaskList tasks \u003d getTasks();","lastModifiedDate":"2023-09-10"},{"lineNumber":37,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":38,"author":{"gitId":"ZD292"},"content":"\t/**","lastModifiedDate":"2023-09-10"},{"lineNumber":39,"author":{"gitId":"ZD292"},"content":"\t * Loads takss from storage into a taskList","lastModifiedDate":"2023-09-10"},{"lineNumber":40,"author":{"gitId":"ZD292"},"content":"\t * @return TaskList loaded from storage","lastModifiedDate":"2023-09-10"},{"lineNumber":41,"author":{"gitId":"ZD292"},"content":"\t */","lastModifiedDate":"2023-09-10"},{"lineNumber":42,"author":{"gitId":"ZD292"},"content":"\tprivate TaskList getTasks() {","lastModifiedDate":"2023-09-10"},{"lineNumber":43,"author":{"gitId":"ZD292"},"content":"\t\ttry {","lastModifiedDate":"2023-09-10"},{"lineNumber":44,"author":{"gitId":"ZD292"},"content":"\t\t\treturn new TaskList(storage.readFile());","lastModifiedDate":"2023-09-10"},{"lineNumber":45,"author":{"gitId":"ZD292"},"content":"\t\t} catch (IOException e) {","lastModifiedDate":"2023-09-10"},{"lineNumber":46,"author":{"gitId":"ZD292"},"content":"\t\t\tui.showLoadingError(e);","lastModifiedDate":"2023-09-10"},{"lineNumber":47,"author":{"gitId":"ZD292"},"content":"\t\t\treturn new TaskList();","lastModifiedDate":"2023-09-10"},{"lineNumber":48,"author":{"gitId":"ZD292"},"content":"\t\t}","lastModifiedDate":"2023-09-10"},{"lineNumber":49,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-09-10"},{"lineNumber":50,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":51,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":52,"author":{"gitId":"ZD292"},"content":"\t/**","lastModifiedDate":"2023-09-10"},{"lineNumber":53,"author":{"gitId":"ZD292"},"content":"\t * Constructs a new ChatBot to chat with.","lastModifiedDate":"2023-09-10"},{"lineNumber":54,"author":{"gitId":"ZD292"},"content":"\t * Default name of the ChatBot is Duke","lastModifiedDate":"2023-09-10"},{"lineNumber":55,"author":{"gitId":"ZD292"},"content":"\t */","lastModifiedDate":"2023-09-10"},{"lineNumber":56,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":57,"author":{"gitId":"ZD292"},"content":"\t/**","lastModifiedDate":"2023-09-10"},{"lineNumber":58,"author":{"gitId":"ZD292"},"content":"\t * @param args Main method to run ChatBot.","lastModifiedDate":"2023-09-10"},{"lineNumber":59,"author":{"gitId":"ZD292"},"content":"\t */","lastModifiedDate":"2023-09-10"},{"lineNumber":60,"author":{"gitId":"ZD292"},"content":"\tpublic static void main(String[] args) {","lastModifiedDate":"2023-09-10"},{"lineNumber":61,"author":{"gitId":"ZD292"},"content":"\t\t// filepath was here","lastModifiedDate":"2023-09-10"},{"lineNumber":62,"author":{"gitId":"ZD292"},"content":"\t\tnew Duke().run();","lastModifiedDate":"2023-09-10"},{"lineNumber":63,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-09-10"},{"lineNumber":64,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":65,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":66,"author":{"gitId":"ZD292"},"content":"\t@FXML","lastModifiedDate":"2023-09-10"},{"lineNumber":67,"author":{"gitId":"ZD292"},"content":"\tpublic void initialize() {","lastModifiedDate":"2023-09-10"},{"lineNumber":68,"author":{"gitId":"ZD292"},"content":"\t\tscrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-10"},{"lineNumber":69,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-09-10"},{"lineNumber":70,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":71,"author":{"gitId":"ZD292"},"content":"\tpublic void setDuke(Duke d) {","lastModifiedDate":"2023-09-10"},{"lineNumber":72,"author":{"gitId":"ZD292"},"content":"\t\tduke \u003d d;","lastModifiedDate":"2023-09-10"},{"lineNumber":73,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-09-10"},{"lineNumber":74,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":75,"author":{"gitId":"ZD292"},"content":"\t/**","lastModifiedDate":"2023-09-10"},{"lineNumber":76,"author":{"gitId":"ZD292"},"content":"\t * Creates two dialog boxes, one echoing user input and the other containing Duke\u0027s reply and then appends them to","lastModifiedDate":"2023-09-10"},{"lineNumber":77,"author":{"gitId":"ZD292"},"content":"\t * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-10"},{"lineNumber":78,"author":{"gitId":"ZD292"},"content":"\t */","lastModifiedDate":"2023-09-10"},{"lineNumber":79,"author":{"gitId":"ZD292"},"content":"\t@FXML","lastModifiedDate":"2023-09-10"},{"lineNumber":80,"author":{"gitId":"ZD292"},"content":"\tprivate void handleUserInput() {","lastModifiedDate":"2023-09-10"},{"lineNumber":81,"author":{"gitId":"ZD292"},"content":"\t\tString input \u003d userInput.getText();","lastModifiedDate":"2023-09-10"},{"lineNumber":82,"author":{"gitId":"ZD292"},"content":"\t\t// with input i use ui to execute and get a response!","lastModifiedDate":"2023-09-10"},{"lineNumber":83,"author":{"gitId":"ZD292"},"content":"\t\tString response \u003d duke.getResponse(input);","lastModifiedDate":"2023-09-10"},{"lineNumber":84,"author":{"gitId":"ZD292"},"content":"\t\tdialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-10"},{"lineNumber":85,"author":{"gitId":"ZD292"},"content":"\t\t\t\tDialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-10"},{"lineNumber":86,"author":{"gitId":"ZD292"},"content":"\t\t\t\tDialogBox.getDukeDialog(response, dukeImage)","lastModifiedDate":"2023-09-10"},{"lineNumber":87,"author":{"gitId":"ZD292"},"content":"\t\t);","lastModifiedDate":"2023-09-10"},{"lineNumber":88,"author":{"gitId":"ZD292"},"content":"\t\tuserInput.clear();","lastModifiedDate":"2023-09-10"},{"lineNumber":89,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-09-10"},{"lineNumber":90,"author":{"gitId":"ZD292"},"content":"}","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"ZD292":90}},{"path":"src/main/java/duke/command/AddCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ZD292"},"content":"package duke.command;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"ZD292"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"ZD292"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"ZD292"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"ZD292"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"ZD292"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"ZD292"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"ZD292"},"content":" * Represents a Command to which adds a tasks when executed.","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"ZD292"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"ZD292"},"content":"public class AddCommand extends Command {","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"ZD292"},"content":"\tprivate final Task task;","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"ZD292"},"content":"\tpublic AddCommand(Task task) {","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"ZD292"},"content":"\t\tthis.task \u003d task;","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"ZD292"},"content":"\t/**","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"ZD292"},"content":"\t * Executes the add command which add the task into taskList.","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"ZD292"},"content":"\t * Ui displays adding to user.","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"ZD292"},"content":"\t * Output of task is stored in Storage which writes to a text file.","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"ZD292"},"content":"\t * @param taskList list of tasks to execute.","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"ZD292"},"content":"\t * @param ui displays execution of adding.","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"ZD292"},"content":"\t * @param storage can write tasks to store on the text file.","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"ZD292"},"content":"\t */","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"ZD292"},"content":"\t@Override","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"ZD292"},"content":"\tpublic String execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-10"},{"lineNumber":27,"author":{"gitId":"ZD292"},"content":"\t\ttry {","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"ZD292"},"content":"\t\t\tstorage.addToFile(task);","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"ZD292"},"content":"\t\t\tSystem.out.println(","lastModifiedDate":"2023-09-10"},{"lineNumber":30,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\tui.showAddTask(task, taskList.getSize())","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"ZD292"},"content":"\t\t\t);","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"ZD292"},"content":"\t\t\treturn ui.showAddTask(task, taskList.getSize());","lastModifiedDate":"2023-09-10"},{"lineNumber":33,"author":{"gitId":"ZD292"},"content":"\t\t} catch (IOException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"ZD292"},"content":"\t\t\treturn \"Fail to write to file\\n\";","lastModifiedDate":"2023-09-10"},{"lineNumber":35,"author":{"gitId":"ZD292"},"content":"//\t\t\tSystem.out.println(\"Fail to write to file\\n\" + e.getMessage());","lastModifiedDate":"2023-09-10"},{"lineNumber":36,"author":{"gitId":"ZD292"},"content":"\t\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"ZD292"},"content":"}","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"ZD292":40}},{"path":"src/main/java/duke/command/ByeCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ZD292"},"content":"package duke.command;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"ZD292"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"ZD292"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"ZD292"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"ZD292"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"ZD292"},"content":" * Command to exit the system and say bye.","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"ZD292"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"ZD292"},"content":"public class ByeCommand extends Command {","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"ZD292"},"content":"\t/**","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"ZD292"},"content":"\t * Executes the bye command which exits system.","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"ZD292"},"content":"\t * Ui displays exiting to user.","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"ZD292"},"content":"\t * @param taskList list of tasks to execute.","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"ZD292"},"content":"\t * @param ui displays execution of adding.","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"ZD292"},"content":"\t * @param storage can write tasks to store on the text file.","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"ZD292"},"content":"\t */","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"ZD292"},"content":"\t@Override","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"ZD292"},"content":"\tpublic String execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"ZD292"},"content":"\t\tSystem.out.println(ui.showGoodBye());","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"ZD292"},"content":"\t\treturn ui.showGoodBye();","lastModifiedDate":"2023-09-10"},{"lineNumber":21,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"ZD292"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"ZD292":22}},{"path":"src/main/java/duke/command/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ZD292"},"content":"package duke.command;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"ZD292"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"ZD292"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"ZD292"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"ZD292"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"ZD292"},"content":" * Abstract class that represent a Command.","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"ZD292"},"content":" * A Command is an executable that can execute to perform different actions.","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"ZD292"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"ZD292"},"content":"public abstract class Command {","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"ZD292"},"content":"\t// only inheritors can use","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"ZD292"},"content":"\t/**","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"ZD292"},"content":"\t /**","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"ZD292"},"content":"\t * Type of Command execution depends on the implementation.","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"ZD292"},"content":"\t * @param taskList list of tasks to execute Command on.","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"ZD292"},"content":"\t * @param u displays execution of Command.","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"ZD292"},"content":"\t * @param storage can write tasks to store to text file depending on Command type.","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"ZD292"},"content":"\t */","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"ZD292"},"content":"\tpublic abstract String execute(TaskList taskList, Ui u, Storage storage);","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"ZD292"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"ZD292":21}},{"path":"src/main/java/duke/command/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ZD292"},"content":"package duke.command;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"ZD292"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"ZD292"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"ZD292"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"ZD292"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"ZD292"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"ZD292"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"ZD292"},"content":" * Commmand to delete a task from the tasklist","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"ZD292"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"ZD292"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"ZD292"},"content":"\tprivate final int pos;","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"ZD292"},"content":"\tpublic DeleteCommand(int pos) {","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"ZD292"},"content":"\t\tthis.pos \u003d pos;","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"ZD292"},"content":"\t/**","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"ZD292"},"content":"\t * Executes the delete command which deletes a task from taskList.","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"ZD292"},"content":"\t * Ui displays deleting to user.","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"ZD292"},"content":"\t * Deletion changes the contents in storage.","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"ZD292"},"content":"\t * Updates both storage and local taskList for reference during execution","lastModifiedDate":"2023-09-10"},{"lineNumber":21,"author":{"gitId":"ZD292"},"content":"\t * @param taskList list of tasks to execute.","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"ZD292"},"content":"\t * @param ui displays execution of deleting.","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"ZD292"},"content":"\t * @param storage can write tasks to store on the text file.","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"ZD292"},"content":"\t */","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"ZD292"},"content":"\t@Override","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"ZD292"},"content":"\tpublic String execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-10"},{"lineNumber":27,"author":{"gitId":"ZD292"},"content":"\t\tString remaining \u003d taskList.getRemaining();","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"ZD292"},"content":"\t\tTask task \u003d taskList.getTask(pos);","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"ZD292"},"content":"\t\ttry {","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"ZD292"},"content":"\t\t\tstorage.deleteFromFile(pos);","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"ZD292"},"content":"\t\t\tSystem.out.println(ui.showDelete(task, remaining));","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"ZD292"},"content":"\t\t\treturn ui.showDelete(task, remaining);","lastModifiedDate":"2023-09-10"},{"lineNumber":33,"author":{"gitId":"ZD292"},"content":"\t\t} catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"ZD292"},"content":"\t\t\treturn e.getMessage();","lastModifiedDate":"2023-09-10"},{"lineNumber":35,"author":{"gitId":"ZD292"},"content":"//\t\t\tSystem.out.println(e.getMessage());","lastModifiedDate":"2023-09-10"},{"lineNumber":36,"author":{"gitId":"ZD292"},"content":"\t\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"ZD292"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"ZD292":38}},{"path":"src/main/java/duke/command/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ZD292"},"content":"package duke.command;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"ZD292"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"ZD292"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"ZD292"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"ZD292"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"ZD292"},"content":" * Finds Task in taskList according to keyword.","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"ZD292"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"ZD292"},"content":"public class FindCommand extends Command {","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"ZD292"},"content":"\tprivate String keyWord;","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"ZD292"},"content":"\tpublic FindCommand(String keyWord) {","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"ZD292"},"content":"\t\tthis.keyWord \u003d keyWord;","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"ZD292"},"content":"\t/**","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"ZD292"},"content":"\t * Finds the Tasks that contains keywords and prints thenm in a list","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"ZD292"},"content":"\t * @param taskList list of Task.","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"ZD292"},"content":"\t * @param ui Ui to interact with User.","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"ZD292"},"content":"\t * @param storage Storage to store Task.","lastModifiedDate":"2023-09-10"},{"lineNumber":21,"author":{"gitId":"ZD292"},"content":"\t */","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"ZD292"},"content":"\t@Override","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"ZD292"},"content":"\tpublic String execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"ZD292"},"content":"\t\tStringBuilder br \u003d taskList.findTask(this.keyWord);","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"ZD292"},"content":"\t\tSystem.out.println(ui.showFindTask(br));","lastModifiedDate":"2023-09-10"},{"lineNumber":26,"author":{"gitId":"ZD292"},"content":"\t\treturn ui.showFindTask(br);","lastModifiedDate":"2023-09-10"},{"lineNumber":27,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"ZD292"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"ZD292":28}},{"path":"src/main/java/duke/command/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ZD292"},"content":"package duke.command;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"ZD292"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"ZD292"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"ZD292"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"ZD292"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"ZD292"},"content":" * Command to list the task in the list of tasks, taskList.","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"ZD292"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"ZD292"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"ZD292"},"content":"\t/**","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"ZD292"},"content":"\t * Executes the list command which lists all tasks from taskList.","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"ZD292"},"content":"\t * Ui displays listing to user.","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"ZD292"},"content":"\t * Storage does not store anything in this case.","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"ZD292"},"content":"\t * @param taskList list of tasks to execute.","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"ZD292"},"content":"\t * @param ui displays listing of task in taskList.","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"ZD292"},"content":"\t * @param storage can write tasks to store on the text file.","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"ZD292"},"content":"\t */","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"ZD292"},"content":"\t@Override","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"ZD292"},"content":"\tpublic String execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"ZD292"},"content":"\t\tSystem.out.println(taskList.list(ui));","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"ZD292"},"content":"\t\treturn taskList.list(ui);","lastModifiedDate":"2023-09-10"},{"lineNumber":21,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"ZD292"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"ZD292":22}},{"path":"src/main/java/duke/command/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ZD292"},"content":"package duke.command;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"ZD292"},"content":"import duke.DukeException;","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"ZD292"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"ZD292"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"ZD292"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"ZD292"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"ZD292"},"content":" * Command to Mark or Unmark task in the taskList.","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"ZD292"},"content":" * pos is position of task in taskList starting from 1","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"ZD292"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"ZD292"},"content":"public class MarkCommand extends Command {","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"ZD292"},"content":"\tprivate final boolean toMark;","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"ZD292"},"content":"\tprivate final int pos;","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"ZD292"},"content":"\tpublic MarkCommand(boolean toMark, int pos) {","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"ZD292"},"content":"\t\tthis.toMark \u003d toMark;","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"ZD292"},"content":"\t\tthis.pos \u003d pos;","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"ZD292"},"content":"\t/**","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"ZD292"},"content":"\t * Executes the Mark command which Marks or Unmarks a task from taskList.","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"ZD292"},"content":"\t * Ui displays Marking or Unmarks to user.","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"ZD292"},"content":"\t * @param taskList list of tasks to mark.","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"ZD292"},"content":"\t * @param ui displays execution of Marking or Unmarking.","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"ZD292"},"content":"\t * @param storage can write tasks to store on the text file.","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"ZD292"},"content":"\t */","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"ZD292"},"content":"\t@Override","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"ZD292"},"content":"\tpublic String execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"ZD292"},"content":"\t\ttry {","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"ZD292"},"content":"\t\t\ttaskList.toMark(toMark, pos, ui);","lastModifiedDate":"2023-09-10"},{"lineNumber":30,"author":{"gitId":"ZD292"},"content":"\t\t\tstorage.updateMarkInFile();","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"ZD292"},"content":"\t\t\tSystem.out.println(ui.showMark(taskList.getTask(pos - 1)));","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"ZD292"},"content":"\t\t\treturn ui.showMark(taskList.getTask(pos - 1));","lastModifiedDate":"2023-09-10"},{"lineNumber":33,"author":{"gitId":"ZD292"},"content":"\t\t} catch (DukeException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"ZD292"},"content":"\t\t\treturn e.getMessage();","lastModifiedDate":"2023-09-10"},{"lineNumber":35,"author":{"gitId":"ZD292"},"content":"\t\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"ZD292"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"ZD292":37}},{"path":"src/main/java/duke/messages/Messages.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ZD292"},"content":"package duke.messages;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"ZD292"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"ZD292"},"content":" * Represents different commonly used Messages to be printed to user.","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"ZD292"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"ZD292"},"content":"public class Messages {","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"ZD292"},"content":"\tpublic static final String MESSAGE_INVALID_COMMAND_FORMAT \u003d \"Invalid command format \\n%s\";","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"ZD292"},"content":"\tpublic static final String MESSGAE_INIT_FAILED \u003d \"Failed to read duke text storage file: \\n%s\";","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"ZD292"},"content":"\tpublic static final String MESSGAE_USING_STORAGE \u003d \"Using duke text storage file: \\n%s\";","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"ZD292"},"content":"\tpublic static final String MESSGAE_INCORRECT_TIME \u003d \"Enter time formt either like: \\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t+ \"630am 29june or 06:30:00 2023-06-29\";","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"ZD292"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"ZD292":14}},{"path":"src/main/java/duke/parser/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ZD292"},"content":"package duke.parser;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"ZD292"},"content":"import duke.DukeException;","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"ZD292"},"content":"import duke.command.AddCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"ZD292"},"content":"import duke.command.ByeCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"ZD292"},"content":"import duke.command.Command;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"ZD292"},"content":"import duke.command.DeleteCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"ZD292"},"content":"import duke.command.FindCommand;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"ZD292"},"content":"import duke.command.ListCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"ZD292"},"content":"import duke.command.MarkCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"ZD292"},"content":"import duke.task.DeadLine;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"ZD292"},"content":"import duke.task.Event;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"ZD292"},"content":"import duke.task.ToDo;","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"ZD292"},"content":"import java.util.Arrays;","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"ZD292"},"content":"import java.util.Calendar;","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"ZD292"},"content":"import java.util.Date;","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"ZD292"},"content":"import java.text.ParseException;","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"ZD292"},"content":"import java.text.SimpleDateFormat;","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"ZD292"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"ZD292"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"ZD292"},"content":" * Represents a formatting object that formats inputs in known formats.","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"ZD292"},"content":" * Reformats these inputs into different forms depending on the Command.","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"ZD292"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"ZD292"},"content":"public class Parser {","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"ZD292"},"content":"\t/**","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"ZD292"},"content":"\t * Returns the integer value of a month.","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"ZD292"},"content":"\t * @param month String representation of month.","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"ZD292"},"content":"\t * @return Integer representation of month","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"ZD292"},"content":"\t * @throws IllegalArgumentException Throws exception should the month not be recognised.","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"ZD292"},"content":"\t */","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"ZD292"},"content":"\tpublic static String monthValue(String month) throws IllegalArgumentException {","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"ZD292"},"content":"\t\tswitch (month.toLowerCase()) {","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"ZD292"},"content":"\t\t\tcase \"january\":","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"ZD292"},"content":"\t\t\t\treturn \"01\";","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"ZD292"},"content":"\t\t\tcase \"february\":","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"ZD292"},"content":"\t\t\t\treturn \"02\";","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"ZD292"},"content":"\t\t\tcase \"march\":","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"ZD292"},"content":"\t\t\t\treturn \"03\";","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"ZD292"},"content":"\t\t\tcase \"april\":","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"ZD292"},"content":"\t\t\t\treturn \"04\";","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"ZD292"},"content":"\t\t\tcase \"may\":","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"ZD292"},"content":"\t\t\t\treturn \"05\";","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"ZD292"},"content":"\t\t\tcase \"june\":","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"ZD292"},"content":"\t\t\t\treturn \"06\";","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"ZD292"},"content":"\t\t\tcase \"july\":","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"ZD292"},"content":"\t\t\t\treturn \"07\";","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"ZD292"},"content":"\t\t\tcase \"august\":","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"ZD292"},"content":"\t\t\t\treturn \"08\";","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"ZD292"},"content":"\t\t\tcase \"september\":","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"ZD292"},"content":"\t\t\t\treturn \"09\";","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"ZD292"},"content":"\t\t\tcase \"october\":","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"ZD292"},"content":"\t\t\t\treturn \"10\";","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"ZD292"},"content":"\t\t\tcase \"november\":","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"ZD292"},"content":"\t\t\t\treturn \"11\";","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"ZD292"},"content":"\t\t\tcase \"december\":","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"ZD292"},"content":"\t\t\t\treturn \"12\";","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"ZD292"},"content":"\t\t\tdefault:","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"ZD292"},"content":"\t\t\t\tthrow new IllegalArgumentException(\"Invalid month string\");","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"ZD292"},"content":"\t\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"ZD292"},"content":"\t/**","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"ZD292"},"content":"\t * Returns the Date formatted in the form: 2015-02-20T06:30:00.","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"ZD292"},"content":"\t * @param timeDate Array containing time and date at index 0 and 1.","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"ZD292"},"content":"\t * @return Formatted String.","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"ZD292"},"content":"\t */","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"ZD292"},"content":"\tpublic static String formatDate(String[] timeDate) {","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"ZD292"},"content":"\t\tSimpleDateFormat inputTime \u003d new SimpleDateFormat(\"ha\");","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"ZD292"},"content":"\t\tSimpleDateFormat outputTime \u003d new SimpleDateFormat(\"HH:mm:ss\");","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"ZD292"},"content":"\t\tString year \u003d Integer.toString(Calendar.getInstance().get(Calendar.YEAR));","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"ZD292"},"content":"\t\tString dateFormat \u003d \"\";","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"ZD292"},"content":"\t\ttry {","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"ZD292"},"content":"\t\t\tDate time \u003d inputTime.parse(timeDate[0]);","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"ZD292"},"content":"\t\t\tString formatTime \u003d outputTime.format(time);","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"ZD292"},"content":"\t\t\tif (timeDate.length !\u003d 2) {","lastModifiedDate":"2023-09-04"},{"lineNumber":77,"author":{"gitId":"ZD292"},"content":"\t\t\t\tthrow new DukeException(\"Enter time and Date properly\");","lastModifiedDate":"2023-09-04"},{"lineNumber":78,"author":{"gitId":"ZD292"},"content":"\t\t\t}","lastModifiedDate":"2023-09-04"},{"lineNumber":79,"author":{"gitId":"ZD292"},"content":"\t\t\tString dayMonth \u003d timeDate[1];","lastModifiedDate":"2023-09-03"},{"lineNumber":80,"author":{"gitId":"ZD292"},"content":"\t\t\tString day;","lastModifiedDate":"2023-09-03"},{"lineNumber":81,"author":{"gitId":"ZD292"},"content":"\t\t\tString month;","lastModifiedDate":"2023-09-03"},{"lineNumber":82,"author":{"gitId":"ZD292"},"content":"\t\t\ttry {","lastModifiedDate":"2023-09-03"},{"lineNumber":83,"author":{"gitId":"ZD292"},"content":"\t\t\t\tInteger.parseInt(dayMonth.substring(1, 2));","lastModifiedDate":"2023-09-03"},{"lineNumber":84,"author":{"gitId":"ZD292"},"content":"\t\t\t\tday \u003d dayMonth.substring(0,2);","lastModifiedDate":"2023-09-03"},{"lineNumber":85,"author":{"gitId":"ZD292"},"content":"\t\t\t\tmonth \u003d dayMonth.substring(2);","lastModifiedDate":"2023-09-03"},{"lineNumber":86,"author":{"gitId":"ZD292"},"content":"\t\t\t} catch (NumberFormatException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":87,"author":{"gitId":"ZD292"},"content":"\t\t\t\tday \u003d dayMonth.substring(0,1);","lastModifiedDate":"2023-09-03"},{"lineNumber":88,"author":{"gitId":"ZD292"},"content":"\t\t\t\tmonth \u003d dayMonth.substring(1);","lastModifiedDate":"2023-09-03"},{"lineNumber":89,"author":{"gitId":"ZD292"},"content":"\t\t\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":90,"author":{"gitId":"ZD292"},"content":"\t\t\tStringBuilder br \u003d new StringBuilder();","lastModifiedDate":"2023-09-03"},{"lineNumber":91,"author":{"gitId":"ZD292"},"content":"\t\t\tbr.append(year).append(\"-\").append(monthValue(month)).append(\"-\").append(day).append(\"T\").append(formatTime);","lastModifiedDate":"2023-09-03"},{"lineNumber":92,"author":{"gitId":"ZD292"},"content":"\t\t\tdateFormat \u003d br.toString();","lastModifiedDate":"2023-09-03"},{"lineNumber":93,"author":{"gitId":"ZD292"},"content":"\t\t} catch (ParseException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":94,"author":{"gitId":"ZD292"},"content":"\t\t\tSystem.out.println(\"format of time is not right, enter it as /by 630pm 18june\");","lastModifiedDate":"2023-09-03"},{"lineNumber":95,"author":{"gitId":"ZD292"},"content":"\t\t} catch (DukeException d) {","lastModifiedDate":"2023-09-04"},{"lineNumber":96,"author":{"gitId":"ZD292"},"content":"\t\t\tSystem.out.println(d.getMessage());","lastModifiedDate":"2023-09-04"},{"lineNumber":97,"author":{"gitId":"ZD292"},"content":"\t\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":98,"author":{"gitId":"ZD292"},"content":"\t\treturn dateFormat;","lastModifiedDate":"2023-09-03"},{"lineNumber":99,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":100,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":101,"author":{"gitId":"ZD292"},"content":"\t/**","lastModifiedDate":"2023-09-04"},{"lineNumber":102,"author":{"gitId":"ZD292"},"content":"\t * Converts formatted string into a command.","lastModifiedDate":"2023-09-04"},{"lineNumber":103,"author":{"gitId":"ZD292"},"content":"\t * first String array contains description of command.","lastModifiedDate":"2023-09-04"},{"lineNumber":104,"author":{"gitId":"ZD292"},"content":"\t * Accepeted inputs for time are,","lastModifiedDate":"2023-09-04"},{"lineNumber":105,"author":{"gitId":"ZD292"},"content":"\t * /by 06:30:00 2015-06-29","lastModifiedDate":"2023-09-04"},{"lineNumber":106,"author":{"gitId":"ZD292"},"content":"\t * /by 630am or pm 29 june.","lastModifiedDate":"2023-09-04"},{"lineNumber":107,"author":{"gitId":"ZD292"},"content":"\t * @param fullCommand String representing the Command with all details.","lastModifiedDate":"2023-09-04"},{"lineNumber":108,"author":{"gitId":"ZD292"},"content":"\t * @return Command which can be executed.","lastModifiedDate":"2023-09-04"},{"lineNumber":109,"author":{"gitId":"ZD292"},"content":"\t * @throws DukeException If fullCommand does not match any known Command.","lastModifiedDate":"2023-09-04"},{"lineNumber":110,"author":{"gitId":"ZD292"},"content":"\t */","lastModifiedDate":"2023-09-04"},{"lineNumber":111,"author":{"gitId":"ZD292"},"content":"\tpublic static Command parse(String fullCommand) throws DukeException {","lastModifiedDate":"2023-09-03"},{"lineNumber":112,"author":{"gitId":"ZD292"},"content":"\t\tString[] command \u003d fullCommand.split(\" \");","lastModifiedDate":"2023-09-03"},{"lineNumber":113,"author":{"gitId":"ZD292"},"content":"\t\tString commandWord \u003d fullCommand.split(\" \")[0];","lastModifiedDate":"2023-09-03"},{"lineNumber":114,"author":{"gitId":"ZD292"},"content":"\t\tString[] items \u003d fullCommand.split(\"/\");","lastModifiedDate":"2023-09-03"},{"lineNumber":115,"author":{"gitId":"ZD292"},"content":"\t\tString[] first \u003d items[0].split(\" \");","lastModifiedDate":"2023-09-03"},{"lineNumber":116,"author":{"gitId":"ZD292"},"content":"\t\tStringBuilder description \u003d new StringBuilder();","lastModifiedDate":"2023-09-03"},{"lineNumber":117,"author":{"gitId":"ZD292"},"content":"\t\tStringBuilder startTime \u003d new StringBuilder();","lastModifiedDate":"2023-09-03"},{"lineNumber":118,"author":{"gitId":"ZD292"},"content":"\t\tStringBuilder endTime \u003d new StringBuilder();","lastModifiedDate":"2023-09-03"},{"lineNumber":119,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":120,"author":{"gitId":"ZD292"},"content":"\t\tswitch (commandWord) {","lastModifiedDate":"2023-09-03"},{"lineNumber":121,"author":{"gitId":"ZD292"},"content":"\t\t\tcase \"bye\":","lastModifiedDate":"2023-09-03"},{"lineNumber":122,"author":{"gitId":"ZD292"},"content":"\t\t\t\treturn new ByeCommand();","lastModifiedDate":"2023-09-03"},{"lineNumber":123,"author":{"gitId":"ZD292"},"content":"\t\t\tcase \"list\":","lastModifiedDate":"2023-09-03"},{"lineNumber":124,"author":{"gitId":"ZD292"},"content":"\t\t\t\treturn new ListCommand();","lastModifiedDate":"2023-09-03"},{"lineNumber":125,"author":{"gitId":"ZD292"},"content":"\t\t\tcase \"find\":","lastModifiedDate":"2023-09-04"},{"lineNumber":126,"author":{"gitId":"ZD292"},"content":"\t\t\t\ttry {","lastModifiedDate":"2023-09-04"},{"lineNumber":127,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\tif (command.length !\u003d 2) {","lastModifiedDate":"2023-09-04"},{"lineNumber":128,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\tthrow new DukeException(\"Enter the find with one keyword\");","lastModifiedDate":"2023-09-04"},{"lineNumber":129,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t}","lastModifiedDate":"2023-09-04"},{"lineNumber":130,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\tString keyWord \u003d command[1];","lastModifiedDate":"2023-09-04"},{"lineNumber":131,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\treturn new FindCommand(keyWord);","lastModifiedDate":"2023-09-04"},{"lineNumber":132,"author":{"gitId":"ZD292"},"content":"\t\t\t\t} catch (DukeException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":133,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\tSystem.out.println(e.getMessage());","lastModifiedDate":"2023-09-04"},{"lineNumber":134,"author":{"gitId":"ZD292"},"content":"\t\t\t\t}","lastModifiedDate":"2023-09-04"},{"lineNumber":135,"author":{"gitId":"ZD292"},"content":"\t\t\t\tbreak;","lastModifiedDate":"2023-09-04"},{"lineNumber":136,"author":{"gitId":"ZD292"},"content":"\t\t\tcase \"mark\":","lastModifiedDate":"2023-09-03"},{"lineNumber":137,"author":{"gitId":"ZD292"},"content":"\t\t\t\ttry {","lastModifiedDate":"2023-09-03"},{"lineNumber":138,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\tif (command.length !\u003d 2) {","lastModifiedDate":"2023-09-04"},{"lineNumber":139,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\tthrow new DukeException(\"Please specify where to mark\");","lastModifiedDate":"2023-09-04"},{"lineNumber":140,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t}","lastModifiedDate":"2023-09-04"},{"lineNumber":141,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\tint pos \u003d Integer.parseInt(command[1]);","lastModifiedDate":"2023-09-03"},{"lineNumber":142,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\treturn new MarkCommand(true, pos);","lastModifiedDate":"2023-09-03"},{"lineNumber":143,"author":{"gitId":"ZD292"},"content":"\t\t\t\t} catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":144,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\tSystem.out.println(\"Cannot mark given position\\n\" + e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":145,"author":{"gitId":"ZD292"},"content":"\t\t\t\t} catch (NumberFormatException n) {","lastModifiedDate":"2023-09-03"},{"lineNumber":146,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\tSystem.out.println(\"Not a valid position to mark\\n\" + n.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":147,"author":{"gitId":"ZD292"},"content":"\t\t\t\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":148,"author":{"gitId":"ZD292"},"content":"\t\t\t\tbreak;","lastModifiedDate":"2023-09-04"},{"lineNumber":149,"author":{"gitId":"ZD292"},"content":"\t\t\tcase \"unmark\":","lastModifiedDate":"2023-09-03"},{"lineNumber":150,"author":{"gitId":"ZD292"},"content":"\t\t\t\ttry {","lastModifiedDate":"2023-09-03"},{"lineNumber":151,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\tif (command.length !\u003d 2) {","lastModifiedDate":"2023-09-04"},{"lineNumber":152,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\tthrow new DukeException(\"Please specify where to unmark\");","lastModifiedDate":"2023-09-04"},{"lineNumber":153,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t}","lastModifiedDate":"2023-09-04"},{"lineNumber":154,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\tint pos \u003d Integer.parseInt(command[1]);","lastModifiedDate":"2023-09-03"},{"lineNumber":155,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\treturn new MarkCommand(false, pos);","lastModifiedDate":"2023-09-03"},{"lineNumber":156,"author":{"gitId":"ZD292"},"content":"\t\t\t\t} catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":157,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\tSystem.out.println(\"Cannot mark given position\\n\" + e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":158,"author":{"gitId":"ZD292"},"content":"\t\t\t\t} catch (NumberFormatException n) {","lastModifiedDate":"2023-09-03"},{"lineNumber":159,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\tSystem.out.println(\"Not a valid position to mark\\n\" + n.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":160,"author":{"gitId":"ZD292"},"content":"\t\t\t\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":161,"author":{"gitId":"ZD292"},"content":"\t\t\t\tbreak;","lastModifiedDate":"2023-09-04"},{"lineNumber":162,"author":{"gitId":"ZD292"},"content":"\t\t\tcase \"delete\":","lastModifiedDate":"2023-09-03"},{"lineNumber":163,"author":{"gitId":"ZD292"},"content":"\t\t\t\ttry {","lastModifiedDate":"2023-09-03"},{"lineNumber":164,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\tif (command.length !\u003d 2) {","lastModifiedDate":"2023-09-03"},{"lineNumber":165,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\tthrow new DukeException(\"Enter a valid position to delete\");","lastModifiedDate":"2023-09-03"},{"lineNumber":166,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":167,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\tint pos \u003d Integer.parseInt(command[1]) - 1;","lastModifiedDate":"2023-09-03"},{"lineNumber":168,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\treturn new DeleteCommand(pos);","lastModifiedDate":"2023-09-03"},{"lineNumber":169,"author":{"gitId":"ZD292"},"content":"\t\t\t\t} catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":170,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\tSystem.out.println(\"Trying to delete from an invalid index\\n\" + e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":171,"author":{"gitId":"ZD292"},"content":"\t\t\t\t} catch (DukeException d) {","lastModifiedDate":"2023-09-03"},{"lineNumber":172,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\tSystem.out.println(d.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":173,"author":{"gitId":"ZD292"},"content":"\t\t\t\t} catch (NumberFormatException n) {","lastModifiedDate":"2023-09-03"},{"lineNumber":174,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\tSystem.out.println(\"The delete argument is not recognise as an integer\\n\" + n.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":175,"author":{"gitId":"ZD292"},"content":"\t\t\t\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":176,"author":{"gitId":"ZD292"},"content":"\t\t\t\tbreak;","lastModifiedDate":"2023-09-04"},{"lineNumber":177,"author":{"gitId":"ZD292"},"content":"\t\t\tcase \"todo\":","lastModifiedDate":"2023-09-03"},{"lineNumber":178,"author":{"gitId":"ZD292"},"content":"\t\t\t\ttry {","lastModifiedDate":"2023-09-03"},{"lineNumber":179,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\tif (command.length \u003d\u003d 1) {","lastModifiedDate":"2023-09-03"},{"lineNumber":180,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\tthrow new DukeException(\"Enter todo with a description!\");","lastModifiedDate":"2023-09-03"},{"lineNumber":181,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":182,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\tfor (String s : Arrays.copyOfRange(command, 1, command.length)) {","lastModifiedDate":"2023-09-03"},{"lineNumber":183,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\tdescription.append(s);","lastModifiedDate":"2023-09-03"},{"lineNumber":184,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\tdescription.append(\" \");","lastModifiedDate":"2023-09-03"},{"lineNumber":185,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":186,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\tdescription.deleteCharAt(description.length() - 1);","lastModifiedDate":"2023-09-03"},{"lineNumber":187,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\treturn new AddCommand(new ToDo(description.toString()));","lastModifiedDate":"2023-09-04"},{"lineNumber":188,"author":{"gitId":"ZD292"},"content":"\t\t\t\t} catch (DukeException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":189,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\tSystem.out.println(e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":190,"author":{"gitId":"ZD292"},"content":"\t\t\t\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":191,"author":{"gitId":"ZD292"},"content":"\t\t\t\tbreak;","lastModifiedDate":"2023-09-04"},{"lineNumber":192,"author":{"gitId":"ZD292"},"content":"\t\t\tcase \"deadline\":","lastModifiedDate":"2023-09-03"},{"lineNumber":193,"author":{"gitId":"ZD292"},"content":"\t\t\t\ttry {","lastModifiedDate":"2023-09-03"},{"lineNumber":194,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\tif (items.length !\u003d 2) {","lastModifiedDate":"2023-09-04"},{"lineNumber":195,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\tthrow new DukeException(\"enter deadline like this, deadline description /by:\");","lastModifiedDate":"2023-09-03"},{"lineNumber":196,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":197,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\tString[] byCheck \u003d items[1].split(\" \");","lastModifiedDate":"2023-09-04"},{"lineNumber":198,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\tif (!byCheck[0].equals(\"by\")) {","lastModifiedDate":"2023-09-04"},{"lineNumber":199,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\tthrow new DukeException(\"enter deadline like this, deadline description /by: enter the by!\");","lastModifiedDate":"2023-09-04"},{"lineNumber":200,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t}","lastModifiedDate":"2023-09-04"},{"lineNumber":201,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\tString[] start \u003d items[0].split(\" \");","lastModifiedDate":"2023-09-03"},{"lineNumber":202,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\tif (start.length \u003d\u003d 1) {","lastModifiedDate":"2023-09-04"},{"lineNumber":203,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\tthrow new DukeException(\"enter deadline with description\");","lastModifiedDate":"2023-09-04"},{"lineNumber":204,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t}","lastModifiedDate":"2023-09-04"},{"lineNumber":205,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\tfor (String s : Arrays.copyOfRange(start, 1, start.length)) {","lastModifiedDate":"2023-09-03"},{"lineNumber":206,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\tdescription.append(s).append(\" \");","lastModifiedDate":"2023-09-03"},{"lineNumber":207,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":208,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\tdescription.deleteCharAt(description.length() - 1);","lastModifiedDate":"2023-09-03"},{"lineNumber":209,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\tif (items[1].contains(\"am\") || items[1].contains(\"pm\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":210,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\tString[] timeDate \u003d Arrays.copyOfRange(items[1].split(\" \"), 1, items[1].split(\" \").length);","lastModifiedDate":"2023-09-03"},{"lineNumber":211,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\tif (timeDate.length !\u003d 2) {","lastModifiedDate":"2023-09-04"},{"lineNumber":212,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\t\tthrow new DukeException(\"Enter time and date properly\");","lastModifiedDate":"2023-09-04"},{"lineNumber":213,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\t}","lastModifiedDate":"2023-09-04"},{"lineNumber":214,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\tString dateFormat \u003d formatDate(timeDate);","lastModifiedDate":"2023-09-03"},{"lineNumber":215,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\tLocalDateTime begin \u003d LocalDateTime.parse(dateFormat);","lastModifiedDate":"2023-09-03"},{"lineNumber":216,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\treturn new AddCommand(new DeadLine(description.toString(), begin));","lastModifiedDate":"2023-09-04"},{"lineNumber":217,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t} else {","lastModifiedDate":"2023-09-03"},{"lineNumber":218,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\tString[] time \u003d Arrays.copyOfRange(items[1].split(\" \"), 1, 3);","lastModifiedDate":"2023-09-03"},{"lineNumber":219,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\tstartTime.append(time[1]).append(\"T\").append(time[0]);","lastModifiedDate":"2023-09-03"},{"lineNumber":220,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\tLocalDateTime begin \u003d LocalDateTime.parse(startTime.toString());","lastModifiedDate":"2023-09-03"},{"lineNumber":221,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\treturn new AddCommand(new DeadLine(description.toString(), begin));","lastModifiedDate":"2023-09-04"},{"lineNumber":222,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":223,"author":{"gitId":"ZD292"},"content":"\t\t\t\t} catch (DukeException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":224,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\tSystem.out.println(e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":225,"author":{"gitId":"ZD292"},"content":"\t\t\t\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":226,"author":{"gitId":"ZD292"},"content":"\t\t\t\tbreak;","lastModifiedDate":"2023-09-04"},{"lineNumber":227,"author":{"gitId":"ZD292"},"content":"\t\t\tcase \"event\":","lastModifiedDate":"2023-09-03"},{"lineNumber":228,"author":{"gitId":"ZD292"},"content":"\t\t\t\ttry {","lastModifiedDate":"2023-09-03"},{"lineNumber":229,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\tif (items.length !\u003d 3) {","lastModifiedDate":"2023-09-04"},{"lineNumber":230,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\tthrow new DukeException(\"enter event properly, event description /from /to\");","lastModifiedDate":"2023-09-04"},{"lineNumber":231,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t}","lastModifiedDate":"2023-09-04"},{"lineNumber":232,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\tString[] startCheck \u003d items[1].split(\" \");","lastModifiedDate":"2023-09-03"},{"lineNumber":233,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\tString[] endCheck \u003d items[2].split(\" \");","lastModifiedDate":"2023-09-03"},{"lineNumber":234,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\tif (!endCheck[0].equals(\"to\") || !startCheck[0].equals(\"from\")) {","lastModifiedDate":"2023-09-04"},{"lineNumber":235,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\tthrow new DukeException(\"enter event properly, event description /from /to\");","lastModifiedDate":"2023-09-03"},{"lineNumber":236,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":237,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\tfor (String s : Arrays.copyOfRange(first, 1, first.length)) {","lastModifiedDate":"2023-09-03"},{"lineNumber":238,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\tdescription.append(s).append(\" \");","lastModifiedDate":"2023-09-03"},{"lineNumber":239,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":240,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\tdescription.deleteCharAt(description.length() - 1);","lastModifiedDate":"2023-09-03"},{"lineNumber":241,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\tif (items[1].contains(\"am\") || items[1].contains(\"pm\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":242,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\tString[] fromTimeStart \u003d items[1].split(\" \");","lastModifiedDate":"2023-09-04"},{"lineNumber":243,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\tString[] byTimeEnd \u003d items[2].split(\" \");","lastModifiedDate":"2023-09-04"},{"lineNumber":244,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\tif (fromTimeStart.length !\u003d 3 || byTimeEnd.length !\u003d 3) {","lastModifiedDate":"2023-09-04"},{"lineNumber":245,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\t\tthrow new DukeException(\"Enter Event properly\");","lastModifiedDate":"2023-09-04"},{"lineNumber":246,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\t}","lastModifiedDate":"2023-09-04"},{"lineNumber":247,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\tString[] timeDateStart \u003d Arrays.copyOfRange(fromTimeStart, 1, fromTimeStart.length);","lastModifiedDate":"2023-09-04"},{"lineNumber":248,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\tString dateFormatStart \u003d formatDate(timeDateStart);","lastModifiedDate":"2023-09-03"},{"lineNumber":249,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\tLocalDateTime begin \u003d LocalDateTime.parse(dateFormatStart);","lastModifiedDate":"2023-09-03"},{"lineNumber":250,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\tString[] timeDateEnd \u003d Arrays.copyOfRange(byTimeEnd, 1, byTimeEnd.length);","lastModifiedDate":"2023-09-04"},{"lineNumber":251,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\tString dateFormatEnd \u003d formatDate(timeDateEnd);","lastModifiedDate":"2023-09-03"},{"lineNumber":252,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\tLocalDateTime end \u003d LocalDateTime.parse(dateFormatEnd);","lastModifiedDate":"2023-09-03"},{"lineNumber":253,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\tif (begin.isAfter(end)) {","lastModifiedDate":"2023-09-03"},{"lineNumber":254,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\t\tthrow new DukeException(\"Start is after end!\");","lastModifiedDate":"2023-09-03"},{"lineNumber":255,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":256,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\treturn new AddCommand(new Event(description.toString(), begin, end));","lastModifiedDate":"2023-09-03"},{"lineNumber":257,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t} else {","lastModifiedDate":"2023-09-03"},{"lineNumber":258,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\tString[] timeStart \u003d Arrays.copyOfRange(items[1].split(\" \"), 1, 3);","lastModifiedDate":"2023-09-03"},{"lineNumber":259,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\tstartTime.append(timeStart[1]).append(\"T\").append(timeStart[0]);","lastModifiedDate":"2023-09-03"},{"lineNumber":260,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\tSystem.out.println(startTime.toString());","lastModifiedDate":"2023-09-03"},{"lineNumber":261,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\tLocalDateTime begin \u003d LocalDateTime.parse(startTime.toString());","lastModifiedDate":"2023-09-03"},{"lineNumber":262,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":263,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\tString[] timeEnd \u003d Arrays.copyOfRange(items[2].split(\" \"), 1, 3);","lastModifiedDate":"2023-09-03"},{"lineNumber":264,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\tendTime.append(timeEnd[1]).append(\"T\").append(timeEnd[0]);","lastModifiedDate":"2023-09-03"},{"lineNumber":265,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\tLocalDateTime end \u003d LocalDateTime.parse(endTime.toString());","lastModifiedDate":"2023-09-03"},{"lineNumber":266,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\tif (begin.isAfter(end)) {","lastModifiedDate":"2023-09-03"},{"lineNumber":267,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\t\tthrow new DukeException(\"Start is after end!\");","lastModifiedDate":"2023-09-03"},{"lineNumber":268,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":269,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\treturn new AddCommand(new Event(description.toString(), begin, end));","lastModifiedDate":"2023-09-03"},{"lineNumber":270,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":271,"author":{"gitId":"ZD292"},"content":"\t\t\t\t} catch (DukeException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":272,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\tSystem.out.println(e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":273,"author":{"gitId":"ZD292"},"content":"\t\t\t\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":274,"author":{"gitId":"ZD292"},"content":"\t\t\t\tbreak;","lastModifiedDate":"2023-09-04"},{"lineNumber":275,"author":{"gitId":"ZD292"},"content":"\t\t\tdefault:","lastModifiedDate":"2023-09-03"},{"lineNumber":276,"author":{"gitId":"ZD292"},"content":"\t\t\t\tthrow new DukeException(\"Invalid command that do not match any known command\");","lastModifiedDate":"2023-09-03"},{"lineNumber":277,"author":{"gitId":"ZD292"},"content":"\t\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":278,"author":{"gitId":"ZD292"},"content":"\t\tthrow new DukeException(\"Invalid command does not match any\");","lastModifiedDate":"2023-09-10"},{"lineNumber":279,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":280,"author":{"gitId":"ZD292"},"content":"}","lastModifiedDate":"2023-09-03"},{"lineNumber":281,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"ZD292":281}},{"path":"src/main/java/duke/storage/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ZD292"},"content":"package duke.storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"ZD292"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"ZD292"},"content":"import duke.task.ToDo;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"ZD292"},"content":"import duke.task.DeadLine;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"ZD292"},"content":"import duke.task.Event;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"ZD292"},"content":"import java.io.BufferedReader;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"ZD292"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"ZD292"},"content":"import java.io.FileReader;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"ZD292"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"ZD292"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"ZD292"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"ZD292"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"ZD292"},"content":" * Represents te computer storage system.","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"ZD292"},"content":" * Able to write Task to storage text file through writeFile method.","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"ZD292"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"ZD292"},"content":"public class Storage {","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"ZD292"},"content":"\tprivate String filePath;","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"ZD292"},"content":"\tprivate ArrayList\u003cTask\u003e taskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"ZD292"},"content":"\tpublic Storage(String filePath) {","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"ZD292"},"content":"\t\tthis.filePath \u003d filePath;","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"ZD292"},"content":"\t\tthis.taskList \u003d new ArrayList\u003cTask\u003e(100);","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"ZD292"},"content":"\t/**","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"ZD292"},"content":"\t * Writes Task into text file.","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"ZD292"},"content":"\t * Creates text file if it does not exist.","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"ZD292"},"content":"\t * @param task Thing to be done.","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"ZD292"},"content":"\t * @throws IOException If unable to write file.","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"ZD292"},"content":"\t */","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"ZD292"},"content":"\tpublic void addToFile(Task task) throws IOException {","lastModifiedDate":"2023-09-10"},{"lineNumber":35,"author":{"gitId":"ZD292"},"content":"\t\ttaskList.add(task);","lastModifiedDate":"2023-09-10"},{"lineNumber":36,"author":{"gitId":"ZD292"},"content":"\t\ttry {","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"ZD292"},"content":"\t\t\tFileWriter fw \u003d new FileWriter(filePath, true);","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"ZD292"},"content":"\t\t\t\tfw.write(task.writeToFile());","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"ZD292"},"content":"\t\t\t\tfw.write(\"\\n\");","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"ZD292"},"content":"\t\t\tfw.close();","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"ZD292"},"content":"\t\t} catch (IOException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"ZD292"},"content":"\t\t\tthrow new IOException(\"write fail\");","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"ZD292"},"content":"\t\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"ZD292"},"content":"\t/**","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"ZD292"},"content":"\t * Reads stored text file line by line.","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"ZD292"},"content":"\t * @return ArrayList of Task.","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"ZD292"},"content":"\t * @throws IOException If unable to read lines in text file.","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"ZD292"},"content":"\t */","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"ZD292"},"content":"\tpublic ArrayList\u003cTask\u003e readFile() throws IOException {","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"ZD292"},"content":"\t\ttry (BufferedReader in \u003d new BufferedReader(new FileReader(filePath))) {","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"ZD292"},"content":"\t\t\tStringBuilder br \u003d new StringBuilder();","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"ZD292"},"content":"\t\t\tString fileLine;","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"ZD292"},"content":"\t\t\twhile ((fileLine \u003d in.readLine()) !\u003d null) {","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"ZD292"},"content":"\t\t\t\t// append raw unformatted version","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"ZD292"},"content":"\t\t\t\tbr.append(fileLine);","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"ZD292"},"content":"\t\t\t\tbr.append(\"\\n\");","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"ZD292"},"content":"\t\t\t\treadTask(fileLine);","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"ZD292"},"content":"\t\t\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"ZD292"},"content":"\t\t} catch (IOException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"ZD292"},"content":"\t\t\tSystem.out.println(e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"ZD292"},"content":"\t\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"ZD292"},"content":"\t\treturn taskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"ZD292"},"content":"\t// the file stored needs to be reformatted","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"ZD292"},"content":"\t/**","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"ZD292"},"content":"\t * Converts each line into the format shown to reader.","lastModifiedDate":"2023-09-04"},{"lineNumber":72,"author":{"gitId":"ZD292"},"content":"\t * @param fileLine Each line in the file.","lastModifiedDate":"2023-09-04"},{"lineNumber":73,"author":{"gitId":"ZD292"},"content":"\t * @throws IOException If unable to read task in file as Deadline[D], Event[E] or ToDos[T].","lastModifiedDate":"2023-09-04"},{"lineNumber":74,"author":{"gitId":"ZD292"},"content":"\t */","lastModifiedDate":"2023-09-04"},{"lineNumber":75,"author":{"gitId":"ZD292"},"content":"\tpublic void readTask(String fileLine) throws IOException {","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"ZD292"},"content":"\t\tString[] str \u003d fileLine.split(\"\\\\|\");","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"ZD292"},"content":"\t\tfor (int i \u003d 0; i \u003c str.length; i++) {","lastModifiedDate":"2023-09-03"},{"lineNumber":78,"author":{"gitId":"ZD292"},"content":"\t\t\tString s \u003d str[i].trim();","lastModifiedDate":"2023-09-03"},{"lineNumber":79,"author":{"gitId":"ZD292"},"content":"\t\t\tstr[i] \u003d s;","lastModifiedDate":"2023-09-03"},{"lineNumber":80,"author":{"gitId":"ZD292"},"content":"\t\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":81,"author":{"gitId":"ZD292"},"content":"\t\tif (str.length % 3 \u003d\u003d 0 \u0026\u0026 str.length !\u003d 0) {","lastModifiedDate":"2023-09-10"},{"lineNumber":82,"author":{"gitId":"ZD292"},"content":"\t\t\tStringBuilder br \u003d new StringBuilder();","lastModifiedDate":"2023-09-03"},{"lineNumber":83,"author":{"gitId":"ZD292"},"content":"\t\t\tString taskType \u003d str[0];","lastModifiedDate":"2023-09-03"},{"lineNumber":84,"author":{"gitId":"ZD292"},"content":"\t\t\tboolean isDone \u003d Integer.parseInt(str[1]) \u003d\u003d 1;","lastModifiedDate":"2023-09-10"},{"lineNumber":85,"author":{"gitId":"ZD292"},"content":"\t\t\tswitch(taskType) {","lastModifiedDate":"2023-09-03"},{"lineNumber":86,"author":{"gitId":"ZD292"},"content":"\t\t\t\tcase \"T\":","lastModifiedDate":"2023-09-03"},{"lineNumber":87,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\tToDo toDo \u003d new ToDo(str[2]);","lastModifiedDate":"2023-09-10"},{"lineNumber":88,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\tif (isDone) {","lastModifiedDate":"2023-09-10"},{"lineNumber":89,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\ttoDo.markAsDone();","lastModifiedDate":"2023-09-10"},{"lineNumber":90,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t}","lastModifiedDate":"2023-09-10"},{"lineNumber":91,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\ttaskList.add(toDo);","lastModifiedDate":"2023-09-10"},{"lineNumber":92,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\tbreak;","lastModifiedDate":"2023-09-03"},{"lineNumber":93,"author":{"gitId":"ZD292"},"content":"\t\t\t\tcase \"D\":","lastModifiedDate":"2023-09-03"},{"lineNumber":94,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\tLocalDateTime startTime \u003d LocalDateTime.parse(str[3]);","lastModifiedDate":"2023-09-03"},{"lineNumber":95,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\tDeadLine deadLine \u003d new DeadLine(str[2], startTime);","lastModifiedDate":"2023-09-10"},{"lineNumber":96,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\tif (isDone) {","lastModifiedDate":"2023-09-10"},{"lineNumber":97,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\tdeadLine.markAsDone();","lastModifiedDate":"2023-09-10"},{"lineNumber":98,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t}","lastModifiedDate":"2023-09-10"},{"lineNumber":99,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\ttaskList.add(deadLine);","lastModifiedDate":"2023-09-10"},{"lineNumber":100,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\tbreak;","lastModifiedDate":"2023-09-03"},{"lineNumber":101,"author":{"gitId":"ZD292"},"content":"\t\t\t\tcase \"E\":","lastModifiedDate":"2023-09-03"},{"lineNumber":102,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\tLocalDateTime start \u003d LocalDateTime.parse(str[3]);","lastModifiedDate":"2023-09-03"},{"lineNumber":103,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\tLocalDateTime end \u003d LocalDateTime.parse(str[4]);","lastModifiedDate":"2023-09-03"},{"lineNumber":104,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\tEvent event \u003d new Event(str[2], start, end);","lastModifiedDate":"2023-09-10"},{"lineNumber":105,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\tif (isDone) {","lastModifiedDate":"2023-09-10"},{"lineNumber":106,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\tevent.markAsDone();","lastModifiedDate":"2023-09-10"},{"lineNumber":107,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t}","lastModifiedDate":"2023-09-10"},{"lineNumber":108,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\ttaskList.add(event);","lastModifiedDate":"2023-09-10"},{"lineNumber":109,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\tbreak;","lastModifiedDate":"2023-09-03"},{"lineNumber":110,"author":{"gitId":"ZD292"},"content":"\t\t\t\tdefault:","lastModifiedDate":"2023-09-03"},{"lineNumber":111,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\tthrow new IOException(\"read fail\");","lastModifiedDate":"2023-09-03"},{"lineNumber":112,"author":{"gitId":"ZD292"},"content":"\t\t\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":113,"author":{"gitId":"ZD292"},"content":"\t\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":114,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-09-10"},{"lineNumber":115,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":116,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":117,"author":{"gitId":"ZD292"},"content":"\t/**","lastModifiedDate":"2023-09-04"},{"lineNumber":118,"author":{"gitId":"ZD292"},"content":"\t * Deletes tasks from taskList.","lastModifiedDate":"2023-09-04"},{"lineNumber":119,"author":{"gitId":"ZD292"},"content":"\t * @param i Position of tasks to be deleted.","lastModifiedDate":"2023-09-04"},{"lineNumber":120,"author":{"gitId":"ZD292"},"content":"\t */","lastModifiedDate":"2023-09-04"},{"lineNumber":121,"author":{"gitId":"ZD292"},"content":"\tpublic void deleteFromFile(int i) {","lastModifiedDate":"2023-09-10"},{"lineNumber":122,"author":{"gitId":"ZD292"},"content":"\t\ttaskList.remove(i - 1);","lastModifiedDate":"2023-09-04"},{"lineNumber":123,"author":{"gitId":"ZD292"},"content":"\t\ttry {","lastModifiedDate":"2023-09-10"},{"lineNumber":124,"author":{"gitId":"ZD292"},"content":"\t\t\tFileWriter fw \u003d new FileWriter(filePath, true);","lastModifiedDate":"2023-09-10"},{"lineNumber":125,"author":{"gitId":"ZD292"},"content":"\t\t\tfor (Task task: taskList) {","lastModifiedDate":"2023-09-10"},{"lineNumber":126,"author":{"gitId":"ZD292"},"content":"\t\t\t\tfw.write(task.writeToFile());","lastModifiedDate":"2023-09-10"},{"lineNumber":127,"author":{"gitId":"ZD292"},"content":"\t\t\t\tfw.write(\"\\n\");","lastModifiedDate":"2023-09-10"},{"lineNumber":128,"author":{"gitId":"ZD292"},"content":"\t\t\t}","lastModifiedDate":"2023-09-10"},{"lineNumber":129,"author":{"gitId":"ZD292"},"content":"\t\t\tfw.close();","lastModifiedDate":"2023-09-10"},{"lineNumber":130,"author":{"gitId":"ZD292"},"content":"\t\t} catch (IOException e) {","lastModifiedDate":"2023-09-10"},{"lineNumber":131,"author":{"gitId":"ZD292"},"content":"\t\t\tSystem.out.println(\"Delete fail \" + e.getMessage());","lastModifiedDate":"2023-09-10"},{"lineNumber":132,"author":{"gitId":"ZD292"},"content":"\t\t}","lastModifiedDate":"2023-09-10"},{"lineNumber":133,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-09-10"},{"lineNumber":134,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":135,"author":{"gitId":"ZD292"},"content":"\tpublic void updateMarkInFile() {","lastModifiedDate":"2023-09-10"},{"lineNumber":136,"author":{"gitId":"ZD292"},"content":"\t\ttry {","lastModifiedDate":"2023-09-10"},{"lineNumber":137,"author":{"gitId":"ZD292"},"content":"\t\t\tFileWriter fw \u003d new FileWriter(filePath);","lastModifiedDate":"2023-09-10"},{"lineNumber":138,"author":{"gitId":"ZD292"},"content":"\t\t\tStringBuilder br \u003d new StringBuilder();","lastModifiedDate":"2023-09-10"},{"lineNumber":139,"author":{"gitId":"ZD292"},"content":"\t\t\tfor (Task task: taskList) {","lastModifiedDate":"2023-09-10"},{"lineNumber":140,"author":{"gitId":"ZD292"},"content":"\t\t\t\tSystem.out.println(task.writeToFile());","lastModifiedDate":"2023-09-10"},{"lineNumber":141,"author":{"gitId":"ZD292"},"content":"\t\t\t\tbr.append(task.writeToFile()).append(\"\\n\");","lastModifiedDate":"2023-09-10"},{"lineNumber":142,"author":{"gitId":"ZD292"},"content":"\t\t\t}","lastModifiedDate":"2023-09-10"},{"lineNumber":143,"author":{"gitId":"ZD292"},"content":"\t\t\tfw.write(br.toString());","lastModifiedDate":"2023-09-10"},{"lineNumber":144,"author":{"gitId":"ZD292"},"content":"\t\t\tfw.close();","lastModifiedDate":"2023-09-10"},{"lineNumber":145,"author":{"gitId":"ZD292"},"content":"\t\t} catch (IOException e) {","lastModifiedDate":"2023-09-10"},{"lineNumber":146,"author":{"gitId":"ZD292"},"content":"\t\t\tSystem.out.println(\"Updating fail \" + e.getMessage());","lastModifiedDate":"2023-09-10"},{"lineNumber":147,"author":{"gitId":"ZD292"},"content":"\t\t}","lastModifiedDate":"2023-09-10"},{"lineNumber":148,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":149,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":150,"author":{"gitId":"ZD292"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"ZD292":150}},{"path":"src/main/java/duke/task/DeadLine.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ZD292"},"content":"package duke.task;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"ZD292"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"ZD292"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"ZD292"},"content":" * Represents a Deadline Task which.","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"ZD292"},"content":" * Has a description and Deadline endTime.","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"ZD292"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"ZD292"},"content":"public class DeadLine extends Task {","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"ZD292"},"content":"\tprivate final LocalDateTime endTime;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"ZD292"},"content":"\t/**","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"ZD292"},"content":"\t * Represents a DeadLine Task.","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"ZD292"},"content":"\t * @param description Describes the Task.","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"ZD292"},"content":"\t * @param endTime By what time must I complete this DeadLine Task.","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"ZD292"},"content":"\t */","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"ZD292"},"content":"\tpublic DeadLine(String description, LocalDateTime endTime) {","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"ZD292"},"content":"\t\tsuper(description);","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"ZD292"},"content":"\t\tthis.endTime \u003d endTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"ZD292"},"content":"\t/**","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"ZD292"},"content":"\t * Returns a String to be written into Storage.","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"ZD292"},"content":"\t * @return Reformatted String suitable for Storage.","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"ZD292"},"content":"\t */","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"ZD292"},"content":"\t@Override","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"ZD292"},"content":"\tpublic String writeToFile() {","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"ZD292"},"content":"\t\tStringBuilder b \u003d new StringBuilder();","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"ZD292"},"content":"\t\tb.append(\"D\" + \" | \");","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"ZD292"},"content":"\t\tif (this.isDone) {","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"ZD292"},"content":"\t\t\tb.append(\"1\" + \" | \");","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"ZD292"},"content":"\t\t} else {","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"ZD292"},"content":"\t\t\tb.append(\"0\" + \" | \");","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"ZD292"},"content":"\t\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"ZD292"},"content":"\t\tb.append(this.description).append(\" | \");","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"ZD292"},"content":"\t\tb.append(this.endTime.toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"ZD292"},"content":"\t\treturn b.toString();","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"ZD292"},"content":"\t/**","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"ZD292"},"content":"\t * @return String representation of DeadLine.","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"ZD292"},"content":"\t */","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"ZD292"},"content":"\t@Override","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"ZD292"},"content":"\tpublic String toString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"ZD292"},"content":"\t\tString[] time \u003d this.endTime.toString().split(\"T\");","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"ZD292"},"content":"\t\tString timeDate \u003d time[1] + \" \" + time[0];","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"ZD292"},"content":"\t\treturn \"[D]\" + super.toString() + \" (by: \" + timeDate + \")\";","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":50,"author":{"gitId":"ZD292"},"content":"\t/**","lastModifiedDate":"2023-09-10"},{"lineNumber":51,"author":{"gitId":"ZD292"},"content":"\t * @return Icon of DeadLine","lastModifiedDate":"2023-09-10"},{"lineNumber":52,"author":{"gitId":"ZD292"},"content":"\t */","lastModifiedDate":"2023-09-10"},{"lineNumber":53,"author":{"gitId":"ZD292"},"content":"\tpublic String getIcon() {","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"ZD292"},"content":"\t\treturn \"[D]\" + super.getTask();","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"ZD292"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"ZD292":56}},{"path":"src/main/java/duke/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ZD292"},"content":"package duke.task;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"ZD292"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"ZD292"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"ZD292"},"content":" * Represents an Event Task.","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"ZD292"},"content":" * Has a description, startTime and endTime.","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"ZD292"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"ZD292"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"ZD292"},"content":"\tprivate final LocalDateTime startTime;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"ZD292"},"content":"\tprivate final LocalDateTime endTime;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"ZD292"},"content":"\t/**","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"ZD292"},"content":"\t * Represents an Event Task.","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"ZD292"},"content":"\t * @param description Describes the Event.","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"ZD292"},"content":"\t * @param startTime Time Event starts.","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"ZD292"},"content":"\t * @param endTime Time Event ends.","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"ZD292"},"content":"\t */","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"ZD292"},"content":"\tpublic Event(String description, LocalDateTime startTime, LocalDateTime endTime) {","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"ZD292"},"content":"\t\tsuper(description);","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"ZD292"},"content":"\t\tthis.startTime \u003d startTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"ZD292"},"content":"\t\tthis.endTime \u003d endTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"ZD292"},"content":"\t/**","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"ZD292"},"content":"\t * Returns a String to be written into Storage.","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"ZD292"},"content":"\t * @return Reformatted String suitable for Storage.","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"ZD292"},"content":"\t */","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"ZD292"},"content":"\t@Override","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"ZD292"},"content":"\tpublic String writeToFile() {","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"ZD292"},"content":"\t\tStringBuilder b \u003d new StringBuilder();","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"ZD292"},"content":"\t\tb.append(\"E\" + \" | \");","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"ZD292"},"content":"\t\tif (this.isDone) {","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"ZD292"},"content":"\t\t\tb.append(\"1\" + \" | \");","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"ZD292"},"content":"\t\t} else {","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"ZD292"},"content":"\t\t\tb.append(\"0\" + \" | \");","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"ZD292"},"content":"\t\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"ZD292"},"content":"\t\tb.append(this.description).append(\" | \");","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"ZD292"},"content":"\t\tb.append(this.startTime).append(\" | \").append(this.endTime);","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"ZD292"},"content":"\t\treturn b.toString();","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"ZD292"},"content":"\t/**","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"ZD292"},"content":"\t * @return String representation of Event.","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"ZD292"},"content":"\t */","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"ZD292"},"content":"\t@Override","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"ZD292"},"content":"\tpublic String toString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"ZD292"},"content":"\t\tString[] start \u003d this.startTime.toString().split(\"T\");","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"ZD292"},"content":"\t\tString startDate \u003d start[1] + \" \" + start[0];","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"ZD292"},"content":"\t\tString[] end \u003d this.endTime.toString().split(\"T\");","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"ZD292"},"content":"\t\tString endDate \u003d end[1] + \" \" + end[0];","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"ZD292"},"content":"\t\treturn \"[E]\" + super.toString() + \" (from: \" + startDate + \" to: \" + endDate + \")\";","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"ZD292"},"content":"\t/**","lastModifiedDate":"2023-09-10"},{"lineNumber":56,"author":{"gitId":"ZD292"},"content":"\t * @return Icon of Task","lastModifiedDate":"2023-09-10"},{"lineNumber":57,"author":{"gitId":"ZD292"},"content":"\t */","lastModifiedDate":"2023-09-10"},{"lineNumber":58,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":59,"author":{"gitId":"ZD292"},"content":"\tpublic String getIcon() {","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"ZD292"},"content":"\t\treturn \"[E]\" + super.getTask();","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"ZD292"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"ZD292":62}},{"path":"src/main/java/duke/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ZD292"},"content":"package duke.task;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"ZD292"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"ZD292"},"content":" * Represents a Task.","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"ZD292"},"content":" * Task can be marked as done or unmarked.","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"ZD292"},"content":" * Can be written to Storage.","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"ZD292"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"ZD292"},"content":"public class Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"ZD292"},"content":"\tprotected String description;","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"ZD292"},"content":"\tprotected boolean isDone;","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"ZD292"},"content":"\t/**","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"ZD292"},"content":"\t * Represents the Task.","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"ZD292"},"content":"\t * @param description Describes the Task.","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"ZD292"},"content":"\t */","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"ZD292"},"content":"\tpublic Task(String description) {","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"ZD292"},"content":"\t\tthis.description \u003d description;","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"ZD292"},"content":"\t/**","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"ZD292"},"content":"\t * Marks Task as done.","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"ZD292"},"content":"\t */","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"ZD292"},"content":"\tpublic void markAsDone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"ZD292"},"content":"\t\tthis.isDone \u003d true;","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"ZD292"},"content":"\t/**","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"ZD292"},"content":"\t * Unmarks the Task.","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"ZD292"},"content":"\t */","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"ZD292"},"content":"\tpublic void unMark() {","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"ZD292"},"content":"\t\tthis.isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"ZD292"},"content":"\t/**","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"ZD292"},"content":"\t * @return String Representation of whether Task is done or not.","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"ZD292"},"content":"\t */","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"ZD292"},"content":"\tpublic String getTask() {","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"ZD292"},"content":"\t\treturn isDone ? \"[X]\" : \"[ ]\";","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-08-24"},{"lineNumber":42,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"ZD292"},"content":"\t/**","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"ZD292"},"content":"\t * @return String representation of Task to be written to text file.","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"ZD292"},"content":"\t */","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"ZD292"},"content":"\tpublic String writeToFile() {","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"ZD292"},"content":"\t\treturn \"\";","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"ZD292"},"content":"\t/**","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"ZD292"},"content":" \t * @return String representation of Task.","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"ZD292"},"content":"\t */","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"ZD292"},"content":"\t@Override","lastModifiedDate":"2023-08-24"},{"lineNumber":54,"author":{"gitId":"ZD292"},"content":"\tpublic String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":55,"author":{"gitId":"ZD292"},"content":"\t\treturn isDone ? \"[X]\" + \" \" + this.description : \"[ ]\" + \" \" + this.description;","lastModifiedDate":"2023-08-24"},{"lineNumber":56,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-08-24"},{"lineNumber":57,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":58,"author":{"gitId":"ZD292"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"ZD292":58}},{"path":"src/main/java/duke/task/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ZD292"},"content":"package duke.task;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"ZD292"},"content":"import duke.DukeException;","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"ZD292"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"ZD292"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"ZD292"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"ZD292"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"ZD292"},"content":" * Represents a List of Task.","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"ZD292"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"ZD292"},"content":"public class TaskList {","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"ZD292"},"content":"\tprivate ArrayList\u003cTask\u003e taskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"ZD292"},"content":"\t/**","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"ZD292"},"content":"\t * @param taskList Represents the list of Task.","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"ZD292"},"content":"\t */","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"ZD292"},"content":"\tpublic TaskList(ArrayList\u003cTask\u003e taskList) {","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"ZD292"},"content":"\t\tthis.taskList \u003d taskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"ZD292"},"content":"\t/**","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"ZD292"},"content":"\t * Initialises a new arrayList to store Task.","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"ZD292"},"content":"\t */","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"ZD292"},"content":"\tpublic TaskList() {","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"ZD292"},"content":"\t\tthis.taskList \u003d new ArrayList\u003cTask\u003e(100);","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"ZD292"},"content":"\t/**","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"ZD292"},"content":"\t * Add task to list.","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"ZD292"},"content":"\t * @param t Task to be added.","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"ZD292"},"content":"\t */","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"ZD292"},"content":"\tpublic void add(Task t) {","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"ZD292"},"content":"\t\ttaskList.add(t);","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"ZD292"},"content":"\t/**","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"ZD292"},"content":"\t * shows all tasks in the list","lastModifiedDate":"2023-09-10"},{"lineNumber":38,"author":{"gitId":"ZD292"},"content":"\t * @param ui outputs task list to user","lastModifiedDate":"2023-09-10"},{"lineNumber":39,"author":{"gitId":"ZD292"},"content":"\t */","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"ZD292"},"content":"\tpublic String list(Ui ui) {","lastModifiedDate":"2023-09-10"},{"lineNumber":41,"author":{"gitId":"ZD292"},"content":"\t\tStringBuilder br \u003d new StringBuilder();","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"ZD292"},"content":"\t\tfor (int i \u003d 0; i \u003c taskList.size(); i++) {","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"ZD292"},"content":"\t\t\tbr.append(i + 1).append(\". \");","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"ZD292"},"content":"\t\t\tbr.append((taskList.get(i)).toString()).append(\"\\n\");","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"ZD292"},"content":"\t\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"ZD292"},"content":"\t\treturn ui.showList(br);","lastModifiedDate":"2023-09-10"},{"lineNumber":47,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"ZD292"},"content":"\t/**","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"ZD292"},"content":"\t * Marks task.","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"ZD292"},"content":"\t * @param toMark Whether to mark Task as done or not.","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"ZD292"},"content":"\t * @param pos Position of task to be marked, starting from 1.","lastModifiedDate":"2023-09-10"},{"lineNumber":53,"author":{"gitId":"ZD292"},"content":"\t * @throws DukeException If unable to mark task at specified idx.","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"ZD292"},"content":"\t */","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"ZD292"},"content":"\tpublic void toMark(Boolean toMark, int pos, Ui ui) throws DukeException {","lastModifiedDate":"2023-09-10"},{"lineNumber":56,"author":{"gitId":"ZD292"},"content":"\t\tif (pos \u003e taskList.size()) {","lastModifiedDate":"2023-09-10"},{"lineNumber":57,"author":{"gitId":"ZD292"},"content":"\t\t\tthrow new DukeException(\"Trying to mark or unmark something beyond the list\");","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"ZD292"},"content":"\t\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"ZD292"},"content":"\t\tTask task \u003d taskList.get(pos - 1);","lastModifiedDate":"2023-09-10"},{"lineNumber":61,"author":{"gitId":"ZD292"},"content":"\t\tif (toMark) {","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"ZD292"},"content":"\t\t\ttask.markAsDone();","lastModifiedDate":"2023-09-10"},{"lineNumber":63,"author":{"gitId":"ZD292"},"content":"\t\t} else {","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"ZD292"},"content":"\t\t\ttask.unMark();","lastModifiedDate":"2023-09-10"},{"lineNumber":65,"author":{"gitId":"ZD292"},"content":"\t\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"ZD292"},"content":"\t/**","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"ZD292"},"content":"\t * Returns number of tasks remaining after deletion","lastModifiedDate":"2023-09-10"},{"lineNumber":69,"author":{"gitId":"ZD292"},"content":"\t * @return number task remaining after deletion","lastModifiedDate":"2023-09-10"},{"lineNumber":70,"author":{"gitId":"ZD292"},"content":"\t */","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":72,"author":{"gitId":"ZD292"},"content":"\tpublic String getRemaining() {","lastModifiedDate":"2023-09-10"},{"lineNumber":73,"author":{"gitId":"ZD292"},"content":"\t\treturn Integer.toString(taskList.size() - 1);","lastModifiedDate":"2023-09-10"},{"lineNumber":74,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"ZD292"},"content":"\tpublic String getSize() {","lastModifiedDate":"2023-09-10"},{"lineNumber":77,"author":{"gitId":"ZD292"},"content":"\t\treturn Integer.toString(taskList.size());","lastModifiedDate":"2023-09-10"},{"lineNumber":78,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":79,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":80,"author":{"gitId":"ZD292"},"content":"\t/**","lastModifiedDate":"2023-09-04"},{"lineNumber":81,"author":{"gitId":"ZD292"},"content":"\t * Returns String representation of task at a given index, starting from 0.","lastModifiedDate":"2023-09-04"},{"lineNumber":82,"author":{"gitId":"ZD292"},"content":" \t * @param i Index of Task in taskList that we are interested in.","lastModifiedDate":"2023-09-04"},{"lineNumber":83,"author":{"gitId":"ZD292"},"content":"\t * @return String representation of Task.","lastModifiedDate":"2023-09-04"},{"lineNumber":84,"author":{"gitId":"ZD292"},"content":"\t */","lastModifiedDate":"2023-09-04"},{"lineNumber":85,"author":{"gitId":"ZD292"},"content":"\tpublic Task getTask(int i) {","lastModifiedDate":"2023-09-10"},{"lineNumber":86,"author":{"gitId":"ZD292"},"content":"\t\treturn taskList.get(i);","lastModifiedDate":"2023-09-10"},{"lineNumber":87,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-09-04"},{"lineNumber":88,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":89,"author":{"gitId":"ZD292"},"content":"\t/**","lastModifiedDate":"2023-09-10"},{"lineNumber":90,"author":{"gitId":"ZD292"},"content":"\t * Finds task by keyword in task list","lastModifiedDate":"2023-09-10"},{"lineNumber":91,"author":{"gitId":"ZD292"},"content":"\t * @param keyWord word we are searching task by","lastModifiedDate":"2023-09-10"},{"lineNumber":92,"author":{"gitId":"ZD292"},"content":"\t * @return String representation of task which we output to user later on","lastModifiedDate":"2023-09-10"},{"lineNumber":93,"author":{"gitId":"ZD292"},"content":"\t */","lastModifiedDate":"2023-09-10"},{"lineNumber":94,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":95,"author":{"gitId":"ZD292"},"content":"\tpublic StringBuilder findTask(String keyWord) {","lastModifiedDate":"2023-09-10"},{"lineNumber":96,"author":{"gitId":"ZD292"},"content":"\t\tint count \u003d 1;","lastModifiedDate":"2023-09-04"},{"lineNumber":97,"author":{"gitId":"ZD292"},"content":"\t\tStringBuilder br \u003d new StringBuilder();","lastModifiedDate":"2023-09-04"},{"lineNumber":98,"author":{"gitId":"ZD292"},"content":"\t\tfor (Task t: taskList) {","lastModifiedDate":"2023-09-04"},{"lineNumber":99,"author":{"gitId":"ZD292"},"content":"\t\t\tString[] words \u003d t.toString().split(\" \");","lastModifiedDate":"2023-09-04"},{"lineNumber":100,"author":{"gitId":"ZD292"},"content":"\t\t\tfor (String w: words) {","lastModifiedDate":"2023-09-04"},{"lineNumber":101,"author":{"gitId":"ZD292"},"content":"\t\t\t\tif (w.equals(keyWord)) {","lastModifiedDate":"2023-09-04"},{"lineNumber":102,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\tbr.append(count).append(\". \").append(t.toString()).append(\"\\n\");","lastModifiedDate":"2023-09-04"},{"lineNumber":103,"author":{"gitId":"ZD292"},"content":"\t\t\t\t}","lastModifiedDate":"2023-09-04"},{"lineNumber":104,"author":{"gitId":"ZD292"},"content":"\t\t\t}","lastModifiedDate":"2023-09-04"},{"lineNumber":105,"author":{"gitId":"ZD292"},"content":"\t\t\tcount++;","lastModifiedDate":"2023-09-04"},{"lineNumber":106,"author":{"gitId":"ZD292"},"content":"\t\t}","lastModifiedDate":"2023-09-04"},{"lineNumber":107,"author":{"gitId":"ZD292"},"content":"\t\treturn br;","lastModifiedDate":"2023-09-10"},{"lineNumber":108,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-09-04"},{"lineNumber":109,"author":{"gitId":"ZD292"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"ZD292":109}},{"path":"src/main/java/duke/task/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ZD292"},"content":"package duke.task;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"ZD292"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"ZD292"},"content":" * Represents Task to be done.","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"ZD292"},"content":" * Contains a description of what is to be done.","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"ZD292"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"ZD292"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"ZD292"},"content":"\tpublic ToDo(String description){","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"ZD292"},"content":"\t\tsuper(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"ZD292"},"content":"\t/**","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"ZD292"},"content":"\t * Returns a String to be written into Storage.","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"ZD292"},"content":"\t * @return Reformatted String suitable for Storage.","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"ZD292"},"content":"\t */","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"ZD292"},"content":"\t@Override","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"ZD292"},"content":"\tpublic String writeToFile() {","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"ZD292"},"content":"\t\tStringBuilder b \u003d new StringBuilder();","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"ZD292"},"content":"\t\tb.append(\"T\" + \" | \");","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"ZD292"},"content":"\t\tif (this.isDone) {","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"ZD292"},"content":"\t\t\tb.append(\"1\" + \" | \");","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"ZD292"},"content":"\t\t} else {","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"ZD292"},"content":"\t\t\tb.append(\"0\" + \" | \");","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"ZD292"},"content":"\t\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"ZD292"},"content":"\t\tb.append(this.description);","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"ZD292"},"content":"\t\treturn b.toString();","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"ZD292"},"content":"\t/**","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"ZD292"},"content":"\t * @return String representation of Task.","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"ZD292"},"content":"\t */","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"ZD292"},"content":"\t@Override","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"ZD292"},"content":"\tpublic String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"ZD292"},"content":"\t\treturn \"[T]\" + super.toString();","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"ZD292"},"content":"\t/**","lastModifiedDate":"2023-09-10"},{"lineNumber":37,"author":{"gitId":"ZD292"},"content":"\t * @return Icon of ToDo","lastModifiedDate":"2023-09-10"},{"lineNumber":38,"author":{"gitId":"ZD292"},"content":"\t */","lastModifiedDate":"2023-09-10"},{"lineNumber":39,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":40,"author":{"gitId":"ZD292"},"content":"\tpublic String getIcon() {","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"ZD292"},"content":"\t\treturn \"[D]\" + super.getTask();","lastModifiedDate":"2023-08-24"},{"lineNumber":42,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-08-24"},{"lineNumber":43,"author":{"gitId":"ZD292"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"ZD292":43}},{"path":"src/main/java/duke/ui/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ZD292"},"content":"package duke.ui;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"ZD292"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"ZD292"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"ZD292"},"content":"import java.io.InputStream;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"ZD292"},"content":"import java.io.PrintStream;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"ZD292"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"ZD292"},"content":"/**","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"ZD292"},"content":" * Handles all the textual information with user","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"ZD292"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"ZD292"},"content":"public class Ui {","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"ZD292"},"content":"\tprivate String name;","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"ZD292"},"content":"\tprivate final Scanner in;","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"ZD292"},"content":"\tprivate PrintStream out;","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"ZD292"},"content":"\tprivate static final String COMMENT_LINE_REGEX \u003d \"#.\";","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"ZD292"},"content":"\tprivate static final String LOGO \u003d \" ____ _ \\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"ZD292"},"content":"\t\t\t+ \"| _ \\\\ _ _| | _____ \\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"ZD292"},"content":"\t\t\t+ \"| | | | | | | |/ / _ \\\\\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"ZD292"},"content":"\t\t\t+ \"| |_| | |_| | \u003c __/\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"ZD292"},"content":"\t\t\t+ \"|____/ \\\\__,_|_|\\\\_\\\\___|\\n\";","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"ZD292"},"content":"\tprivate static final String DIVIDER \u003d \"_______________________________________________________\\n\";","lastModifiedDate":"2023-09-10"},{"lineNumber":25,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"ZD292"},"content":"\t// scannner takes in inputstream","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"ZD292"},"content":"\t/**","lastModifiedDate":"2023-09-10"},{"lineNumber":29,"author":{"gitId":"ZD292"},"content":"\t * Handles user input and gives an output","lastModifiedDate":"2023-09-10"},{"lineNumber":30,"author":{"gitId":"ZD292"},"content":"\t * @param in input of user","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"ZD292"},"content":"\t * @param out output to user","lastModifiedDate":"2023-09-10"},{"lineNumber":32,"author":{"gitId":"ZD292"},"content":"\t */","lastModifiedDate":"2023-09-10"},{"lineNumber":33,"author":{"gitId":"ZD292"},"content":"\tpublic Ui(InputStream in, PrintStream out) {","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"ZD292"},"content":"\t\tthis.in \u003d new Scanner(in);","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"ZD292"},"content":"\t\tthis.out \u003d out;","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"ZD292"},"content":"\t/**","lastModifiedDate":"2023-09-10"},{"lineNumber":39,"author":{"gitId":"ZD292"},"content":"\t * name of interface","lastModifiedDate":"2023-09-10"},{"lineNumber":40,"author":{"gitId":"ZD292"},"content":"\t * @param name represents the Ui","lastModifiedDate":"2023-09-10"},{"lineNumber":41,"author":{"gitId":"ZD292"},"content":"\t */","lastModifiedDate":"2023-09-10"},{"lineNumber":42,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":43,"author":{"gitId":"ZD292"},"content":"\tpublic Ui(String name) {","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"ZD292"},"content":"\t\tthis(System.in, System.out);","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"ZD292"},"content":"\t\tthis.name \u003d name;","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":48,"author":{"gitId":"ZD292"},"content":"\t/**","lastModifiedDate":"2023-09-10"},{"lineNumber":49,"author":{"gitId":"ZD292"},"content":"\t * Check if there are more inputs","lastModifiedDate":"2023-09-10"},{"lineNumber":50,"author":{"gitId":"ZD292"},"content":"\t * @return a boolean check","lastModifiedDate":"2023-09-10"},{"lineNumber":51,"author":{"gitId":"ZD292"},"content":"\t */","lastModifiedDate":"2023-09-10"},{"lineNumber":52,"author":{"gitId":"ZD292"},"content":"\tpublic boolean hasNextLine() {","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"ZD292"},"content":"\t\treturn this.in.hasNextLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"ZD292"},"content":"\t/**","lastModifiedDate":"2023-09-10"},{"lineNumber":58,"author":{"gitId":"ZD292"},"content":"\t * checks if input is a comment","lastModifiedDate":"2023-09-10"},{"lineNumber":59,"author":{"gitId":"ZD292"},"content":"\t * @param inputLine the input","lastModifiedDate":"2023-09-10"},{"lineNumber":60,"author":{"gitId":"ZD292"},"content":"\t * @return boolean, whether input is comment or not","lastModifiedDate":"2023-09-10"},{"lineNumber":61,"author":{"gitId":"ZD292"},"content":"\t */","lastModifiedDate":"2023-09-10"},{"lineNumber":62,"author":{"gitId":"ZD292"},"content":"\tprivate boolean isCommentLine(String inputLine) {","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"ZD292"},"content":"\t\treturn inputLine.trim().matches(COMMENT_LINE_REGEX);","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":66,"author":{"gitId":"ZD292"},"content":"\t/**","lastModifiedDate":"2023-09-10"},{"lineNumber":67,"author":{"gitId":"ZD292"},"content":"\t * checks whether the input is empty or is a comment, in both cases, we ignore","lastModifiedDate":"2023-09-10"},{"lineNumber":68,"author":{"gitId":"ZD292"},"content":"\t * @param inputLine the input","lastModifiedDate":"2023-09-10"},{"lineNumber":69,"author":{"gitId":"ZD292"},"content":"\t * @return a boolean on whether we will ignore","lastModifiedDate":"2023-09-10"},{"lineNumber":70,"author":{"gitId":"ZD292"},"content":"\t */","lastModifiedDate":"2023-09-10"},{"lineNumber":71,"author":{"gitId":"ZD292"},"content":"\tprivate boolean shouldIgnore(String inputLine) {","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"ZD292"},"content":"\t\treturn inputLine.trim().isEmpty() || isCommentLine(inputLine);","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"ZD292"},"content":"\t/**","lastModifiedDate":"2023-09-10"},{"lineNumber":76,"author":{"gitId":"ZD292"},"content":"\t * Output to user prompting them for command","lastModifiedDate":"2023-09-10"},{"lineNumber":77,"author":{"gitId":"ZD292"},"content":"\t * @return a String to be piped into GUI","lastModifiedDate":"2023-09-10"},{"lineNumber":78,"author":{"gitId":"ZD292"},"content":"\t */","lastModifiedDate":"2023-09-10"},{"lineNumber":79,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":80,"author":{"gitId":"ZD292"},"content":"\tpublic String readCommand() {","lastModifiedDate":"2023-09-03"},{"lineNumber":81,"author":{"gitId":"ZD292"},"content":"\t\t// has nextline then save it skip the comments","lastModifiedDate":"2023-09-03"},{"lineNumber":82,"author":{"gitId":"ZD292"},"content":"\t\tout.print(\"Enter your Command:\");","lastModifiedDate":"2023-09-03"},{"lineNumber":83,"author":{"gitId":"ZD292"},"content":"\t\tString inputLine \u003d in.nextLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":84,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":85,"author":{"gitId":"ZD292"},"content":"\t\twhile (shouldIgnore(inputLine)) {","lastModifiedDate":"2023-09-03"},{"lineNumber":86,"author":{"gitId":"ZD292"},"content":"\t\t\tinputLine \u003d in.nextLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":87,"author":{"gitId":"ZD292"},"content":"\t\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":88,"author":{"gitId":"ZD292"},"content":"\t\tString message \u003d String.format(\"Command entered: %s\", inputLine);","lastModifiedDate":"2023-09-03"},{"lineNumber":89,"author":{"gitId":"ZD292"},"content":"\t\tSystem.out.println(message);","lastModifiedDate":"2023-09-03"},{"lineNumber":90,"author":{"gitId":"ZD292"},"content":"\t\treturn inputLine;","lastModifiedDate":"2023-09-03"},{"lineNumber":91,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":92,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":93,"author":{"gitId":"ZD292"},"content":"\t/**","lastModifiedDate":"2023-09-10"},{"lineNumber":94,"author":{"gitId":"ZD292"},"content":"\t * Check if command is valid","lastModifiedDate":"2023-09-10"},{"lineNumber":95,"author":{"gitId":"ZD292"},"content":"\t * @param inputLine the input","lastModifiedDate":"2023-09-10"},{"lineNumber":96,"author":{"gitId":"ZD292"},"content":"\t * @return a message to the user whether command is valid or not","lastModifiedDate":"2023-09-10"},{"lineNumber":97,"author":{"gitId":"ZD292"},"content":"\t */","lastModifiedDate":"2023-09-10"},{"lineNumber":98,"author":{"gitId":"ZD292"},"content":"\tpublic String parseCommand(String inputLine) {","lastModifiedDate":"2023-09-10"},{"lineNumber":99,"author":{"gitId":"ZD292"},"content":"\t\tif (shouldIgnore(inputLine)) {","lastModifiedDate":"2023-09-10"},{"lineNumber":100,"author":{"gitId":"ZD292"},"content":"\t\t\treturn \"Not a valid command\";","lastModifiedDate":"2023-09-10"},{"lineNumber":101,"author":{"gitId":"ZD292"},"content":"\t\t}","lastModifiedDate":"2023-09-10"},{"lineNumber":102,"author":{"gitId":"ZD292"},"content":"\t\tString message \u003d String.format(\"Command entered: %s\", inputLine);","lastModifiedDate":"2023-09-10"},{"lineNumber":103,"author":{"gitId":"ZD292"},"content":"\t\treturn message;","lastModifiedDate":"2023-09-10"},{"lineNumber":104,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-09-10"},{"lineNumber":105,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":106,"author":{"gitId":"ZD292"},"content":"\t/**","lastModifiedDate":"2023-09-10"},{"lineNumber":107,"author":{"gitId":"ZD292"},"content":"\t * outputs to user if unable to process file","lastModifiedDate":"2023-09-10"},{"lineNumber":108,"author":{"gitId":"ZD292"},"content":"\t * @param e error message exception","lastModifiedDate":"2023-09-10"},{"lineNumber":109,"author":{"gitId":"ZD292"},"content":"\t */","lastModifiedDate":"2023-09-10"},{"lineNumber":110,"author":{"gitId":"ZD292"},"content":"\tpublic void showLoadingError(Exception e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":111,"author":{"gitId":"ZD292"},"content":"\t\tSystem.out.println(\"Unable to process stored file:\");","lastModifiedDate":"2023-09-03"},{"lineNumber":112,"author":{"gitId":"ZD292"},"content":"\t\tSystem.out.println(e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":113,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":114,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":115,"author":{"gitId":"ZD292"},"content":"\t/**","lastModifiedDate":"2023-09-10"},{"lineNumber":116,"author":{"gitId":"ZD292"},"content":"\t * Ouputs to user a welcome message","lastModifiedDate":"2023-09-10"},{"lineNumber":117,"author":{"gitId":"ZD292"},"content":"\t */","lastModifiedDate":"2023-09-10"},{"lineNumber":118,"author":{"gitId":"ZD292"},"content":"\tpublic void showWelcome() {","lastModifiedDate":"2023-09-03"},{"lineNumber":119,"author":{"gitId":"ZD292"},"content":"\t\tString greeting \u003d String.format(\"____________________________________________________________\\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":120,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\"Hello! I\u0027m %s\\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":121,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\"What can I do for you?\\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":122,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\"____________________________________________________________\", this.name);","lastModifiedDate":"2023-09-03"},{"lineNumber":123,"author":{"gitId":"ZD292"},"content":"\t\tSystem.out.println(LOGO);","lastModifiedDate":"2023-09-03"},{"lineNumber":124,"author":{"gitId":"ZD292"},"content":"\t\tSystem.out.println(greeting);","lastModifiedDate":"2023-09-03"},{"lineNumber":125,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":126,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":127,"author":{"gitId":"ZD292"},"content":"\t/**","lastModifiedDate":"2023-09-10"},{"lineNumber":128,"author":{"gitId":"ZD292"},"content":"\t * Ouputs to user a good bye message","lastModifiedDate":"2023-09-10"},{"lineNumber":129,"author":{"gitId":"ZD292"},"content":"\t * @return String representation of goodbye","lastModifiedDate":"2023-09-10"},{"lineNumber":130,"author":{"gitId":"ZD292"},"content":"\t */","lastModifiedDate":"2023-09-10"},{"lineNumber":131,"author":{"gitId":"ZD292"},"content":"\tpublic String showGoodBye() {","lastModifiedDate":"2023-09-10"},{"lineNumber":132,"author":{"gitId":"ZD292"},"content":"\t\tString bye \u003d \"____________________________________________________________\\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":133,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\"Bye. Hope to see you again soon!\\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":134,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\"____________________________________________________________\";","lastModifiedDate":"2023-09-03"},{"lineNumber":135,"author":{"gitId":"ZD292"},"content":"\t\treturn bye;","lastModifiedDate":"2023-09-10"},{"lineNumber":136,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-09-10"},{"lineNumber":137,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":138,"author":{"gitId":"ZD292"},"content":"\t/**","lastModifiedDate":"2023-09-10"},{"lineNumber":139,"author":{"gitId":"ZD292"},"content":"\t * Outputs to user a delete message","lastModifiedDate":"2023-09-10"},{"lineNumber":140,"author":{"gitId":"ZD292"},"content":"\t * @param task the task to be done","lastModifiedDate":"2023-09-10"},{"lineNumber":141,"author":{"gitId":"ZD292"},"content":"\t * @param remainingCount the remaining task after deletion","lastModifiedDate":"2023-09-10"},{"lineNumber":142,"author":{"gitId":"ZD292"},"content":"\t * @return an Output to the user","lastModifiedDate":"2023-09-10"},{"lineNumber":143,"author":{"gitId":"ZD292"},"content":"\t */","lastModifiedDate":"2023-09-10"},{"lineNumber":144,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":145,"author":{"gitId":"ZD292"},"content":"\tpublic String showDelete(Task task, String remainingCount) {","lastModifiedDate":"2023-09-10"},{"lineNumber":146,"author":{"gitId":"ZD292"},"content":"\t\tString echo \u003d String.format(\"____________________________________________________________\\n\" +","lastModifiedDate":"2023-09-10"},{"lineNumber":147,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\"Noted. I\u0027ve removed this task:\\n\" +","lastModifiedDate":"2023-09-10"},{"lineNumber":148,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\"%s\\n\" +","lastModifiedDate":"2023-09-10"},{"lineNumber":149,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\"Now you have %s tasks in the list.\\n\" +","lastModifiedDate":"2023-09-10"},{"lineNumber":150,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\"____________________________________________________________\", task.toString(), remainingCount);","lastModifiedDate":"2023-09-10"},{"lineNumber":151,"author":{"gitId":"ZD292"},"content":"\t\treturn echo;","lastModifiedDate":"2023-09-10"},{"lineNumber":152,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":153,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":154,"author":{"gitId":"ZD292"},"content":"\t/**","lastModifiedDate":"2023-09-10"},{"lineNumber":155,"author":{"gitId":"ZD292"},"content":"\t * Outputs to user when we add a task","lastModifiedDate":"2023-09-10"},{"lineNumber":156,"author":{"gitId":"ZD292"},"content":"\t * @param task the task","lastModifiedDate":"2023-09-10"},{"lineNumber":157,"author":{"gitId":"ZD292"},"content":"\t * @param taskCount Number of tasks","lastModifiedDate":"2023-09-10"},{"lineNumber":158,"author":{"gitId":"ZD292"},"content":"\t * @return Output to user when we add the respective tasks","lastModifiedDate":"2023-09-10"},{"lineNumber":159,"author":{"gitId":"ZD292"},"content":"\t */","lastModifiedDate":"2023-09-10"},{"lineNumber":160,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":161,"author":{"gitId":"ZD292"},"content":"\tpublic String showAddTask(Task task, String taskCount) {","lastModifiedDate":"2023-09-10"},{"lineNumber":162,"author":{"gitId":"ZD292"},"content":"\t\tString echo \u003d String.format(\"____________________________________________________________\\n\" +","lastModifiedDate":"2023-09-10"},{"lineNumber":163,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\"Got it. I\u0027ve added this task:\\n\" +","lastModifiedDate":"2023-09-10"},{"lineNumber":164,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\"%s\\n\" +","lastModifiedDate":"2023-09-10"},{"lineNumber":165,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\"Now you have %s tasks in the list\\n\" +","lastModifiedDate":"2023-09-10"},{"lineNumber":166,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\"____________________________________________________________\", task.toString(), taskCount);","lastModifiedDate":"2023-09-10"},{"lineNumber":167,"author":{"gitId":"ZD292"},"content":"\t\treturn echo;","lastModifiedDate":"2023-09-10"},{"lineNumber":168,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-09-10"},{"lineNumber":169,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":170,"author":{"gitId":"ZD292"},"content":"\t/**","lastModifiedDate":"2023-09-10"},{"lineNumber":171,"author":{"gitId":"ZD292"},"content":"\t * Prints a divider","lastModifiedDate":"2023-09-10"},{"lineNumber":172,"author":{"gitId":"ZD292"},"content":"\t */","lastModifiedDate":"2023-09-10"},{"lineNumber":173,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":174,"author":{"gitId":"ZD292"},"content":"\tpublic void showLine() {","lastModifiedDate":"2023-09-03"},{"lineNumber":175,"author":{"gitId":"ZD292"},"content":"\t\tSystem.out.println(DIVIDER);","lastModifiedDate":"2023-09-03"},{"lineNumber":176,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":177,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":178,"author":{"gitId":"ZD292"},"content":"\t/**","lastModifiedDate":"2023-09-10"},{"lineNumber":179,"author":{"gitId":"ZD292"},"content":"\t * @return String representation of divider","lastModifiedDate":"2023-09-10"},{"lineNumber":180,"author":{"gitId":"ZD292"},"content":"\t */","lastModifiedDate":"2023-09-10"},{"lineNumber":181,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":182,"author":{"gitId":"ZD292"},"content":"\tpublic String getLine() {","lastModifiedDate":"2023-09-10"},{"lineNumber":183,"author":{"gitId":"ZD292"},"content":"\t\treturn DIVIDER;","lastModifiedDate":"2023-09-10"},{"lineNumber":184,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-09-10"},{"lineNumber":185,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":186,"author":{"gitId":"ZD292"},"content":"\t/**","lastModifiedDate":"2023-09-10"},{"lineNumber":187,"author":{"gitId":"ZD292"},"content":"\t * returns String representation of finding a task","lastModifiedDate":"2023-09-10"},{"lineNumber":188,"author":{"gitId":"ZD292"},"content":"\t * @param br the StringBuilder containing String","lastModifiedDate":"2023-09-10"},{"lineNumber":189,"author":{"gitId":"ZD292"},"content":"\t * @return String representation of finding a task","lastModifiedDate":"2023-09-10"},{"lineNumber":190,"author":{"gitId":"ZD292"},"content":"\t */","lastModifiedDate":"2023-09-10"},{"lineNumber":191,"author":{"gitId":"ZD292"},"content":"\tpublic String showFindTask(StringBuilder br) {","lastModifiedDate":"2023-09-10"},{"lineNumber":192,"author":{"gitId":"ZD292"},"content":"\t\treturn br.toString();","lastModifiedDate":"2023-09-10"},{"lineNumber":193,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-09-10"},{"lineNumber":194,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":195,"author":{"gitId":"ZD292"},"content":"\t/**","lastModifiedDate":"2023-09-10"},{"lineNumber":196,"author":{"gitId":"ZD292"},"content":"\t * returns String representation of list","lastModifiedDate":"2023-09-10"},{"lineNumber":197,"author":{"gitId":"ZD292"},"content":"\t * @param br StringBuilder","lastModifiedDate":"2023-09-10"},{"lineNumber":198,"author":{"gitId":"ZD292"},"content":"\t * @return String representation of list","lastModifiedDate":"2023-09-10"},{"lineNumber":199,"author":{"gitId":"ZD292"},"content":"\t */","lastModifiedDate":"2023-09-10"},{"lineNumber":200,"author":{"gitId":"ZD292"},"content":"\tpublic String showList(StringBuilder br) {","lastModifiedDate":"2023-09-10"},{"lineNumber":201,"author":{"gitId":"ZD292"},"content":"\t\tString echo \u003d String.format(\"____________________________________________________________\\n\"","lastModifiedDate":"2023-09-10"},{"lineNumber":202,"author":{"gitId":"ZD292"},"content":"\t\t\t\t+ \"Here are the task in your list:\\n\"","lastModifiedDate":"2023-09-10"},{"lineNumber":203,"author":{"gitId":"ZD292"},"content":"\t\t\t\t+ \"%s\"","lastModifiedDate":"2023-09-10"},{"lineNumber":204,"author":{"gitId":"ZD292"},"content":"\t\t\t\t+ \"____________________________________________________________\", br.toString());","lastModifiedDate":"2023-09-10"},{"lineNumber":205,"author":{"gitId":"ZD292"},"content":"\t\treturn echo;","lastModifiedDate":"2023-09-10"},{"lineNumber":206,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-09-10"},{"lineNumber":207,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":208,"author":{"gitId":"ZD292"},"content":"\t/**","lastModifiedDate":"2023-09-10"},{"lineNumber":209,"author":{"gitId":"ZD292"},"content":"\t * return String representation of marking a task","lastModifiedDate":"2023-09-10"},{"lineNumber":210,"author":{"gitId":"ZD292"},"content":"\t * @param task the marked task","lastModifiedDate":"2023-09-10"},{"lineNumber":211,"author":{"gitId":"ZD292"},"content":"\t * @return String representation of marking a task","lastModifiedDate":"2023-09-10"},{"lineNumber":212,"author":{"gitId":"ZD292"},"content":"\t */","lastModifiedDate":"2023-09-10"},{"lineNumber":213,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":214,"author":{"gitId":"ZD292"},"content":"\tpublic String showMark(Task task) {","lastModifiedDate":"2023-09-10"},{"lineNumber":215,"author":{"gitId":"ZD292"},"content":"\t\tString echo \u003d String.format(\"____________________________________________________________\\n\" +","lastModifiedDate":"2023-09-10"},{"lineNumber":216,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\"Nice! I\u0027ve marked this task as done:\\n\" +","lastModifiedDate":"2023-09-10"},{"lineNumber":217,"author":{"gitId":"ZD292"},"content":"\t\t\t\ttask.toString() + \"\\n\" +","lastModifiedDate":"2023-09-10"},{"lineNumber":218,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\"____________________________________________________________\");","lastModifiedDate":"2023-09-10"},{"lineNumber":219,"author":{"gitId":"ZD292"},"content":"\t\treturn echo;","lastModifiedDate":"2023-09-10"},{"lineNumber":220,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-09-10"},{"lineNumber":221,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":222,"author":{"gitId":"ZD292"},"content":"\t/**","lastModifiedDate":"2023-09-10"},{"lineNumber":223,"author":{"gitId":"ZD292"},"content":"\t * return String representation of unmarking a task","lastModifiedDate":"2023-09-10"},{"lineNumber":224,"author":{"gitId":"ZD292"},"content":"\t * @param task the task which is unmarked","lastModifiedDate":"2023-09-10"},{"lineNumber":225,"author":{"gitId":"ZD292"},"content":"\t */","lastModifiedDate":"2023-09-10"},{"lineNumber":226,"author":{"gitId":"ZD292"},"content":"\tpublic void showUnMark(Task task) {","lastModifiedDate":"2023-09-10"},{"lineNumber":227,"author":{"gitId":"ZD292"},"content":"\t\tString echo \u003d String.format(\"____________________________________________________________\\n\" +","lastModifiedDate":"2023-09-10"},{"lineNumber":228,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\"Nice! I\u0027ve marked this task as not done yet:\\n\" +","lastModifiedDate":"2023-09-10"},{"lineNumber":229,"author":{"gitId":"ZD292"},"content":"\t\t\t\ttask.toString() + \"\\n\" +","lastModifiedDate":"2023-09-10"},{"lineNumber":230,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\"____________________________________________________________\");","lastModifiedDate":"2023-09-10"},{"lineNumber":231,"author":{"gitId":"ZD292"},"content":"\t\tSystem.out.println(echo);","lastModifiedDate":"2023-09-10"},{"lineNumber":232,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-09-10"},{"lineNumber":233,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":234,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":235,"author":{"gitId":"ZD292"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"ZD292":235}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"ZD292"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":2,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"ZD292"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"ZD292"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"ZD292"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"ZD292"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"ZD292"},"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-10"},{"lineNumber":9,"author":{"gitId":"ZD292"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"ZD292"},"content":" \u003cLabel fx:id\u003d\"dialog\" text\u003d\"Label\" wrapText\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"ZD292"},"content":" \u003cImageView fx:id\u003d\"displayPicture\" fitHeight\u003d\"99.0\" fitWidth\u003d\"99.0\" pickOnBounds\u003d\"true\" preserveRatio\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"ZD292"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"ZD292"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"ZD292"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"ZD292"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"ZD292"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"ZD292":16}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"ZD292"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":2,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"ZD292"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"ZD292"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"ZD292"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"ZD292"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"ZD292"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"ZD292"},"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.MainWindow\"\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"ZD292"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"ZD292"},"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\" /\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"ZD292"},"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\" /\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"ZD292"},"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-10"},{"lineNumber":14,"author":{"gitId":"ZD292"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"ZD292"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"552.0\" prefWidth\u003d\"388.0\" /\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"ZD292"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"ZD292"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"ZD292"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"ZD292"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"ZD292":19}},{"path":"src/test/java/duke/parser/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ZD292"},"content":"package duke.parser;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"ZD292"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"ZD292"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"ZD292"},"content":"public class ParserTest {","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"ZD292"},"content":"\t@Test","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"ZD292"},"content":"\tpublic void formatDateTest() {","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"ZD292"},"content":"\t\tString expected \u003d \"2023-06-29T06:00:00\";","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"ZD292"},"content":"\t\tString[] input \u003d {\"630am\", \"29june\"};","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"ZD292"},"content":"\t\tString actual \u003d Parser.formatDate(input);","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"ZD292"},"content":"\t\tassertEquals(expected, actual);","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"ZD292"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"ZD292":16}},{"path":"src/test/java/duke/task/ToDoTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ZD292"},"content":"package duke.task;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"ZD292"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"ZD292"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"ZD292"},"content":"public class ToDoTest {","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"ZD292"},"content":"\t@Test","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"ZD292"},"content":"\tpublic void writeToFileTest() {","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"ZD292"},"content":"\t\tToDo t \u003d new ToDo(\"hello\");","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"ZD292"},"content":"\t\tString expected \u003d \"T | 0 | hello\";","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"ZD292"},"content":"\t\tassertEquals(t.writeToFile(), expected);","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"ZD292"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"ZD292":14}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"ZD292"},"content":"todo read book","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"ZD292"},"content":"mark 1","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"ZD292"},"content":"deadline return book /by June 6th","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"ZD292"},"content":"event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"ZD292"},"content":"list","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"ZD292"},"content":"unmark 1","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"ZD292"},"content":"list","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"ZD292"},"content":"deadline do homework /by no idea :-p","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"ZD292"},"content":"bye","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"ZD292":9}},{"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":"ZD292"},"content":"java -classpath ..\\bin Duke \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":"# convert to UNIX format","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":"cp EXPECTED.TXT EXPECTED-UNIX.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":"dos2unix ACTUAL.TXT EXPECTED-UNIX.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":"# compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":"diff ACTUAL.TXT EXPECTED-UNIX.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":"if [ $? -eq 0 ]","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":" echo \"Test result: PASSED\"","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":" exit 0","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"else","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":" echo \"Test result: FAILED\"","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":" exit 1","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"ZD292":1,"-":36}}] diff --git a/ZD292_ip_master/commits.json b/ZD292_ip_master/commits.json index 62050d5b..18947261 100644 --- a/ZD292_ip_master/commits.json +++ b/ZD292_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"ZD292":[{"date":"2023-08-24","commitResults":[{"hash":"85fb8175a1af58d6166e23206494ee44d0798dde","isMergeCommit":false,"messageTitle":"L0 greeting implemented","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":27,"deletions":6}}},{"hash":"f5a0af5c2fdfe426b27f10da276a54cde9b1d78d","isMergeCommit":false,"messageTitle":"bot can respond now","messageBody":"","tags":["Level1"],"fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":5}}},{"hash":"ce7de6070210390331da9054c496b2e653f45c83","isMergeCommit":false,"messageTitle":"commit level 2","messageBody":"","tags":["Level-3","Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":37,"deletions":19}}},{"hash":"ffa5dde0f572e2cfc29d69f41a3386970d9cc6e3","isMergeCommit":false,"messageTitle":"v3 commit tasks","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":49,"deletions":5}}},{"hash":"fb1b575c8b730de38047510491f9df7ae1aaed12","isMergeCommit":false,"messageTitle":"implemented Events","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":107,"deletions":16}}},{"hash":"5492c2408c0f192d69d4d8d19b6c4270c683e032","isMergeCommit":false,"messageTitle":"level 5 handling exceptions","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":117,"deletions":68}}},{"hash":"8149c14da7e64d54f4ebe3a14686bbcb532cb51f","isMergeCommit":false,"messageTitle":"level 6 added a delete function","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":0}}}]},{"date":"2023-08-27","commitResults":[{"hash":"b07af05778de6ab938ccbac37fdf4ef8f5581ea0","isMergeCommit":false,"messageTitle":"testing","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}}]},{"date":"2023-08-30","commitResults":[{"hash":"b8fceabc358c8a9e3498e2343f9d20779129f434","isMergeCommit":false,"messageTitle":"A-TextUiTesting","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":9,"deletions":0},"java":{"insertions":2,"deletions":1},"bat":{"insertions":0,"deletions":1},"sh":{"insertions":1,"deletions":2}}},{"hash":"d8e78e382c372842a1ec79816574db4cb62e4bf6","isMergeCommit":false,"messageTitle":"testing branch","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}}]},{"date":"2023-08-31","commitResults":[{"hash":"b60a1298eb3aa7af7d24f6bd232b7149b54834a2","isMergeCommit":false,"messageTitle":"level 7 branch","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":222,"deletions":71},"md":{"insertions":1,"deletions":1}}},{"hash":"dd5c3ea1cfb714a116d8f4d35addbeaf16b5c865","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-level-7\u0027","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-09-01","commitResults":[{"hash":"656ec7ea725eab6b0e79a6583a4782b16fecee4e","isMergeCommit":false,"messageTitle":"fixing merge conflicts","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":7,"deletions":1},"java":{"insertions":110,"deletions":67}}},{"hash":"59512c87915456ba204b5e1842192826cc1099cc","isMergeCommit":false,"messageTitle":"resolve merge conflicts and updated methods","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":133,"deletions":124}}},{"hash":"7cb63fa4d7bea1ac6a2f99a5a52c4ac8c54bb939","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-02","commitResults":[{"hash":"397a787e57dfa74e56796b579c7d5cf54cd7c773","isMergeCommit":false,"messageTitle":"level 8 branch, updated time format","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":147,"deletions":28}}},{"hash":"313368dd87eec8c0c5dbae5cac96fd6045671d07","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-03","commitResults":[{"hash":"e1868a57a5208b86a2ad719622f66d94e15deff6","isMergeCommit":false,"messageTitle":"A-MoreOOP and packaging","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":754,"deletions":455}}},{"hash":"b74e20eba3bfff41d9bd55efefc9cf1e1f855a62","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-MoreOOP\u0027","messageBody":"","tags":["MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"aca13efb784aaa974e8e5c1c038e0e9f3a14844f","isMergeCommit":true,"messageTitle":"Merge branch \u0027gradle\u0027 into add-gradle-support","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-09-04","commitResults":[{"hash":"21d9640bc1b8c4a76cf2b0f22d7118c7ecfb1412","isMergeCommit":false,"messageTitle":"gradle Junit and Jar","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":18,"deletions":0},"java":{"insertions":37,"deletions":98}}},{"hash":"a1ec7930ffd7dc1a69b16fb5b7a7015f15674727","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027","messageBody":"","tags":["Gradle"],"fileTypesAndContributionMap":{}},{"hash":"d0c28bc355d154ffe332b846d9be29b14f36efeb","isMergeCommit":false,"messageTitle":"Added JavaDocs","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":10,"deletions":1},"java":{"insertions":275,"deletions":52}}},{"hash":"9b08a50cc4e4e5c9ceb6b8daff2fb2f80666b431","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","tags":["JavaDoc"],"fileTypesAndContributionMap":{}},{"hash":"767699f681631b62f8f5deb5fd7c361f0cc7e02f","isMergeCommit":false,"messageTitle":"Adhere to Coding standards","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":7}}},{"hash":"b85f59929554af96314b637f53bbad8d8234be44","isMergeCommit":true,"messageTitle":"fix merge conflicts","messageBody":"","tags":["coding-standard"],"fileTypesAndContributionMap":{}},{"hash":"c35c263292f171fc5e44f656fdf700f73a0d41d0","isMergeCommit":false,"messageTitle":"Added FindCommand","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":1},"java":{"insertions":62,"deletions":6}}},{"hash":"3d99a0afbd5435e75f49084a1dcfb1d521a1a93f","isMergeCommit":true,"messageTitle":"fix merge conflits","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{}},{"hash":"0230d569e5dfac48c0c7b14aa3a33dde13cc71d3","isMergeCommit":false,"messageTitle":"fixed some edge cases","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":4,"deletions":4},"txt":{"insertions":4,"deletions":16},"java":{"insertions":36,"deletions":10}}}]}]},"authorFileTypeContributionMap":{"ZD292":{"java":1129,"md":1,"fxml":0,"sh":1,"bat":0,"gradle":18,"txt":16}},"authorContributionVariance":{"ZD292":102038.99},"authorDisplayNameMap":{"ZD292":"CS2103T-T10-3 ONG ..DONG"}} +{"authorDailyContributionsMap":{"ZD292":[{"date":"2023-08-24","commitResults":[{"hash":"85fb8175a1af58d6166e23206494ee44d0798dde","isMergeCommit":false,"messageTitle":"L0 greeting implemented","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":27,"deletions":6}}},{"hash":"f5a0af5c2fdfe426b27f10da276a54cde9b1d78d","isMergeCommit":false,"messageTitle":"bot can respond now","messageBody":"","tags":["Level1"],"fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":5}}},{"hash":"ce7de6070210390331da9054c496b2e653f45c83","isMergeCommit":false,"messageTitle":"commit level 2","messageBody":"","tags":["Level-3","Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":37,"deletions":19}}},{"hash":"ffa5dde0f572e2cfc29d69f41a3386970d9cc6e3","isMergeCommit":false,"messageTitle":"v3 commit tasks","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":49,"deletions":5}}},{"hash":"fb1b575c8b730de38047510491f9df7ae1aaed12","isMergeCommit":false,"messageTitle":"implemented Events","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":107,"deletions":16}}},{"hash":"5492c2408c0f192d69d4d8d19b6c4270c683e032","isMergeCommit":false,"messageTitle":"level 5 handling exceptions","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":117,"deletions":68}}},{"hash":"8149c14da7e64d54f4ebe3a14686bbcb532cb51f","isMergeCommit":false,"messageTitle":"level 6 added a delete function","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":0}}}]},{"date":"2023-08-27","commitResults":[{"hash":"b07af05778de6ab938ccbac37fdf4ef8f5581ea0","isMergeCommit":false,"messageTitle":"testing","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}}]},{"date":"2023-08-30","commitResults":[{"hash":"b8fceabc358c8a9e3498e2343f9d20779129f434","isMergeCommit":false,"messageTitle":"A-TextUiTesting","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":9,"deletions":0},"java":{"insertions":2,"deletions":1},"bat":{"insertions":0,"deletions":1},"sh":{"insertions":1,"deletions":2}}},{"hash":"d8e78e382c372842a1ec79816574db4cb62e4bf6","isMergeCommit":false,"messageTitle":"testing branch","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}}]},{"date":"2023-08-31","commitResults":[{"hash":"b60a1298eb3aa7af7d24f6bd232b7149b54834a2","isMergeCommit":false,"messageTitle":"level 7 branch","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":222,"deletions":71},"md":{"insertions":1,"deletions":1}}},{"hash":"dd5c3ea1cfb714a116d8f4d35addbeaf16b5c865","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-level-7\u0027","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-09-01","commitResults":[{"hash":"656ec7ea725eab6b0e79a6583a4782b16fecee4e","isMergeCommit":false,"messageTitle":"fixing merge conflicts","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":7,"deletions":1},"java":{"insertions":110,"deletions":67}}},{"hash":"59512c87915456ba204b5e1842192826cc1099cc","isMergeCommit":false,"messageTitle":"resolve merge conflicts and updated methods","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":133,"deletions":124}}},{"hash":"7cb63fa4d7bea1ac6a2f99a5a52c4ac8c54bb939","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-02","commitResults":[{"hash":"397a787e57dfa74e56796b579c7d5cf54cd7c773","isMergeCommit":false,"messageTitle":"level 8 branch, updated time format","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":147,"deletions":28}}},{"hash":"313368dd87eec8c0c5dbae5cac96fd6045671d07","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-03","commitResults":[{"hash":"e1868a57a5208b86a2ad719622f66d94e15deff6","isMergeCommit":false,"messageTitle":"A-MoreOOP and packaging","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":754,"deletions":455}}},{"hash":"b74e20eba3bfff41d9bd55efefc9cf1e1f855a62","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-MoreOOP\u0027","messageBody":"","tags":["MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"aca13efb784aaa974e8e5c1c038e0e9f3a14844f","isMergeCommit":true,"messageTitle":"Merge branch \u0027gradle\u0027 into add-gradle-support","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-09-04","commitResults":[{"hash":"21d9640bc1b8c4a76cf2b0f22d7118c7ecfb1412","isMergeCommit":false,"messageTitle":"gradle Junit and Jar","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":18,"deletions":0},"java":{"insertions":37,"deletions":98}}},{"hash":"a1ec7930ffd7dc1a69b16fb5b7a7015f15674727","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027","messageBody":"","tags":["Gradle"],"fileTypesAndContributionMap":{}},{"hash":"d0c28bc355d154ffe332b846d9be29b14f36efeb","isMergeCommit":false,"messageTitle":"Added JavaDocs","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":10,"deletions":1},"java":{"insertions":275,"deletions":52}}},{"hash":"9b08a50cc4e4e5c9ceb6b8daff2fb2f80666b431","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","tags":["JavaDoc"],"fileTypesAndContributionMap":{}},{"hash":"767699f681631b62f8f5deb5fd7c361f0cc7e02f","isMergeCommit":false,"messageTitle":"Adhere to Coding standards","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":7}}},{"hash":"b85f59929554af96314b637f53bbad8d8234be44","isMergeCommit":true,"messageTitle":"fix merge conflicts","messageBody":"","tags":["coding-standard"],"fileTypesAndContributionMap":{}},{"hash":"c35c263292f171fc5e44f656fdf700f73a0d41d0","isMergeCommit":false,"messageTitle":"Added FindCommand","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":1},"java":{"insertions":62,"deletions":6}}},{"hash":"3d99a0afbd5435e75f49084a1dcfb1d521a1a93f","isMergeCommit":true,"messageTitle":"fix merge conflits","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{}},{"hash":"0230d569e5dfac48c0c7b14aa3a33dde13cc71d3","isMergeCommit":false,"messageTitle":"fixed some edge cases","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":4,"deletions":4},"txt":{"insertions":4,"deletions":16},"java":{"insertions":36,"deletions":10}}}]},{"date":"2023-09-10","commitResults":[{"hash":"8052b783c1df1c585c70438de0a613f1eb8e81c2","isMergeCommit":false,"messageTitle":"added a GUI","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":14,"deletions":10},"txt":{"insertions":7,"deletions":5},"fxml":{"insertions":35,"deletions":0},"java":{"insertions":569,"deletions":125}}},{"hash":"3b936b07760258396dd652405a2eaa4bb0e6f38b","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-level-10\u0027","messageBody":"","tags":["level-10"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"ZD292":{"java":1573,"md":1,"fxml":35,"sh":1,"bat":0,"gradle":22,"txt":18}},"authorContributionVariance":{"ZD292":97408.76},"authorDisplayNameMap":{"ZD292":"CS2103T-T10-3 ONG ..DONG"}} diff --git a/Zjinnnn_ip_master/authorship.json b/Zjinnnn_ip_master/authorship.json index fb4553b6..456acdf8 100644 --- a/Zjinnnn_ip_master/authorship.json +++ b/Zjinnnn_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"Zjinnnn"},"content":"# Pooh project template","lastModifiedDate":"2023-08-22"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"Zjinnnn"},"content":"This is a project template for a greenfield Java project. It\u0027s named after the bear _Pooh_. Given below are instructions on how to use it.","lastModifiedDate":"2023-08-22"},{"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":"Zjinnnn"},"content":"3. After that, locate the `src/main/java/Duke.java` file, right-click it, and choose `Run Pooh.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-08-22"},{"lineNumber":17,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"Zjinnnn"},"content":" .----------------. .----------------. .----------------. .----------------. ","lastModifiedDate":"2023-08-22"},{"lineNumber":19,"author":{"gitId":"Zjinnnn"},"content":" | .--------------. || .--------------. || .--------------. || .--------------. |","lastModifiedDate":"2023-08-22"},{"lineNumber":20,"author":{"gitId":"Zjinnnn"},"content":" | | ______ | || | ____ | || | ____ | || | ____ ____ | |","lastModifiedDate":"2023-08-22"},{"lineNumber":21,"author":{"gitId":"Zjinnnn"},"content":" | | |_ __ \\ | || | .\u0027 `. | || | .\u0027 `. | || | |_ || _| | |","lastModifiedDate":"2023-08-22"},{"lineNumber":22,"author":{"gitId":"Zjinnnn"},"content":" | | | |__) | | || | / .--. \\ | || | / .--. \\ | || | | |__| | | |","lastModifiedDate":"2023-08-22"},{"lineNumber":23,"author":{"gitId":"Zjinnnn"},"content":" | | | ___/ | || | | | | | | || | | | | | | || | | __ | | |","lastModifiedDate":"2023-08-22"},{"lineNumber":24,"author":{"gitId":"Zjinnnn"},"content":" | | _| |_ | || | \\ `--\u0027 / | || | \\ `--\u0027 / | || | _| | | |_ | |","lastModifiedDate":"2023-08-22"},{"lineNumber":25,"author":{"gitId":"Zjinnnn"},"content":" | | |_____| | || | `.____.\u0027 | || | `.____.\u0027 | || | |____||____| | |","lastModifiedDate":"2023-08-22"},{"lineNumber":26,"author":{"gitId":"Zjinnnn"},"content":" | | | || | | || | | || | | |","lastModifiedDate":"2023-08-22"},{"lineNumber":27,"author":{"gitId":"Zjinnnn"},"content":" | \u0027--------------\u0027 || \u0027--------------\u0027 || \u0027--------------\u0027 || \u0027--------------\u0027 |","lastModifiedDate":"2023-08-22"},{"lineNumber":28,"author":{"gitId":"Zjinnnn"},"content":" \u0027----------------\u0027 \u0027----------------\u0027 \u0027----------------\u0027 \u0027----------------\u0027","lastModifiedDate":"2023-08-22"},{"lineNumber":29,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"Zjinnnn":14,"-":15}},{"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":"Zjinnnn"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"Zjinnnn"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"Zjinnnn"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"Zjinnnn"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"Zjinnnn"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"Zjinnnn"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"Zjinnnn"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"Zjinnnn"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"Zjinnnn"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"Zjinnnn"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"Zjinnnn"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"Zjinnnn"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"Zjinnnn"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":28,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"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":"Zjinnnn"},"content":" mainClass.set(\"pooh.Pooh\")","lastModifiedDate":"2023-09-05"},{"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":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":51,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":52,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":53,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":54,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":55,"author":{"gitId":"-"},"content":"run {","lastModifiedDate":"2020-05-25"},{"lineNumber":56,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":57,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"Zjinnnn":16,"-":41}},{"path":"src/main/java/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Zjinnnn"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"Zjinnnn"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"Zjinnnn"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"Zjinnnn"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"Zjinnnn"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"Zjinnnn"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"Zjinnnn"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"Zjinnnn"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"Zjinnnn"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"Zjinnnn"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"Zjinnnn"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"Zjinnnn"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"Zjinnnn"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"Zjinnnn"},"content":" * An example of a custom control using FXML.","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"Zjinnnn"},"content":" * This control represents a dialog box consisting of an ImageView to represent the speaker\u0027s face and a label","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"Zjinnnn"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"Zjinnnn"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"Zjinnnn"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"Zjinnnn"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"Zjinnnn"},"content":" private Label dialog;","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"Zjinnnn"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"Zjinnnn"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"Zjinnnn"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"Zjinnnn"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"Zjinnnn"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"Zjinnnn"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"Zjinnnn"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"Zjinnnn"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"Zjinnnn"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"Zjinnnn"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"Zjinnnn"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"Zjinnnn"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"Zjinnnn"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"Zjinnnn"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"Zjinnnn"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"Zjinnnn"},"content":" private void flip() {","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"Zjinnnn"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"Zjinnnn"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"Zjinnnn"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"Zjinnnn"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"Zjinnnn"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"Zjinnnn"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"Zjinnnn"},"content":" public static DialogBox getDukeDialog(String text, Image img) {","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"Zjinnnn"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"Zjinnnn"},"content":" db.flip();","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"Zjinnnn"},"content":" return db;","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"Zjinnnn"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"Zjinnnn":59}},{"path":"src/main/java/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Zjinnnn"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"Zjinnnn"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"Zjinnnn"},"content":" * A launcher class to workaround classpath issues.","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"Zjinnnn"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"Zjinnnn"},"content":"public class Launcher {","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"Zjinnnn"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"Zjinnnn"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"Zjinnnn"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"Zjinnnn":10}},{"path":"src/main/java/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Zjinnnn"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"Zjinnnn"},"content":"import pooh.Pooh;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"Zjinnnn"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"Zjinnnn"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"Zjinnnn"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"Zjinnnn"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"Zjinnnn"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"Zjinnnn"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"Zjinnnn"},"content":" * A GUI for Duke using FXML.","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"Zjinnnn"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"Zjinnnn"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"Zjinnnn"},"content":" private Pooh pooh \u003d new Pooh(\"pooh.txt\");","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"Zjinnnn"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"Zjinnnn"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"Zjinnnn"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"Zjinnnn"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"Zjinnnn"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"Zjinnnn"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"Zjinnnn"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"Zjinnnn"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setPooh(pooh);","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"Zjinnnn"},"content":" stage.show();","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"Zjinnnn"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"Zjinnnn"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"Zjinnnn"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"Zjinnnn":30}},{"path":"src/main/java/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Zjinnnn"},"content":"import pooh.Pooh;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"Zjinnnn"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"Zjinnnn"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"Zjinnnn"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"Zjinnnn"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"Zjinnnn"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"Zjinnnn"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"Zjinnnn"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"Zjinnnn"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"Zjinnnn"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"Zjinnnn"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"Zjinnnn"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"Zjinnnn"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"Zjinnnn"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"Zjinnnn"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"Zjinnnn"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"Zjinnnn"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"Zjinnnn"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"Zjinnnn"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"Zjinnnn"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"Zjinnnn"},"content":" private Pooh pooh;","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"Zjinnnn"},"content":" private Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/piglet.jpeg\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"Zjinnnn"},"content":" private Image poohImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/pooh.png\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"Zjinnnn"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"Zjinnnn"},"content":" public void initialize() {","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"Zjinnnn"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"Zjinnnn"},"content":" public void setPooh(Pooh p) {","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"Zjinnnn"},"content":" pooh \u003d p;","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"Zjinnnn"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"Zjinnnn"},"content":" * Creates two dialog boxes, one echoing user input and the other containing Duke\u0027s reply and then appends them to","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"Zjinnnn"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"Zjinnnn"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"Zjinnnn"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"Zjinnnn"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"Zjinnnn"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"Zjinnnn"},"content":" String response \u003d pooh.getResponse(input);","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"Zjinnnn"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"Zjinnnn"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"Zjinnnn"},"content":" DialogBox.getDukeDialog(response, poohImage)","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"Zjinnnn"},"content":" );","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"Zjinnnn"},"content":" userInput.clear();","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"Zjinnnn"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"Zjinnnn":51}},{"path":"src/main/java/pooh/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Zjinnnn"},"content":"package pooh;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Zjinnnn"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Zjinnnn"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"Zjinnnn"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"Zjinnnn"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"Zjinnnn"},"content":" * Represents a deadline task that extends the Task class.","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Zjinnnn"},"content":" * \u003cp\u003e","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Zjinnnn"},"content":" * The Deadline class is a subclass of the Task class, and it adds two additional attributes:","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Zjinnnn"},"content":" * deadlineString and deadlineDateTime to represent the deadline of the task.","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"Zjinnnn"},"content":" * \u003c/p\u003e","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"Zjinnnn"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"Zjinnnn"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":15,"author":{"gitId":"Zjinnnn"},"content":" private final String deadlineString;","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"Zjinnnn"},"content":" private final LocalDate deadlineDateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":18,"author":{"gitId":"Zjinnnn"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"Zjinnnn"},"content":" * Constructs a new Deadline object with a description and a deadline.","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"Zjinnnn"},"content":" * \u003cp\u003e","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"Zjinnnn"},"content":" * The constructor initializes a Deadline object with a description and a deadline,","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"Zjinnnn"},"content":" * and it also converts the deadline string into a LocalDate object using the parseDateTime method.","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"Zjinnnn"},"content":" * \u003c/p\u003e","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"Zjinnnn"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"Zjinnnn"},"content":" * @param description The description of the deadline task.","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"Zjinnnn"},"content":" * @param deadlineString The string representation of the deadline.","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"Zjinnnn"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"Zjinnnn"},"content":" public Deadline(String description, String deadlineString) {","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"Zjinnnn"},"content":" super(description);","lastModifiedDate":"2023-08-22"},{"lineNumber":30,"author":{"gitId":"Zjinnnn"},"content":" this.deadlineString \u003d deadlineString;","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"Zjinnnn"},"content":" this.deadlineDateTime \u003d parseDateTime(deadlineString);","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":33,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":34,"author":{"gitId":"Zjinnnn"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"Zjinnnn"},"content":" * Writes the task details into a string format suitable for file storage.","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"Zjinnnn"},"content":" * \u003cp\u003e","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"Zjinnnn"},"content":" * This function prepares a string that captures the essential attributes of the Deadline object,","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"Zjinnnn"},"content":" * such as its type (D for Deadline), its completion status, its description, and its deadline.","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"Zjinnnn"},"content":" * The attributes are separated by a pipe character (|), making it easier to read them back from the file later.","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"Zjinnnn"},"content":" * \u003c/p\u003e","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"Zjinnnn"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"Zjinnnn"},"content":" * @return A string containing the task\u0027s details in a format suitable for file storage.","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"Zjinnnn"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"Zjinnnn"},"content":" public String writeTaskToFile() {","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"Zjinnnn"},"content":" return String.format(\"%s | %s | %s | %s\", \"D\",","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"Zjinnnn"},"content":" this.getIsDone() ? 1 : 0,","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"Zjinnnn"},"content":" this.getDescription(),","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"Zjinnnn"},"content":" this.deadlineString);","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"Zjinnnn"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"Zjinnnn"},"content":" * Reads task details from a given file and creates a new Deadline object.","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"Zjinnnn"},"content":" * \u003cp\u003e","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"Zjinnnn"},"content":" * This function takes an array of strings as its argument, which should contain the task details,","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"Zjinnnn"},"content":" * and returns a Deadline object based on those details.","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"Zjinnnn"},"content":" * \u003c/p\u003e","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"Zjinnnn"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"Zjinnnn"},"content":" * @param args An array of strings containing the task details.","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"Zjinnnn"},"content":" * args[1] should be \"1\" if the task is marked as done, otherwise not.","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"Zjinnnn"},"content":" * args[2] should contain the description of the task.","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"Zjinnnn"},"content":" * args[3] should contain the deadline for the task.","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"Zjinnnn"},"content":" * @return A Deadline object initialized with the given task details.","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"Zjinnnn"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"Zjinnnn"},"content":" public static Deadline readTaskFromFile(String[] args) {","lastModifiedDate":"2023-08-28"},{"lineNumber":65,"author":{"gitId":"Zjinnnn"},"content":" Deadline newDeadlineTask \u003d new Deadline(args[2], args[3]);","lastModifiedDate":"2023-08-28"},{"lineNumber":66,"author":{"gitId":"Zjinnnn"},"content":" if (args[1].equals(\"1\")) {","lastModifiedDate":"2023-08-28"},{"lineNumber":67,"author":{"gitId":"Zjinnnn"},"content":" newDeadlineTask.markAsDone();","lastModifiedDate":"2023-08-28"},{"lineNumber":68,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":69,"author":{"gitId":"Zjinnnn"},"content":" return newDeadlineTask;","lastModifiedDate":"2023-08-28"},{"lineNumber":70,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":71,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":72,"author":{"gitId":"Zjinnnn"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"Zjinnnn"},"content":" * Parses a deadline string into a LocalDate object.","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"Zjinnnn"},"content":" * \u003cp\u003e","lastModifiedDate":"2023-08-29"},{"lineNumber":75,"author":{"gitId":"Zjinnnn"},"content":" * This function tries to parse a given string into a LocalDate object.","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"Zjinnnn"},"content":" * If the parsing fails, it returns null.","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"Zjinnnn"},"content":" * \u003c/p\u003e","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"Zjinnnn"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":79,"author":{"gitId":"Zjinnnn"},"content":" * @param deadlineString The string representing the deadline date.","lastModifiedDate":"2023-08-29"},{"lineNumber":80,"author":{"gitId":"Zjinnnn"},"content":" * @return A LocalDate object if parsing is successful, otherwise null.","lastModifiedDate":"2023-08-29"},{"lineNumber":81,"author":{"gitId":"Zjinnnn"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":82,"author":{"gitId":"Zjinnnn"},"content":" private LocalDate parseDateTime(String deadlineString) {","lastModifiedDate":"2023-08-29"},{"lineNumber":83,"author":{"gitId":"Zjinnnn"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":84,"author":{"gitId":"Zjinnnn"},"content":" return LocalDate.parse(deadlineString);","lastModifiedDate":"2023-08-29"},{"lineNumber":85,"author":{"gitId":"Zjinnnn"},"content":" } catch (DateTimeParseException ex) {","lastModifiedDate":"2023-08-29"},{"lineNumber":86,"author":{"gitId":"Zjinnnn"},"content":" return null;","lastModifiedDate":"2023-08-29"},{"lineNumber":87,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":88,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":89,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":90,"author":{"gitId":"Zjinnnn"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":91,"author":{"gitId":"Zjinnnn"},"content":" * Converts the Deadline object to a string representation.","lastModifiedDate":"2023-08-29"},{"lineNumber":92,"author":{"gitId":"Zjinnnn"},"content":" * \u003cp\u003e","lastModifiedDate":"2023-08-29"},{"lineNumber":93,"author":{"gitId":"Zjinnnn"},"content":" * This function overrides the toString method to provide a string representation of the Deadline object,","lastModifiedDate":"2023-08-29"},{"lineNumber":94,"author":{"gitId":"Zjinnnn"},"content":" * which includes its status (done or not), description, and deadline date.","lastModifiedDate":"2023-08-29"},{"lineNumber":95,"author":{"gitId":"Zjinnnn"},"content":" * \u003c/p\u003e","lastModifiedDate":"2023-08-29"},{"lineNumber":96,"author":{"gitId":"Zjinnnn"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":97,"author":{"gitId":"Zjinnnn"},"content":" * @return A string representation of the Deadline object.","lastModifiedDate":"2023-08-29"},{"lineNumber":98,"author":{"gitId":"Zjinnnn"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":99,"author":{"gitId":"Zjinnnn"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":100,"author":{"gitId":"Zjinnnn"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":101,"author":{"gitId":"Zjinnnn"},"content":" String deadline;","lastModifiedDate":"2023-08-29"},{"lineNumber":102,"author":{"gitId":"Zjinnnn"},"content":" if (deadlineDateTime !\u003d null) {","lastModifiedDate":"2023-08-29"},{"lineNumber":103,"author":{"gitId":"Zjinnnn"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"MMM dd yyyy\");","lastModifiedDate":"2023-08-29"},{"lineNumber":104,"author":{"gitId":"Zjinnnn"},"content":" deadline \u003d deadlineDateTime.format(formatter);","lastModifiedDate":"2023-08-29"},{"lineNumber":105,"author":{"gitId":"Zjinnnn"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":106,"author":{"gitId":"Zjinnnn"},"content":" deadline \u003d deadlineString;","lastModifiedDate":"2023-08-29"},{"lineNumber":107,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":108,"author":{"gitId":"Zjinnnn"},"content":" return String.format(\"[D]%s (by: %s)\", super.toString(), deadline);","lastModifiedDate":"2023-08-29"},{"lineNumber":109,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":110,"author":{"gitId":"Zjinnnn"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"Zjinnnn":110}},{"path":"src/main/java/pooh/EmptyTaskDescriptorsException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Zjinnnn"},"content":"package pooh;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Zjinnnn"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Zjinnnn"},"content":" * Exception thrown when an attempt is made to create a todo task with an empty description.","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"Zjinnnn"},"content":" * \u003cp\u003e","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"Zjinnnn"},"content":" * This exception extends from PoohException, and it overrides the toString method to provide","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"Zjinnnn"},"content":" * a custom error message indicating that the description of a todo cannot be empty.","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"Zjinnnn"},"content":" * \u003c/p\u003e","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Zjinnnn"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Zjinnnn"},"content":"public class EmptyTaskDescriptorsException extends PoohException {","lastModifiedDate":"2023-08-22"},{"lineNumber":11,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"Zjinnnn"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"Zjinnnn"},"content":" * Returns a string representation of the exception, containing a custom error message.","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"Zjinnnn"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"Zjinnnn"},"content":" * @return Custom error message indicating that the description of a todo cannot be empty.","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"Zjinnnn"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"Zjinnnn"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":18,"author":{"gitId":"Zjinnnn"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":19,"author":{"gitId":"Zjinnnn"},"content":" return \" ☹ OOPS!!! The description of a todo cannot be empty.\";","lastModifiedDate":"2023-08-22"},{"lineNumber":20,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":21,"author":{"gitId":"Zjinnnn"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"Zjinnnn":21}},{"path":"src/main/java/pooh/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Zjinnnn"},"content":"package pooh;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Zjinnnn"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Zjinnnn"},"content":" * Represents an event task with a start time and an end time.","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"Zjinnnn"},"content":" * \u003cp\u003e","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"Zjinnnn"},"content":" * The Event class is a subclass of the Task class and it adds two additional attributes,","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"Zjinnnn"},"content":" * namely eventStartTime and eventEndTime, to represent the duration of the event.","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"Zjinnnn"},"content":" * \u003c/p\u003e","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Zjinnnn"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Zjinnnn"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":11,"author":{"gitId":"Zjinnnn"},"content":" private final String eventStartTime;","lastModifiedDate":"2023-08-22"},{"lineNumber":12,"author":{"gitId":"Zjinnnn"},"content":" private final String eventEndTime;","lastModifiedDate":"2023-08-22"},{"lineNumber":13,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":14,"author":{"gitId":"Zjinnnn"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"Zjinnnn"},"content":" * Constructs a new Event object.","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"Zjinnnn"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"Zjinnnn"},"content":" * @param description The description of the event.","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"Zjinnnn"},"content":" * @param eventStartTime The start time of the event.","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"Zjinnnn"},"content":" * @param eventEndTime The end time of the event.","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"Zjinnnn"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"Zjinnnn"},"content":" public Event(String description, String eventStartTime, String eventEndTime) {","lastModifiedDate":"2023-08-22"},{"lineNumber":22,"author":{"gitId":"Zjinnnn"},"content":" super(description);","lastModifiedDate":"2023-08-22"},{"lineNumber":23,"author":{"gitId":"Zjinnnn"},"content":" this.eventStartTime \u003d eventStartTime;","lastModifiedDate":"2023-08-22"},{"lineNumber":24,"author":{"gitId":"Zjinnnn"},"content":" this.eventEndTime \u003d eventEndTime;","lastModifiedDate":"2023-08-22"},{"lineNumber":25,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":26,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":27,"author":{"gitId":"Zjinnnn"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"Zjinnnn"},"content":" * Serializes the Event object into a string format suitable for file storage.","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"Zjinnnn"},"content":" * \u003cp\u003e","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"Zjinnnn"},"content":" * This method prepares a string that captures the essential attributes of the Event object,","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"Zjinnnn"},"content":" * such as its type (E for Event), its completion status, its description, and its event times.","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"Zjinnnn"},"content":" * \u003c/p\u003e","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"Zjinnnn"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"Zjinnnn"},"content":" * @return A string containing the task\u0027s details in a format suitable for file storage.","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"Zjinnnn"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"Zjinnnn"},"content":" public String writeTaskToFile() {","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"Zjinnnn"},"content":" return String.format(\"%s | %s | %s | %s-%s\", \"E\",","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"Zjinnnn"},"content":" this.getIsDone() ? 1 : 0,","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"Zjinnnn"},"content":" this.getDescription(),","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"Zjinnnn"},"content":" this.eventStartTime,","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"Zjinnnn"},"content":" this.eventEndTime);","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"Zjinnnn"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"Zjinnnn"},"content":" * Reads task details from a given file and creates a new Event object.","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"Zjinnnn"},"content":" * \u003cp\u003e","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"Zjinnnn"},"content":" * This static method takes an array of strings as its argument, which should contain the task details,","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"Zjinnnn"},"content":" * and returns an Event object based on those details.","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"Zjinnnn"},"content":" * \u003c/p\u003e","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"Zjinnnn"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"Zjinnnn"},"content":" * @param args An array of strings containing the task details.","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"Zjinnnn"},"content":" * @return An Event object initialized with the given task details.","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"Zjinnnn"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"Zjinnnn"},"content":" public static Event readTaskFromFile(String[] args) {","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"Zjinnnn"},"content":" String[] eventTime \u003d args[3].split(\"-\");","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"Zjinnnn"},"content":" Event newEventTask \u003d new Event(args[2], eventTime[0], eventTime[1]);","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"Zjinnnn"},"content":" if (args[1].equals(\"1\")) {","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"Zjinnnn"},"content":" newEventTask.markAsDone();","lastModifiedDate":"2023-08-28"},{"lineNumber":59,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":60,"author":{"gitId":"Zjinnnn"},"content":" return newEventTask;","lastModifiedDate":"2023-08-28"},{"lineNumber":61,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":62,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":63,"author":{"gitId":"Zjinnnn"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"Zjinnnn"},"content":" * Converts the Event object to a string representation.","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"Zjinnnn"},"content":" * \u003cp\u003e","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"Zjinnnn"},"content":" * This method overrides the toString method to provide a string representation of the Event object,","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"Zjinnnn"},"content":" * which includes its status (done or not), description, and event times.","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"Zjinnnn"},"content":" * \u003c/p\u003e","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"Zjinnnn"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"Zjinnnn"},"content":" * @return A string representation of the Event object.","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"Zjinnnn"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"Zjinnnn"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":73,"author":{"gitId":"Zjinnnn"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":74,"author":{"gitId":"Zjinnnn"},"content":" return String.format(\"[E]%s (from: %s to: %s)\", super.toString(), this.eventStartTime, this.eventEndTime);","lastModifiedDate":"2023-08-22"},{"lineNumber":75,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":76,"author":{"gitId":"Zjinnnn"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"Zjinnnn":76}},{"path":"src/main/java/pooh/InvalidTaskException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Zjinnnn"},"content":"package pooh;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Zjinnnn"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Zjinnnn"},"content":" * Exception thrown when an invalid task is selected.","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"Zjinnnn"},"content":" * \u003cp\u003e","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"Zjinnnn"},"content":" * This exception extends from PoohException, and it overrides the toString method to provide","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"Zjinnnn"},"content":" * a custom error message indicating that the selected task is not valid.","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"Zjinnnn"},"content":" * \u003c/p\u003e","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Zjinnnn"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Zjinnnn"},"content":"public class InvalidTaskException extends PoohException {","lastModifiedDate":"2023-08-22"},{"lineNumber":11,"author":{"gitId":"Zjinnnn"},"content":" ","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"Zjinnnn"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"Zjinnnn"},"content":" * Returns a string representation of the exception, containing a custom error message.","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"Zjinnnn"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"Zjinnnn"},"content":" * @return Custom error message indicating that the selected task is invalid.","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"Zjinnnn"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"Zjinnnn"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":18,"author":{"gitId":"Zjinnnn"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":19,"author":{"gitId":"Zjinnnn"},"content":" return \" ☹ OOPS!!! No such task! Please reselect carefully!\";","lastModifiedDate":"2023-08-22"},{"lineNumber":20,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":21,"author":{"gitId":"Zjinnnn"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"Zjinnnn":21}},{"path":"src/main/java/pooh/LoadTasksException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Zjinnnn"},"content":"package pooh;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Zjinnnn"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Zjinnnn"},"content":" * Exception thrown when there is an error loading tasks from a file.","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"Zjinnnn"},"content":" * \u003cp\u003e","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"Zjinnnn"},"content":" * This exception is a subclass of PoohException and overrides the toString method to provide","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"Zjinnnn"},"content":" * a custom error message indicating that there was an error loading tasks from a file.","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"Zjinnnn"},"content":" * \u003c/p\u003e","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Zjinnnn"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Zjinnnn"},"content":"public class LoadTasksException extends PoohException {","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"Zjinnnn"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"Zjinnnn"},"content":" * Returns a string representation of the exception, containing a custom error message.","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"Zjinnnn"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"Zjinnnn"},"content":" * @return Custom error message indicating that an error has occurred while loading tasks from a file.","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"Zjinnnn"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"Zjinnnn"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"Zjinnnn"},"content":" public String toString() {","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"Zjinnnn"},"content":" return \" An error has occurred whilst loading tasks from file. :-(\";","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"Zjinnnn"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"Zjinnnn":21}},{"path":"src/main/java/pooh/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Zjinnnn"},"content":"package pooh;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Zjinnnn"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Zjinnnn"},"content":" * Responsible for parsing user input and executing commands.","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"Zjinnnn"},"content":" * \u003cp\u003e","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"Zjinnnn"},"content":" * This class takes care of interpreting user commands and then calling appropriate","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"Zjinnnn"},"content":" * methods to perform the actions described by those commands. It supports a variety","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"Zjinnnn"},"content":" * of commands including task listing, marking tasks as done or undone, and more.","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Zjinnnn"},"content":" * \u003c/p\u003e","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Zjinnnn"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Zjinnnn"},"content":"public class Parser {","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"Zjinnnn"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"Zjinnnn"},"content":" * Parses and executes the command specified in the given user input.","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"Zjinnnn"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"Zjinnnn"},"content":" * @param taskStorage The storage object responsible for task storage operations.","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"Zjinnnn"},"content":" * @param taskList The task list that holds all tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"Zjinnnn"},"content":" * @param userInput The string input from the user.","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"Zjinnnn"},"content":" * @throws UnrecognizedCommandException If the command is not recognized.","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"Zjinnnn"},"content":" * @throws InvalidTaskException If the task specified for certain operations is invalid.","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"Zjinnnn"},"content":" * @throws WriteTasksException If there is an error while writing tasks to storage.","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"Zjinnnn"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"Zjinnnn"},"content":" public String parseInput(Storage taskStorage, TaskList taskList, Ui ui, String userInput) throws","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"Zjinnnn"},"content":" UnrecognizedCommandException, InvalidTaskException, WriteTasksException {","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"Zjinnnn"},"content":" String userAction \u003d userInput.split(\" \")[0];","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"Zjinnnn"},"content":" if (userAction.equalsIgnoreCase(\"list\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"Zjinnnn"},"content":" return ui.getTasksMsg(taskList);","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"Zjinnnn"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"Zjinnnn"},"content":" switch (userAction.toLowerCase()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"Zjinnnn"},"content":" case \"bye\":","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"Zjinnnn"},"content":" taskStorage.writeTask(taskList);","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"Zjinnnn"},"content":" return ui.getExitMsg();","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"Zjinnnn"},"content":" case \"mark\":","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"Zjinnnn"},"content":" int markIndex \u003d Integer.parseInt(userInput.split(\" \")[1]) - 1;","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"Zjinnnn"},"content":" Task markTask \u003d taskList.getTask(markIndex);","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"Zjinnnn"},"content":" markTask.markAsDone();","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"Zjinnnn"},"content":" taskStorage.writeTask(taskList);","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"Zjinnnn"},"content":" return ui.getTaskDoneMsg(markTask);","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"Zjinnnn"},"content":" case \"unmark\":","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"Zjinnnn"},"content":" int unmarkIndex \u003d Integer.parseInt(userInput.split(\" \")[1]) - 1;","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"Zjinnnn"},"content":" Task unmarkTask \u003d taskList.getTask(unmarkIndex);","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"Zjinnnn"},"content":" unmarkTask.markAsUndone();","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"Zjinnnn"},"content":" taskStorage.writeTask(taskList);","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"Zjinnnn"},"content":" return ui.getTaskUndoneMsg(unmarkTask);","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"Zjinnnn"},"content":" case \"todo\":","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"Zjinnnn"},"content":" case \"event\":","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"Zjinnnn"},"content":" case \"deadline\":","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"Zjinnnn"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"Zjinnnn"},"content":" TaskList.addTask(taskList, userAction, userInput);","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"Zjinnnn"},"content":" Task task \u003d taskList.getTask(taskList.getSize() - 1);","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"Zjinnnn"},"content":" taskStorage.writeTask(taskList);","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"Zjinnnn"},"content":" return ui.getAddTaskMsg(taskList, task);","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"Zjinnnn"},"content":" } catch (EmptyTaskDescriptorsException ex) {","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"Zjinnnn"},"content":" return ui.respond(ex.toString());","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"Zjinnnn"},"content":" case \"delete\":","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"Zjinnnn"},"content":" int delIndex \u003d Integer.parseInt(userInput.split(\" \")[1]) - 1;","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"Zjinnnn"},"content":" Task task \u003d taskList.getTask(delIndex);","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"Zjinnnn"},"content":" TaskList.deleteTask(taskList, delIndex);","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"Zjinnnn"},"content":" taskStorage.writeTask(taskList);","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"Zjinnnn"},"content":" return ui.getDeleteTaskMsg(taskList, task);","lastModifiedDate":"2023-09-05"},{"lineNumber":62,"author":{"gitId":"Zjinnnn"},"content":" case \"find\":","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"Zjinnnn"},"content":" String keyword \u003d userInput.split(\" \")[1];","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"Zjinnnn"},"content":" TaskList keywordTaskList \u003d taskList.getTasksWithKeyword(keyword);","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"Zjinnnn"},"content":" if (keywordTaskList.getSize() \u003e\u003d 1) {","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"Zjinnnn"},"content":" return ui.getKeywordTasksMsg(keywordTaskList);","lastModifiedDate":"2023-09-05"},{"lineNumber":67,"author":{"gitId":"Zjinnnn"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"Zjinnnn"},"content":" return ui.getNoKeywordTasksFoundMsg();","lastModifiedDate":"2023-09-05"},{"lineNumber":69,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"Zjinnnn"},"content":" default:","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"Zjinnnn"},"content":" throw new UnrecognizedCommandException();","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":75,"author":{"gitId":"Zjinnnn"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"Zjinnnn":75}},{"path":"src/main/java/pooh/Pooh.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Zjinnnn"},"content":"package pooh;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Zjinnnn"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-22"},{"lineNumber":4,"author":{"gitId":"Zjinnnn"},"content":"import java.util.List;","lastModifiedDate":"2023-08-22"},{"lineNumber":5,"author":{"gitId":"Zjinnnn"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-22"},{"lineNumber":6,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"Zjinnnn"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"Zjinnnn"},"content":" * Main application class for the Pooh chatbot.","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Zjinnnn"},"content":" * \u003cp\u003e","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Zjinnnn"},"content":" * This class is responsible for initializing storage, loading tasks, and running","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Zjinnnn"},"content":" * the main event loop of the application. It delegates command parsing to the Parser","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"Zjinnnn"},"content":" * class and storage operations to the Storage class.","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"Zjinnnn"},"content":" * \u003c/p\u003e","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"Zjinnnn"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"Zjinnnn"},"content":"public class Pooh {","lastModifiedDate":"2023-08-22"},{"lineNumber":16,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":17,"author":{"gitId":"Zjinnnn"},"content":" private final Storage taskStorage;","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"Zjinnnn"},"content":" private final Parser cmdParser;","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"Zjinnnn"},"content":" private TaskList taskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"Zjinnnn"},"content":" private final Ui ui;","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":22,"author":{"gitId":"Zjinnnn"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"Zjinnnn"},"content":" * Constructs a new Pooh chatbot.","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"Zjinnnn"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"Zjinnnn"},"content":" * @param filePath The file path where tasks are stored.","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"Zjinnnn"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"Zjinnnn"},"content":" public Pooh(String filePath) {","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":29,"author":{"gitId":"Zjinnnn"},"content":" cmdParser \u003d new Parser();","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"Zjinnnn"},"content":" taskStorage \u003d new Storage(filePath);","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"Zjinnnn"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"Zjinnnn"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"Zjinnnn"},"content":" taskList \u003d new TaskList(taskStorage.loadTasks());","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"Zjinnnn"},"content":" } catch (LoadTasksException ex) {","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"Zjinnnn"},"content":" ui.respond(ex.toString());","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"Zjinnnn"},"content":" List\u003cTask\u003e listOfTasks \u003d new ArrayList\u003cTask\u003e();","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"Zjinnnn"},"content":" taskList \u003d new TaskList(listOfTasks);","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"Zjinnnn"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"Zjinnnn"},"content":" * Processes a given user command, parses it, and returns an appropriate response.","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"Zjinnnn"},"content":" * \u003cp\u003e","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"Zjinnnn"},"content":" * This method attempts to parse the user\u0027s command through the {@code cmdParser}. If the command is","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"Zjinnnn"},"content":" * valid, it performs the necessary operations and returns the response. Otherwise, if an exception","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"Zjinnnn"},"content":" * occurs, it handles the exception and returns a user-friendly error message.","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"Zjinnnn"},"content":" * \u003c/p\u003e","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"Zjinnnn"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"Zjinnnn"},"content":" * @param userCmd The command string inputted by the user.","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"Zjinnnn"},"content":" * @return A response string that results from processing the user\u0027s command.","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"Zjinnnn"},"content":" * This could be a successful operation message or an error message.","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"Zjinnnn"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"Zjinnnn"},"content":" public String getResponse(String userCmd) {","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"Zjinnnn"},"content":" try {","lastModifiedDate":"2023-08-22"},{"lineNumber":55,"author":{"gitId":"Zjinnnn"},"content":" return cmdParser.parseInput(taskStorage, taskList, ui, userCmd);","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"Zjinnnn"},"content":" } catch (UnrecognizedCommandException ex) {","lastModifiedDate":"2023-08-22"},{"lineNumber":57,"author":{"gitId":"Zjinnnn"},"content":" return ui.respond(ex.toString());","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"Zjinnnn"},"content":" } catch (WriteTasksException ex) {","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"Zjinnnn"},"content":" return ui.respond(ex.toString());","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"Zjinnnn"},"content":" } catch (InvalidTaskException ex) {","lastModifiedDate":"2023-08-22"},{"lineNumber":61,"author":{"gitId":"Zjinnnn"},"content":" return ui.respond(ex.toString());","lastModifiedDate":"2023-09-05"},{"lineNumber":62,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":63,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":64,"author":{"gitId":"Zjinnnn"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"Zjinnnn":64}},{"path":"src/main/java/pooh/PoohException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Zjinnnn"},"content":"package pooh;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Zjinnnn"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Zjinnnn"},"content":" * Custom exception class for the Pooh chatbot.","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"Zjinnnn"},"content":" * \u003cp\u003e","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"Zjinnnn"},"content":" * This class serves as the base class for all custom exceptions in the Pooh application.","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"Zjinnnn"},"content":" * It is meant to be subclassed by more specific exception types to handle various error","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"Zjinnnn"},"content":" * scenarios within the application.","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Zjinnnn"},"content":" * \u003c/p\u003e","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Zjinnnn"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Zjinnnn"},"content":"public class PoohException extends Exception {","lastModifiedDate":"2023-08-22"},{"lineNumber":12,"author":{"gitId":"Zjinnnn"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"Zjinnnn":12}},{"path":"src/main/java/pooh/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Zjinnnn"},"content":"package pooh;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Zjinnnn"},"content":"import java.io.*;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Zjinnnn"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"Zjinnnn"},"content":"import java.util.List;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"Zjinnnn"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"Zjinnnn"},"content":" * Handles storage-related operations for the Pooh chatbot.","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Zjinnnn"},"content":" * \u003cp\u003e","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Zjinnnn"},"content":" * This class is responsible for reading and writing tasks to and from a file.","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Zjinnnn"},"content":" * \u003c/p\u003e","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"Zjinnnn"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"Zjinnnn"},"content":"public class Storage {","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"Zjinnnn"},"content":" private final String filePath;","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"Zjinnnn"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"Zjinnnn"},"content":" * Constructs a new Storage instance.","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"Zjinnnn"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"Zjinnnn"},"content":" * @param filePath The path of the file to read from and write to.","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"Zjinnnn"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"Zjinnnn"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"Zjinnnn"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"Zjinnnn"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"Zjinnnn"},"content":" * Loads tasks from the file specified by {@code filePath}.","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"Zjinnnn"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"Zjinnnn"},"content":" * @return A list of tasks loaded from the file.","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"Zjinnnn"},"content":" * @throws LoadTasksException If there is an error reading the file.","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"Zjinnnn"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"Zjinnnn"},"content":" public List\u003cTask\u003e loadTasks() throws LoadTasksException {","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"Zjinnnn"},"content":" File file \u003d new File(this.filePath);","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"Zjinnnn"},"content":" List\u003cTask\u003e taskList \u003d new ArrayList\u003cTask\u003e();","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"Zjinnnn"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"Zjinnnn"},"content":" if (file.exists()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"Zjinnnn"},"content":" BufferedReader fileReader \u003d new BufferedReader(new FileReader(file));","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"Zjinnnn"},"content":" String line \u003d fileReader.readLine();","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"Zjinnnn"},"content":" while (line !\u003d null) {","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"Zjinnnn"},"content":" Task task \u003d Task.readTaskFromFile(line);","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"Zjinnnn"},"content":" taskList.add(task);","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"Zjinnnn"},"content":" line \u003d fileReader.readLine();","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"Zjinnnn"},"content":" fileReader.close();","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"Zjinnnn"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"Zjinnnn"},"content":" boolean fileCreated \u003d file.createNewFile();","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"Zjinnnn"},"content":" } catch (IOException ex) {","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"Zjinnnn"},"content":" throw new LoadTasksException();","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"Zjinnnn"},"content":" return taskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"Zjinnnn"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"Zjinnnn"},"content":" * Writes the current tasks to the file specified by {@code filePath}.","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"Zjinnnn"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"Zjinnnn"},"content":" * @param taskList The list of tasks to write.","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"Zjinnnn"},"content":" * @throws WriteTasksException If there is an error writing to the file.","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"Zjinnnn"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"Zjinnnn"},"content":" public void writeTask(TaskList taskList) throws WriteTasksException {","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"Zjinnnn"},"content":" try (FileWriter fileWriter \u003d new FileWriter(\"pooh.txt\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"Zjinnnn"},"content":" for (int i \u003d 0; i \u003c taskList.getSize(); i++) {","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"Zjinnnn"},"content":" Task task \u003d taskList.getTask(i);","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"Zjinnnn"},"content":" fileWriter.write(task.writeTaskToFile() + \"\\n\");","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"Zjinnnn"},"content":" } catch (IOException ex) {","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"Zjinnnn"},"content":" throw new WriteTasksException();","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"Zjinnnn"},"content":" } catch (InvalidTaskException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"Zjinnnn"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"Zjinnnn"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"Zjinnnn":74}},{"path":"src/main/java/pooh/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Zjinnnn"},"content":"package pooh;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"Zjinnnn"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Zjinnnn"},"content":" * Abstract class representing a task.","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"Zjinnnn"},"content":" * \u003cp\u003e","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"Zjinnnn"},"content":" * This class serves as the basis for different types of tasks and encapsulates","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"Zjinnnn"},"content":" * the basic information and operations related to a task.","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"Zjinnnn"},"content":" * \u003c/p\u003e","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Zjinnnn"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Zjinnnn"},"content":"public abstract class Task {","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"Zjinnnn"},"content":" private final String description;","lastModifiedDate":"2023-08-22"},{"lineNumber":12,"author":{"gitId":"Zjinnnn"},"content":" private boolean isDone;","lastModifiedDate":"2023-08-22"},{"lineNumber":13,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":14,"author":{"gitId":"Zjinnnn"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"Zjinnnn"},"content":" * Constructs a new Task with the given description.","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"Zjinnnn"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"Zjinnnn"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"Zjinnnn"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"Zjinnnn"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-22"},{"lineNumber":20,"author":{"gitId":"Zjinnnn"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-22"},{"lineNumber":21,"author":{"gitId":"Zjinnnn"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-22"},{"lineNumber":22,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":23,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":24,"author":{"gitId":"Zjinnnn"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"Zjinnnn"},"content":" * Retrieves the description of the task.","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"Zjinnnn"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"Zjinnnn"},"content":" * @return The description of the task.","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"Zjinnnn"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"Zjinnnn"},"content":" public String getDescription() {","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"Zjinnnn"},"content":" return this.description;","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":32,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":33,"author":{"gitId":"Zjinnnn"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"Zjinnnn"},"content":" * Checks whether the task is done or not.","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"Zjinnnn"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"Zjinnnn"},"content":" * @return {@code true} if the task is done, {@code false} otherwise.","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"Zjinnnn"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"Zjinnnn"},"content":" public boolean getIsDone() {","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"Zjinnnn"},"content":" return this.isDone;","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"Zjinnnn"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"Zjinnnn"},"content":" * Retrieves the status icon based on the task\u0027s completion status.","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"Zjinnnn"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"Zjinnnn"},"content":" * @return \"X\" if the task is done, \" \" otherwise.","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"Zjinnnn"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"Zjinnnn"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"Zjinnnn"},"content":" return (isDone ? \"X\" : \" \"); // mark done task with X","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":50,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":51,"author":{"gitId":"Zjinnnn"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"Zjinnnn"},"content":" * Marks the task as done.","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"Zjinnnn"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"Zjinnnn"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-22"},{"lineNumber":55,"author":{"gitId":"Zjinnnn"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-22"},{"lineNumber":56,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":57,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":58,"author":{"gitId":"Zjinnnn"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"Zjinnnn"},"content":" * Marks the task as not done.","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"Zjinnnn"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"Zjinnnn"},"content":" public void markAsUndone() {","lastModifiedDate":"2023-08-22"},{"lineNumber":62,"author":{"gitId":"Zjinnnn"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-22"},{"lineNumber":63,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":64,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":65,"author":{"gitId":"Zjinnnn"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"Zjinnnn"},"content":" * Converts the task to a string format suitable for file storage.","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"Zjinnnn"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"Zjinnnn"},"content":" * @return A string representation of the task for file storage.","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"Zjinnnn"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"Zjinnnn"},"content":" public abstract String writeTaskToFile();","lastModifiedDate":"2023-08-28"},{"lineNumber":71,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":72,"author":{"gitId":"Zjinnnn"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"Zjinnnn"},"content":" * Creates a task from its string representation in a file.","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"Zjinnnn"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":75,"author":{"gitId":"Zjinnnn"},"content":" * @param input A string containing the task\u0027s information.","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"Zjinnnn"},"content":" * @return A new Task object corresponding to the input string.","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"Zjinnnn"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"Zjinnnn"},"content":" public static Task readTaskFromFile(String input) {","lastModifiedDate":"2023-08-28"},{"lineNumber":79,"author":{"gitId":"Zjinnnn"},"content":" String[] args \u003d input.split(\" \\\\| \");","lastModifiedDate":"2023-08-28"},{"lineNumber":80,"author":{"gitId":"Zjinnnn"},"content":" Task task;","lastModifiedDate":"2023-08-28"},{"lineNumber":81,"author":{"gitId":"Zjinnnn"},"content":" switch (args[0]) {","lastModifiedDate":"2023-08-28"},{"lineNumber":82,"author":{"gitId":"Zjinnnn"},"content":" case \"T\":","lastModifiedDate":"2023-08-28"},{"lineNumber":83,"author":{"gitId":"Zjinnnn"},"content":" task \u003d Todo.readTaskFromFile(args);","lastModifiedDate":"2023-08-28"},{"lineNumber":84,"author":{"gitId":"Zjinnnn"},"content":" break;","lastModifiedDate":"2023-08-28"},{"lineNumber":85,"author":{"gitId":"Zjinnnn"},"content":" case \"D\":","lastModifiedDate":"2023-08-28"},{"lineNumber":86,"author":{"gitId":"Zjinnnn"},"content":" task \u003d Deadline.readTaskFromFile(args);","lastModifiedDate":"2023-08-28"},{"lineNumber":87,"author":{"gitId":"Zjinnnn"},"content":" break;","lastModifiedDate":"2023-08-28"},{"lineNumber":88,"author":{"gitId":"Zjinnnn"},"content":" case \"E\":","lastModifiedDate":"2023-08-28"},{"lineNumber":89,"author":{"gitId":"Zjinnnn"},"content":" task \u003d Event.readTaskFromFile(args);","lastModifiedDate":"2023-08-28"},{"lineNumber":90,"author":{"gitId":"Zjinnnn"},"content":" break;","lastModifiedDate":"2023-08-28"},{"lineNumber":91,"author":{"gitId":"Zjinnnn"},"content":" default:","lastModifiedDate":"2023-08-28"},{"lineNumber":92,"author":{"gitId":"Zjinnnn"},"content":" task \u003d null;","lastModifiedDate":"2023-08-28"},{"lineNumber":93,"author":{"gitId":"Zjinnnn"},"content":" break;","lastModifiedDate":"2023-08-28"},{"lineNumber":94,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":95,"author":{"gitId":"Zjinnnn"},"content":" return task;","lastModifiedDate":"2023-08-28"},{"lineNumber":96,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":97,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":98,"author":{"gitId":"Zjinnnn"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":99,"author":{"gitId":"Zjinnnn"},"content":" * Checks if the task description contains a specified keyword.","lastModifiedDate":"2023-08-29"},{"lineNumber":100,"author":{"gitId":"Zjinnnn"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":101,"author":{"gitId":"Zjinnnn"},"content":" * @param keyword The string keyword to search for in the task description.","lastModifiedDate":"2023-08-29"},{"lineNumber":102,"author":{"gitId":"Zjinnnn"},"content":" * @return true if the task description contains the keyword, false otherwise.","lastModifiedDate":"2023-08-29"},{"lineNumber":103,"author":{"gitId":"Zjinnnn"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":104,"author":{"gitId":"Zjinnnn"},"content":" public boolean ifDescriptionContains(String keyword) {","lastModifiedDate":"2023-08-29"},{"lineNumber":105,"author":{"gitId":"Zjinnnn"},"content":" return this.description.contains(keyword);","lastModifiedDate":"2023-08-29"},{"lineNumber":106,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":107,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":108,"author":{"gitId":"Zjinnnn"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":109,"author":{"gitId":"Zjinnnn"},"content":" * Converts the task to a user-friendly string representation.","lastModifiedDate":"2023-08-29"},{"lineNumber":110,"author":{"gitId":"Zjinnnn"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":111,"author":{"gitId":"Zjinnnn"},"content":" * @return A string representation of the task.","lastModifiedDate":"2023-08-29"},{"lineNumber":112,"author":{"gitId":"Zjinnnn"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":113,"author":{"gitId":"Zjinnnn"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":114,"author":{"gitId":"Zjinnnn"},"content":" public String toString() {","lastModifiedDate":"2023-08-28"},{"lineNumber":115,"author":{"gitId":"Zjinnnn"},"content":" return String.format(\"[%s] %s\", getStatusIcon(), description);","lastModifiedDate":"2023-08-28"},{"lineNumber":116,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":117,"author":{"gitId":"Zjinnnn"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"Zjinnnn":117}},{"path":"src/main/java/pooh/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Zjinnnn"},"content":"package pooh;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Zjinnnn"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Zjinnnn"},"content":"import java.util.List;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"Zjinnnn"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"Zjinnnn"},"content":" * Class representing a list of tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"Zjinnnn"},"content":" * \u003cp\u003e","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Zjinnnn"},"content":" * This class encapsulates the list of tasks and provides methods for adding,","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Zjinnnn"},"content":" * removing, and retrieving tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Zjinnnn"},"content":" * \u003c/p\u003e","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"Zjinnnn"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"Zjinnnn"},"content":"public class TaskList {","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"Zjinnnn"},"content":" private final List\u003cTask\u003e taskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"Zjinnnn"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"Zjinnnn"},"content":" * Constructs a new TaskList with the given list of tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"Zjinnnn"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"Zjinnnn"},"content":" * @param taskList The initial list of tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"Zjinnnn"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"Zjinnnn"},"content":" public TaskList(List\u003cTask\u003e taskList) {","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"Zjinnnn"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"Zjinnnn"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"Zjinnnn"},"content":" * Adds a new task to the list.","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"Zjinnnn"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"Zjinnnn"},"content":" * @param task The task to be added.","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"Zjinnnn"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"Zjinnnn"},"content":" public void add(Task task) {","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"Zjinnnn"},"content":" this.taskList.add(task);","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"Zjinnnn"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"Zjinnnn"},"content":" * Removes a task from the list at the specified index.","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"Zjinnnn"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"Zjinnnn"},"content":" * @param task The index of the task to be removed.","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"Zjinnnn"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"Zjinnnn"},"content":" public void remove(int task) {","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"Zjinnnn"},"content":" this.taskList.remove(task);","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"Zjinnnn"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"Zjinnnn"},"content":" * Retrieves a task from the list at the specified index.","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"Zjinnnn"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"Zjinnnn"},"content":" * @param index The index of the task to retrieve.","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"Zjinnnn"},"content":" * @return The task at the specified index.","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"Zjinnnn"},"content":" * @throws InvalidTaskException If the index is out of bounds.","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"Zjinnnn"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"Zjinnnn"},"content":" public Task getTask(int index) throws InvalidTaskException {","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"Zjinnnn"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"Zjinnnn"},"content":" return this.taskList.get(index);","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"Zjinnnn"},"content":" } catch (IndexOutOfBoundsException ex) {","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"Zjinnnn"},"content":" throw new InvalidTaskException();","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"Zjinnnn"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"Zjinnnn"},"content":" * Retrieves the size of the task list.","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"Zjinnnn"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"Zjinnnn"},"content":" * @return The number of tasks in the list.","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"Zjinnnn"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"Zjinnnn"},"content":" public int getSize() {","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"Zjinnnn"},"content":" return this.taskList.size();","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"Zjinnnn"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"Zjinnnn"},"content":" * Adds a task to the task list based on user input.","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"Zjinnnn"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"Zjinnnn"},"content":" * @param taskList The task list to which the task will be added.","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"Zjinnnn"},"content":" * @param userAction The type of task to be added.","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"Zjinnnn"},"content":" * @param cmd The full command from the user.","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"Zjinnnn"},"content":" * @throws EmptyTaskDescriptorsException If the task description is empty.","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"Zjinnnn"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":75,"author":{"gitId":"Zjinnnn"},"content":" public static void addTask(TaskList taskList, String userAction, String cmd) throws","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"Zjinnnn"},"content":" EmptyTaskDescriptorsException {","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"Zjinnnn"},"content":" if (cmd.split(\" \", 2).length \u003d\u003d 1) {","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"Zjinnnn"},"content":" throw new EmptyTaskDescriptorsException();","lastModifiedDate":"2023-08-29"},{"lineNumber":79,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":80,"author":{"gitId":"Zjinnnn"},"content":" String userArgs \u003d cmd.split(\" \", 2)[1];","lastModifiedDate":"2023-08-29"},{"lineNumber":81,"author":{"gitId":"Zjinnnn"},"content":" Task task;","lastModifiedDate":"2023-08-29"},{"lineNumber":82,"author":{"gitId":"Zjinnnn"},"content":" if (userAction.equalsIgnoreCase(\"todo\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":83,"author":{"gitId":"Zjinnnn"},"content":" task \u003d new Todo(userArgs);","lastModifiedDate":"2023-08-29"},{"lineNumber":84,"author":{"gitId":"Zjinnnn"},"content":" } else if (userAction.equalsIgnoreCase(\"deadline\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":85,"author":{"gitId":"Zjinnnn"},"content":" String[] specificArgs \u003d userArgs.split(\" /by \", 2);","lastModifiedDate":"2023-08-29"},{"lineNumber":86,"author":{"gitId":"Zjinnnn"},"content":" String description \u003d specificArgs[0];","lastModifiedDate":"2023-08-29"},{"lineNumber":87,"author":{"gitId":"Zjinnnn"},"content":" String deadlineTime \u003d specificArgs[1];","lastModifiedDate":"2023-08-29"},{"lineNumber":88,"author":{"gitId":"Zjinnnn"},"content":" task \u003d new Deadline(description, deadlineTime);","lastModifiedDate":"2023-08-29"},{"lineNumber":89,"author":{"gitId":"Zjinnnn"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":90,"author":{"gitId":"Zjinnnn"},"content":" String[] specificArgs \u003d userArgs.split(\" /from \", 2);","lastModifiedDate":"2023-08-29"},{"lineNumber":91,"author":{"gitId":"Zjinnnn"},"content":" String description \u003d specificArgs[0];","lastModifiedDate":"2023-08-29"},{"lineNumber":92,"author":{"gitId":"Zjinnnn"},"content":" String[] eventTimes \u003d specificArgs[1].split(\" /to \");","lastModifiedDate":"2023-08-29"},{"lineNumber":93,"author":{"gitId":"Zjinnnn"},"content":" String eventStartTime \u003d eventTimes[0];","lastModifiedDate":"2023-08-29"},{"lineNumber":94,"author":{"gitId":"Zjinnnn"},"content":" String eventEndTime \u003d eventTimes[1];","lastModifiedDate":"2023-08-29"},{"lineNumber":95,"author":{"gitId":"Zjinnnn"},"content":" task \u003d new Event(description, eventStartTime, eventEndTime);","lastModifiedDate":"2023-08-29"},{"lineNumber":96,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":97,"author":{"gitId":"Zjinnnn"},"content":" taskList.add(task);","lastModifiedDate":"2023-08-29"},{"lineNumber":98,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":99,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":100,"author":{"gitId":"Zjinnnn"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":101,"author":{"gitId":"Zjinnnn"},"content":" * Deletes a task from the task list at the specified index.","lastModifiedDate":"2023-08-29"},{"lineNumber":102,"author":{"gitId":"Zjinnnn"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":103,"author":{"gitId":"Zjinnnn"},"content":" * @param taskList The task list from which the task will be deleted.","lastModifiedDate":"2023-08-29"},{"lineNumber":104,"author":{"gitId":"Zjinnnn"},"content":" * @param index The index of the task to delete.","lastModifiedDate":"2023-08-29"},{"lineNumber":105,"author":{"gitId":"Zjinnnn"},"content":" * @throws InvalidTaskException If the index is out of bounds.","lastModifiedDate":"2023-08-29"},{"lineNumber":106,"author":{"gitId":"Zjinnnn"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":107,"author":{"gitId":"Zjinnnn"},"content":" public static void deleteTask(TaskList taskList, int index) throws InvalidTaskException {","lastModifiedDate":"2023-08-29"},{"lineNumber":108,"author":{"gitId":"Zjinnnn"},"content":" Task task \u003d taskList.getTask(index);","lastModifiedDate":"2023-08-29"},{"lineNumber":109,"author":{"gitId":"Zjinnnn"},"content":" taskList.remove(index);","lastModifiedDate":"2023-08-29"},{"lineNumber":110,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":111,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":112,"author":{"gitId":"Zjinnnn"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":113,"author":{"gitId":"Zjinnnn"},"content":" * Filters tasks in the list based on a keyword.","lastModifiedDate":"2023-08-29"},{"lineNumber":114,"author":{"gitId":"Zjinnnn"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":115,"author":{"gitId":"Zjinnnn"},"content":" * @param keyword The keyword to search for in the task descriptions.","lastModifiedDate":"2023-08-29"},{"lineNumber":116,"author":{"gitId":"Zjinnnn"},"content":" * @return A new TaskList containing tasks whose descriptions contain the keyword.","lastModifiedDate":"2023-08-29"},{"lineNumber":117,"author":{"gitId":"Zjinnnn"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":118,"author":{"gitId":"Zjinnnn"},"content":" public TaskList getTasksWithKeyword(String keyword) {","lastModifiedDate":"2023-08-29"},{"lineNumber":119,"author":{"gitId":"Zjinnnn"},"content":" List\u003cTask\u003e keywordTasks \u003d new ArrayList\u003cTask\u003e();","lastModifiedDate":"2023-08-29"},{"lineNumber":120,"author":{"gitId":"Zjinnnn"},"content":" for (Task task : taskList) {","lastModifiedDate":"2023-08-29"},{"lineNumber":121,"author":{"gitId":"Zjinnnn"},"content":" if (task.ifDescriptionContains(keyword)) {","lastModifiedDate":"2023-08-29"},{"lineNumber":122,"author":{"gitId":"Zjinnnn"},"content":" keywordTasks.add(task);","lastModifiedDate":"2023-08-29"},{"lineNumber":123,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":124,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":125,"author":{"gitId":"Zjinnnn"},"content":" return new TaskList(keywordTasks);","lastModifiedDate":"2023-08-29"},{"lineNumber":126,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":127,"author":{"gitId":"Zjinnnn"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"Zjinnnn":127}},{"path":"src/main/java/pooh/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Zjinnnn"},"content":"package pooh;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Zjinnnn"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Zjinnnn"},"content":" * Represents a Todo task.","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"Zjinnnn"},"content":" * \u003cp\u003e","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"Zjinnnn"},"content":" * This class is a subclass of the Task class and represents","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"Zjinnnn"},"content":" * a todo task, which has a description but no specific timing details.","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"Zjinnnn"},"content":" * \u003c/p\u003e","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Zjinnnn"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Zjinnnn"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":11,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"Zjinnnn"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"Zjinnnn"},"content":" * Constructs a new Todo task with the given description.","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"Zjinnnn"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"Zjinnnn"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"Zjinnnn"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"Zjinnnn"},"content":" public Todo(String description) {","lastModifiedDate":"2023-08-22"},{"lineNumber":18,"author":{"gitId":"Zjinnnn"},"content":" super(description);","lastModifiedDate":"2023-08-22"},{"lineNumber":19,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":20,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":21,"author":{"gitId":"Zjinnnn"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"Zjinnnn"},"content":" * Writes the task details to a string in a format suitable for saving to a file.","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"Zjinnnn"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"Zjinnnn"},"content":" * @return A string representing the task\u0027s details in a save-file-friendly format.","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"Zjinnnn"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"Zjinnnn"},"content":" public String writeTaskToFile() {","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"Zjinnnn"},"content":" return String.format(\"%s | %s | %s\", \"T\",","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"Zjinnnn"},"content":" this.getIsDone() ? 1 : 0,","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"Zjinnnn"},"content":" this.getDescription());","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"Zjinnnn"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"Zjinnnn"},"content":" * Reads a todo task from a string array and returns a Todo object.","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"Zjinnnn"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"Zjinnnn"},"content":" * @param args A string array containing the task details.","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"Zjinnnn"},"content":" * @return A new Todo object constructed from the provided string array.","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"Zjinnnn"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"Zjinnnn"},"content":" public static Todo readTaskFromFile(String[] args) {","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"Zjinnnn"},"content":" Todo newTodoTask \u003d new Todo(args[2]);","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"Zjinnnn"},"content":" if (args[1].equals(\"1\")) {","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"Zjinnnn"},"content":" newTodoTask.markAsDone();","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"Zjinnnn"},"content":" return newTodoTask;","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"Zjinnnn"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"Zjinnnn"},"content":" * Returns a string representation of the task, suitable for user output.","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"Zjinnnn"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"Zjinnnn"},"content":" * @return A string containing the type, status, and description of the task.","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"Zjinnnn"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"Zjinnnn"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":52,"author":{"gitId":"Zjinnnn"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":53,"author":{"gitId":"Zjinnnn"},"content":" return String.format(\"[T]%s\", super.toString());","lastModifiedDate":"2023-08-22"},{"lineNumber":54,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":55,"author":{"gitId":"Zjinnnn"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"Zjinnnn":55}},{"path":"src/main/java/pooh/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Zjinnnn"},"content":"package pooh;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Zjinnnn"},"content":"public class Ui {","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"Zjinnnn"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"Zjinnnn"},"content":" * Returns the exit message when the user terminates the chatbot.","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"Zjinnnn"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"Zjinnnn"},"content":" * @return The exit message.","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"Zjinnnn"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Zjinnnn"},"content":" public String getExitMsg() {","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"Zjinnnn"},"content":" return \"How lucky I am to have something that makes saying goodbye so hard. Bye!\";","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"Zjinnnn"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"Zjinnnn"},"content":" * Returns the input message as a response.","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"Zjinnnn"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"Zjinnnn"},"content":" * @param message The message to be displayed.","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"Zjinnnn"},"content":" * @return The input message as a response.","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"Zjinnnn"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"Zjinnnn"},"content":" public String respond(String message) {","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"Zjinnnn"},"content":" return message;","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"Zjinnnn"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"Zjinnnn"},"content":" * Formats and returns a string representation of the tasks in the provided TaskList.","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"Zjinnnn"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"Zjinnnn"},"content":" * @param taskList The list of tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"Zjinnnn"},"content":" * @return A formatted string representation of tasks.","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"Zjinnnn"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"Zjinnnn"},"content":" public String getTasksMsg(TaskList taskList) {","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"Zjinnnn"},"content":" StringBuilder todoListString \u003d new StringBuilder();","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"Zjinnnn"},"content":" for (int i \u003d 0; i \u003c taskList.getSize(); i++) {","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"Zjinnnn"},"content":" String task;","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"Zjinnnn"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"Zjinnnn"},"content":" task \u003d String.format(\" %d. \", i + 1) + taskList.getTask(i) + \"\\n\";","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"Zjinnnn"},"content":" } catch (InvalidTaskException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"Zjinnnn"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"Zjinnnn"},"content":" todoListString.append(task);","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"Zjinnnn"},"content":" return \"Here are the tasks in your list:\\n\" + todoListString.toString().stripTrailing();","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"Zjinnnn"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"Zjinnnn"},"content":" * Formats and returns a string of tasks from a given TaskList that match a specific keyword.","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"Zjinnnn"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"Zjinnnn"},"content":" * @param taskList The TaskList containing tasks that match the keyword.","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"Zjinnnn"},"content":" * @return A formatted string representation of matching tasks.","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"Zjinnnn"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"Zjinnnn"},"content":" public String getKeywordTasksMsg(TaskList taskList) {","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"Zjinnnn"},"content":" StringBuilder todoListString \u003d new StringBuilder();","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"Zjinnnn"},"content":" for (int i \u003d 0; i \u003c taskList.getSize(); i++) {","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"Zjinnnn"},"content":" String task;","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"Zjinnnn"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"Zjinnnn"},"content":" task \u003d String.format(\" %d. \", i + 1) + taskList.getTask(i) + \"\\n\";","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"Zjinnnn"},"content":" } catch (InvalidTaskException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"Zjinnnn"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"Zjinnnn"},"content":" todoListString.append(task);","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"Zjinnnn"},"content":" return \"Here are the matching tasks in your list:\" + todoListString.toString().stripTrailing();","lastModifiedDate":"2023-09-05"},{"lineNumber":62,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"Zjinnnn"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"Zjinnnn"},"content":" * Returns a message indicating no tasks matched the specified keyword.","lastModifiedDate":"2023-09-05"},{"lineNumber":66,"author":{"gitId":"Zjinnnn"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":67,"author":{"gitId":"Zjinnnn"},"content":" * @return Message indicating no matching tasks found.","lastModifiedDate":"2023-09-05"},{"lineNumber":68,"author":{"gitId":"Zjinnnn"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"Zjinnnn"},"content":" public String getNoKeywordTasksFoundMsg() {","lastModifiedDate":"2023-09-05"},{"lineNumber":70,"author":{"gitId":"Zjinnnn"},"content":" return \"No matching tasks found.\";","lastModifiedDate":"2023-09-05"},{"lineNumber":71,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"Zjinnnn"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"Zjinnnn"},"content":" * Returns a message indicating a task has been marked as done.","lastModifiedDate":"2023-09-05"},{"lineNumber":75,"author":{"gitId":"Zjinnnn"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"Zjinnnn"},"content":" * @param task The task that has been marked as done.","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"Zjinnnn"},"content":" * @return Message indicating task marked as done.","lastModifiedDate":"2023-09-05"},{"lineNumber":78,"author":{"gitId":"Zjinnnn"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":79,"author":{"gitId":"Zjinnnn"},"content":" public String getTaskDoneMsg(Task task) {","lastModifiedDate":"2023-09-05"},{"lineNumber":80,"author":{"gitId":"Zjinnnn"},"content":" return \"Nice! I\u0027ve marked this task as done:\\n \" + task;","lastModifiedDate":"2023-09-05"},{"lineNumber":81,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":82,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":83,"author":{"gitId":"Zjinnnn"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":84,"author":{"gitId":"Zjinnnn"},"content":" * Returns a message indicating a task has been marked as not done.","lastModifiedDate":"2023-09-05"},{"lineNumber":85,"author":{"gitId":"Zjinnnn"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":86,"author":{"gitId":"Zjinnnn"},"content":" * @param task The task that has been marked as not done.","lastModifiedDate":"2023-08-29"},{"lineNumber":87,"author":{"gitId":"Zjinnnn"},"content":" * @return Message indicating task marked as not done.","lastModifiedDate":"2023-09-05"},{"lineNumber":88,"author":{"gitId":"Zjinnnn"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":89,"author":{"gitId":"Zjinnnn"},"content":" public String getTaskUndoneMsg(Task task) {","lastModifiedDate":"2023-09-05"},{"lineNumber":90,"author":{"gitId":"Zjinnnn"},"content":" return \"OK, I\u0027ve marked this task as not done yet:\\n \" + task;","lastModifiedDate":"2023-09-05"},{"lineNumber":91,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":92,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":93,"author":{"gitId":"Zjinnnn"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":94,"author":{"gitId":"Zjinnnn"},"content":" * Returns a message indicating a task has been added to the TaskList.","lastModifiedDate":"2023-09-05"},{"lineNumber":95,"author":{"gitId":"Zjinnnn"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":96,"author":{"gitId":"Zjinnnn"},"content":" * @param taskList The updated TaskList.","lastModifiedDate":"2023-09-05"},{"lineNumber":97,"author":{"gitId":"Zjinnnn"},"content":" * @param task The task that has been added.","lastModifiedDate":"2023-09-05"},{"lineNumber":98,"author":{"gitId":"Zjinnnn"},"content":" * @return Message indicating task added.","lastModifiedDate":"2023-09-05"},{"lineNumber":99,"author":{"gitId":"Zjinnnn"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":100,"author":{"gitId":"Zjinnnn"},"content":" public String getAddTaskMsg(TaskList taskList, Task task) {","lastModifiedDate":"2023-09-05"},{"lineNumber":101,"author":{"gitId":"Zjinnnn"},"content":" return String.format(\" Got it. I\u0027ve added this task:\\n %s\\n Now you have \" +","lastModifiedDate":"2023-09-05"},{"lineNumber":102,"author":{"gitId":"Zjinnnn"},"content":" \"%d tasks in the list\", task, taskList.getSize());","lastModifiedDate":"2023-09-05"},{"lineNumber":103,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":104,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":105,"author":{"gitId":"Zjinnnn"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":106,"author":{"gitId":"Zjinnnn"},"content":" * Returns a message indicating a task has been removed from the TaskList.","lastModifiedDate":"2023-09-05"},{"lineNumber":107,"author":{"gitId":"Zjinnnn"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":108,"author":{"gitId":"Zjinnnn"},"content":" * @param taskList The updated TaskList.","lastModifiedDate":"2023-09-05"},{"lineNumber":109,"author":{"gitId":"Zjinnnn"},"content":" * @param task The task that has been removed.","lastModifiedDate":"2023-09-05"},{"lineNumber":110,"author":{"gitId":"Zjinnnn"},"content":" * @return Message indicating task removed.","lastModifiedDate":"2023-09-05"},{"lineNumber":111,"author":{"gitId":"Zjinnnn"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":112,"author":{"gitId":"Zjinnnn"},"content":" public String getDeleteTaskMsg(TaskList taskList, Task task) {","lastModifiedDate":"2023-09-05"},{"lineNumber":113,"author":{"gitId":"Zjinnnn"},"content":" return String.format(\"Noted. I\u0027ve removed this task:\\n %s\\n Now you have\" +","lastModifiedDate":"2023-09-05"},{"lineNumber":114,"author":{"gitId":"Zjinnnn"},"content":" \" %d tasks in the list\", task, taskList.getSize());","lastModifiedDate":"2023-09-05"},{"lineNumber":115,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":116,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":117,"author":{"gitId":"Zjinnnn"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"Zjinnnn":117}},{"path":"src/main/java/pooh/UnrecognizedCommandException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Zjinnnn"},"content":"package pooh;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Zjinnnn"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Zjinnnn"},"content":" * Exception thrown when an unrecognized command is entered by the user.","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"Zjinnnn"},"content":" * \u003cp\u003e","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"Zjinnnn"},"content":" * This exception is meant to be caught and handled by displaying an appropriate","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"Zjinnnn"},"content":" * error message to guide the user.","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"Zjinnnn"},"content":" * \u003c/p\u003e","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Zjinnnn"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Zjinnnn"},"content":"public class UnrecognizedCommandException extends PoohException {","lastModifiedDate":"2023-08-22"},{"lineNumber":11,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"Zjinnnn"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"Zjinnnn"},"content":" * Returns a string representation of the exception, which can be used","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"Zjinnnn"},"content":" * to display an error message to the user.","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"Zjinnnn"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"Zjinnnn"},"content":" * @return A string explaining that the command was not recognized.","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"Zjinnnn"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"Zjinnnn"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":19,"author":{"gitId":"Zjinnnn"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":20,"author":{"gitId":"Zjinnnn"},"content":" return \" ☹ OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\";","lastModifiedDate":"2023-08-22"},{"lineNumber":21,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":22,"author":{"gitId":"Zjinnnn"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"Zjinnnn":22}},{"path":"src/main/java/pooh/WriteTasksException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Zjinnnn"},"content":"package pooh;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Zjinnnn"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Zjinnnn"},"content":" * Exception thrown when an error occurs during the writing of tasks to a file.","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"Zjinnnn"},"content":" * \u003cp\u003e","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"Zjinnnn"},"content":" * This exception should be caught and handled by displaying an appropriate","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"Zjinnnn"},"content":" * error message to inform the user of the failure.","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"Zjinnnn"},"content":" * \u003c/p\u003e","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Zjinnnn"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Zjinnnn"},"content":"public class WriteTasksException extends PoohException {","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"Zjinnnn"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"Zjinnnn"},"content":" * Returns a string representation of the exception, which can be used","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"Zjinnnn"},"content":" * to display an error message to the user.","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"Zjinnnn"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"Zjinnnn"},"content":" * @return A string describing the issue encountered during file writing.","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"Zjinnnn"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"Zjinnnn"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"Zjinnnn"},"content":" public String toString() {","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"Zjinnnn"},"content":" return \" An error has occurred whilst writing to file. :-(\";","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"Zjinnnn"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"Zjinnnn":22}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"Zjinnnn"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"Zjinnnn"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"Zjinnnn"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"Zjinnnn"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"Zjinnnn"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"Zjinnnn"},"content":"\u003cfx:root alignment\u003d\"TOP_RIGHT\" maxHeight\u003d\"1.7976931348623157E308\" maxWidth\u003d\"1.7976931348623157E308\" prefWidth\u003d\"400.0\"","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"Zjinnnn"},"content":" 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-05"},{"lineNumber":10,"author":{"gitId":"Zjinnnn"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"Zjinnnn"},"content":" \u003cLabel fx:id\u003d\"dialog\" text\u003d\"Label\" wrapText\u003d\"true\"/\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"Zjinnnn"},"content":" \u003cImageView fx:id\u003d\"displayPicture\" fitHeight\u003d\"99.0\" fitWidth\u003d\"99.0\" pickOnBounds\u003d\"true\" preserveRatio\u003d\"true\"/\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"Zjinnnn"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"Zjinnnn"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"Zjinnnn"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\"/\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"Zjinnnn"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"Zjinnnn"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"Zjinnnn":17}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"Zjinnnn"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"Zjinnnn"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"Zjinnnn"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"Zjinnnn"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"Zjinnnn"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"Zjinnnn"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"Zjinnnn"},"content":"\u003cAnchorPane maxHeight\u003d\"-Infinity\" maxWidth\u003d\"-Infinity\" minHeight\u003d\"-Infinity\" minWidth\u003d\"-Infinity\" prefHeight\u003d\"600.0\"","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"Zjinnnn"},"content":" prefWidth\u003d\"400.0\" xmlns\u003d\"http://javafx.com/javafx/17\" xmlns:fx\u003d\"http://javafx.com/fxml/1\"","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"Zjinnnn"},"content":" fx:controller\u003d\"MainWindow\"\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"Zjinnnn"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"Zjinnnn"},"content":" \u003cTextField fx:id\u003d\"userInput\" layoutY\u003d\"558.0\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"41.0\" prefWidth\u003d\"324.0\"","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"Zjinnnn"},"content":" AnchorPane.bottomAnchor\u003d\"1.0\"/\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"Zjinnnn"},"content":" \u003cButton fx:id\u003d\"sendButton\" layoutX\u003d\"324.0\" layoutY\u003d\"558.0\" mnemonicParsing\u003d\"false\" onAction\u003d\"#handleUserInput\"","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"Zjinnnn"},"content":" prefHeight\u003d\"41.0\" prefWidth\u003d\"76.0\" text\u003d\"Send\"/\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"Zjinnnn"},"content":" \u003cScrollPane fx:id\u003d\"scrollPane\" hbarPolicy\u003d\"NEVER\" hvalue\u003d\"1.0\" prefHeight\u003d\"557.0\" prefWidth\u003d\"400.0\"","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"Zjinnnn"},"content":" vvalue\u003d\"1.0\"\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"Zjinnnn"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"Zjinnnn"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"552.0\" prefWidth\u003d\"388.0\"/\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"Zjinnnn"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"Zjinnnn"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"Zjinnnn"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"Zjinnnn"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"Zjinnnn":24}},{"path":"src/test/java/pooh/TaskListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Zjinnnn"},"content":"package pooh;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Zjinnnn"},"content":"import java.util.List;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Zjinnnn"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"Zjinnnn"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"Zjinnnn"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Zjinnnn"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Zjinnnn"},"content":"public class TaskListTest {","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"Zjinnnn"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"Zjinnnn"},"content":" public void addTask_emptyDescription_exceptionThrown() {","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"Zjinnnn"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"Zjinnnn"},"content":" List\u003cTask\u003e taskList \u003d new ArrayList\u003cTask\u003e();","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"Zjinnnn"},"content":" TaskList taskListTester \u003d new TaskList(taskList);","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"Zjinnnn"},"content":" TaskList.addTask(taskListTester, \"deadline\", \"\");","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"Zjinnnn"},"content":" fail(\"Expected exception was not thrown.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"Zjinnnn"},"content":" } catch (EmptyTaskDescriptorsException ex) {","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"Zjinnnn"},"content":" assertEquals(\" ☹ OOPS!!! The description of a todo cannot be empty.\", ex.toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"Zjinnnn"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"Zjinnnn":23}},{"path":"src/test/java/pooh/TodoTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Zjinnnn"},"content":"package pooh;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Zjinnnn"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"Zjinnnn"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"Zjinnnn"},"content":"public class TodoTest {","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"Zjinnnn"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Zjinnnn"},"content":" public void todo_correctInitialisation_toStringCorrect() {","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Zjinnnn"},"content":" Todo todo \u003d new Todo(\"buy more honey\");","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Zjinnnn"},"content":" assertEquals(\"[T][ ] buy more honey\", todo.toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"Zjinnnn"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"Zjinnnn":13}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"Zjinnnn"},"content":"todo borrow book","lastModifiedDate":"2023-08-22"},{"lineNumber":2,"author":{"gitId":"Zjinnnn"},"content":"list","lastModifiedDate":"2023-08-22"},{"lineNumber":3,"author":{"gitId":"Zjinnnn"},"content":"deadline return book /by Sunday","lastModifiedDate":"2023-08-22"},{"lineNumber":4,"author":{"gitId":"Zjinnnn"},"content":"event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2023-08-22"},{"lineNumber":5,"author":{"gitId":"Zjinnnn"},"content":"list","lastModifiedDate":"2023-08-22"},{"lineNumber":6,"author":{"gitId":"Zjinnnn"},"content":"mark 1","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"Zjinnnn"},"content":"mark 2","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"Zjinnnn"},"content":"unmark 1","lastModifiedDate":"2023-08-22"},{"lineNumber":9,"author":{"gitId":"Zjinnnn"},"content":"unmark 2","lastModifiedDate":"2023-08-22"},{"lineNumber":10,"author":{"gitId":"Zjinnnn"},"content":"mark 3","lastModifiedDate":"2023-08-22"},{"lineNumber":11,"author":{"gitId":"Zjinnnn"},"content":"mark3","lastModifiedDate":"2023-08-22"},{"lineNumber":12,"author":{"gitId":"Zjinnnn"},"content":"list","lastModifiedDate":"2023-08-22"},{"lineNumber":13,"author":{"gitId":"Zjinnnn"},"content":"bye","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"Zjinnnn":13}},{"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":"Zjinnnn"},"content":"java -classpath ../bin Pooh \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-08-22"},{"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":{"Zjinnnn":1,"-":37}}] +[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"Zjinnnn"},"content":"# Pooh project template","lastModifiedDate":"2023-08-22"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"Zjinnnn"},"content":"This is a project template for a greenfield Java project. It\u0027s named after the bear _Pooh_. Given below are instructions on how to use it.","lastModifiedDate":"2023-08-22"},{"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":"Zjinnnn"},"content":"3. After that, locate the `src/main/java/Duke.java` file, right-click it, and choose `Run Pooh.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-08-22"},{"lineNumber":17,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"Zjinnnn"},"content":" .----------------. .----------------. .----------------. .----------------. ","lastModifiedDate":"2023-08-22"},{"lineNumber":19,"author":{"gitId":"Zjinnnn"},"content":" | .--------------. || .--------------. || .--------------. || .--------------. |","lastModifiedDate":"2023-08-22"},{"lineNumber":20,"author":{"gitId":"Zjinnnn"},"content":" | | ______ | || | ____ | || | ____ | || | ____ ____ | |","lastModifiedDate":"2023-08-22"},{"lineNumber":21,"author":{"gitId":"Zjinnnn"},"content":" | | |_ __ \\ | || | .\u0027 `. | || | .\u0027 `. | || | |_ || _| | |","lastModifiedDate":"2023-08-22"},{"lineNumber":22,"author":{"gitId":"Zjinnnn"},"content":" | | | |__) | | || | / .--. \\ | || | / .--. \\ | || | | |__| | | |","lastModifiedDate":"2023-08-22"},{"lineNumber":23,"author":{"gitId":"Zjinnnn"},"content":" | | | ___/ | || | | | | | | || | | | | | | || | | __ | | |","lastModifiedDate":"2023-08-22"},{"lineNumber":24,"author":{"gitId":"Zjinnnn"},"content":" | | _| |_ | || | \\ `--\u0027 / | || | \\ `--\u0027 / | || | _| | | |_ | |","lastModifiedDate":"2023-08-22"},{"lineNumber":25,"author":{"gitId":"Zjinnnn"},"content":" | | |_____| | || | `.____.\u0027 | || | `.____.\u0027 | || | |____||____| | |","lastModifiedDate":"2023-08-22"},{"lineNumber":26,"author":{"gitId":"Zjinnnn"},"content":" | | | || | | || | | || | | |","lastModifiedDate":"2023-08-22"},{"lineNumber":27,"author":{"gitId":"Zjinnnn"},"content":" | \u0027--------------\u0027 || \u0027--------------\u0027 || \u0027--------------\u0027 || \u0027--------------\u0027 |","lastModifiedDate":"2023-08-22"},{"lineNumber":28,"author":{"gitId":"Zjinnnn"},"content":" \u0027----------------\u0027 \u0027----------------\u0027 \u0027----------------\u0027 \u0027----------------\u0027","lastModifiedDate":"2023-08-22"},{"lineNumber":29,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"Zjinnnn":14,"-":15}},{"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":"Zjinnnn"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"Zjinnnn"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"Zjinnnn"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"Zjinnnn"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"Zjinnnn"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"Zjinnnn"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"Zjinnnn"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"Zjinnnn"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"Zjinnnn"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"Zjinnnn"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"Zjinnnn"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"Zjinnnn"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"Zjinnnn"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":28,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"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":"Zjinnnn"},"content":" mainClass.set(\"pooh.Pooh\")","lastModifiedDate":"2023-09-05"},{"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":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":51,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":52,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":53,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":54,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":55,"author":{"gitId":"-"},"content":"run {","lastModifiedDate":"2020-05-25"},{"lineNumber":56,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":57,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"Zjinnnn":16,"-":41}},{"path":"src/main/java/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Zjinnnn"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"Zjinnnn"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"Zjinnnn"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"Zjinnnn"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"Zjinnnn"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"Zjinnnn"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"Zjinnnn"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"Zjinnnn"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"Zjinnnn"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"Zjinnnn"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"Zjinnnn"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"Zjinnnn"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"Zjinnnn"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"Zjinnnn"},"content":" * An example of a custom control using FXML.","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"Zjinnnn"},"content":" * This control represents a dialog box consisting of an ImageView to represent the speaker\u0027s face and a label","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"Zjinnnn"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"Zjinnnn"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"Zjinnnn"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"Zjinnnn"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"Zjinnnn"},"content":" private Label dialog;","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"Zjinnnn"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"Zjinnnn"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"Zjinnnn"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"Zjinnnn"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"Zjinnnn"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"Zjinnnn"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"Zjinnnn"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"Zjinnnn"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"Zjinnnn"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"Zjinnnn"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"Zjinnnn"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"Zjinnnn"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"Zjinnnn"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"Zjinnnn"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"Zjinnnn"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"Zjinnnn"},"content":" private void flip() {","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"Zjinnnn"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"Zjinnnn"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"Zjinnnn"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"Zjinnnn"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"Zjinnnn"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"Zjinnnn"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"Zjinnnn"},"content":" public static DialogBox getDukeDialog(String text, Image img) {","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"Zjinnnn"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"Zjinnnn"},"content":" db.flip();","lastModifiedDate":"2023-09-05"},{"lineNumber":57,"author":{"gitId":"Zjinnnn"},"content":" return db;","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"Zjinnnn"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"Zjinnnn":59}},{"path":"src/main/java/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Zjinnnn"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"Zjinnnn"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"Zjinnnn"},"content":" * A launcher class to workaround classpath issues.","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"Zjinnnn"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"Zjinnnn"},"content":"public class Launcher {","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"Zjinnnn"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"Zjinnnn"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"Zjinnnn"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"Zjinnnn":10}},{"path":"src/main/java/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Zjinnnn"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"Zjinnnn"},"content":"import pooh.Pooh;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"Zjinnnn"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"Zjinnnn"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"Zjinnnn"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"Zjinnnn"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"Zjinnnn"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"Zjinnnn"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"Zjinnnn"},"content":" * A GUI for Duke using FXML.","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"Zjinnnn"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"Zjinnnn"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"Zjinnnn"},"content":" private Pooh pooh \u003d new Pooh(\"pooh.txt\");","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"Zjinnnn"},"content":" @Override","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"Zjinnnn"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"Zjinnnn"},"content":" try {","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"Zjinnnn"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"Zjinnnn"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"Zjinnnn"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"Zjinnnn"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"Zjinnnn"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setPooh(pooh);","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"Zjinnnn"},"content":" stage.show();","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"Zjinnnn"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"Zjinnnn"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"Zjinnnn"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"Zjinnnn":30}},{"path":"src/main/java/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Zjinnnn"},"content":"import pooh.Pooh;","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"Zjinnnn"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"Zjinnnn"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"Zjinnnn"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"Zjinnnn"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"Zjinnnn"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"Zjinnnn"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"Zjinnnn"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"Zjinnnn"},"content":"/**","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"Zjinnnn"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"Zjinnnn"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"Zjinnnn"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"Zjinnnn"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"Zjinnnn"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"Zjinnnn"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"Zjinnnn"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"Zjinnnn"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"Zjinnnn"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"Zjinnnn"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"Zjinnnn"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"Zjinnnn"},"content":" private Pooh pooh;","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":25,"author":{"gitId":"Zjinnnn"},"content":" private Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/piglet.jpeg\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"Zjinnnn"},"content":" private Image poohImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/pooh.png\"));","lastModifiedDate":"2023-09-05"},{"lineNumber":27,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":28,"author":{"gitId":"Zjinnnn"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"Zjinnnn"},"content":" public void initialize() {","lastModifiedDate":"2023-09-05"},{"lineNumber":30,"author":{"gitId":"Zjinnnn"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-05"},{"lineNumber":31,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":33,"author":{"gitId":"Zjinnnn"},"content":" public void setPooh(Pooh p) {","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"Zjinnnn"},"content":" pooh \u003d p;","lastModifiedDate":"2023-09-05"},{"lineNumber":35,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":36,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":37,"author":{"gitId":"Zjinnnn"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"Zjinnnn"},"content":" * Creates two dialog boxes, one echoing user input and the other containing Duke\u0027s reply and then appends them to","lastModifiedDate":"2023-09-05"},{"lineNumber":39,"author":{"gitId":"Zjinnnn"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-05"},{"lineNumber":40,"author":{"gitId":"Zjinnnn"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":41,"author":{"gitId":"Zjinnnn"},"content":" @FXML","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"Zjinnnn"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-05"},{"lineNumber":43,"author":{"gitId":"Zjinnnn"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"Zjinnnn"},"content":" String response \u003d pooh.getResponse(input);","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"Zjinnnn"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"Zjinnnn"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"Zjinnnn"},"content":" DialogBox.getDukeDialog(response, poohImage)","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"Zjinnnn"},"content":" );","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"Zjinnnn"},"content":" userInput.clear();","lastModifiedDate":"2023-09-05"},{"lineNumber":50,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"Zjinnnn"},"content":"}","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"Zjinnnn":51}},{"path":"src/main/java/pooh/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Zjinnnn"},"content":"package pooh;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Zjinnnn"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Zjinnnn"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"Zjinnnn"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"Zjinnnn"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"Zjinnnn"},"content":" * Represents a deadline task that extends the Task class.","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Zjinnnn"},"content":" * \u003cp\u003e","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Zjinnnn"},"content":" * The Deadline class is a subclass of the Task class, and it adds two additional attributes:","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Zjinnnn"},"content":" * deadlineString and deadlineDateTime to represent the deadline of the task.","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"Zjinnnn"},"content":" * \u003c/p\u003e","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"Zjinnnn"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"Zjinnnn"},"content":"public class Deadline extends TimeSensitiveTask {","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"Zjinnnn"},"content":" private String deadlineString;","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"Zjinnnn"},"content":" private LocalDate deadlineDateTime;","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":18,"author":{"gitId":"Zjinnnn"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"Zjinnnn"},"content":" * Constructs a new Deadline object with a description and a deadline.","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"Zjinnnn"},"content":" * \u003cp\u003e","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"Zjinnnn"},"content":" * The constructor initializes a Deadline object with a description and a deadline,","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"Zjinnnn"},"content":" * and it also converts the deadline string into a LocalDate object using the parseDateTime method.","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"Zjinnnn"},"content":" * \u003c/p\u003e","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"Zjinnnn"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"Zjinnnn"},"content":" * @param description The description of the deadline task.","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"Zjinnnn"},"content":" * @param deadlineString The string representation of the deadline.","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"Zjinnnn"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"Zjinnnn"},"content":" public Deadline(String description, String deadlineString) {","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"Zjinnnn"},"content":" super(description);","lastModifiedDate":"2023-08-22"},{"lineNumber":30,"author":{"gitId":"Zjinnnn"},"content":" this.deadlineString \u003d deadlineString;","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"Zjinnnn"},"content":" this.deadlineDateTime \u003d parseDateTime(deadlineString);","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":33,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":34,"author":{"gitId":"Zjinnnn"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"Zjinnnn"},"content":" * Writes the task details into a string format suitable for file storage.","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"Zjinnnn"},"content":" * \u003cp\u003e","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"Zjinnnn"},"content":" * This function prepares a string that captures the essential attributes of the Deadline object,","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"Zjinnnn"},"content":" * such as its type (D for Deadline), its completion status, its description, and its deadline.","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"Zjinnnn"},"content":" * The attributes are separated by a pipe character (|), making it easier to read them back from the file later.","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"Zjinnnn"},"content":" * \u003c/p\u003e","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"Zjinnnn"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"Zjinnnn"},"content":" * @return A string containing the task\u0027s details in a format suitable for file storage.","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"Zjinnnn"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"Zjinnnn"},"content":" public String writeTaskToFile() {","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"Zjinnnn"},"content":" return String.format(\"%s | %s | %s | %s\", \"D\",","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"Zjinnnn"},"content":" this.getIsDone() ? 1 : 0,","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"Zjinnnn"},"content":" this.getDescription(),","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"Zjinnnn"},"content":" this.deadlineString);","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"Zjinnnn"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"Zjinnnn"},"content":" * Reads task details from a given file and creates a new Deadline object.","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"Zjinnnn"},"content":" * \u003cp\u003e","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"Zjinnnn"},"content":" * This function takes an array of strings as its argument, which should contain the task details,","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"Zjinnnn"},"content":" * and returns a Deadline object based on those details.","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"Zjinnnn"},"content":" * \u003c/p\u003e","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"Zjinnnn"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"Zjinnnn"},"content":" * @param args An array of strings containing the task details.","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"Zjinnnn"},"content":" * args[1] should be \"1\" if the task is marked as done, otherwise not.","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"Zjinnnn"},"content":" * args[2] should contain the description of the task.","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"Zjinnnn"},"content":" * args[3] should contain the deadline for the task.","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"Zjinnnn"},"content":" * @return A Deadline object initialized with the given task details.","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"Zjinnnn"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"Zjinnnn"},"content":" public static Deadline readTaskFromFile(String[] args) {","lastModifiedDate":"2023-08-28"},{"lineNumber":65,"author":{"gitId":"Zjinnnn"},"content":" Deadline newDeadlineTask \u003d new Deadline(args[2], args[3]);","lastModifiedDate":"2023-08-28"},{"lineNumber":66,"author":{"gitId":"Zjinnnn"},"content":" if (args[1].equals(\"1\")) {","lastModifiedDate":"2023-08-28"},{"lineNumber":67,"author":{"gitId":"Zjinnnn"},"content":" newDeadlineTask.markAsDone();","lastModifiedDate":"2023-08-28"},{"lineNumber":68,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":69,"author":{"gitId":"Zjinnnn"},"content":" return newDeadlineTask;","lastModifiedDate":"2023-08-28"},{"lineNumber":70,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":71,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":72,"author":{"gitId":"Zjinnnn"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"Zjinnnn"},"content":" * Parses a deadline string into a LocalDate object.","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"Zjinnnn"},"content":" * \u003cp\u003e","lastModifiedDate":"2023-08-29"},{"lineNumber":75,"author":{"gitId":"Zjinnnn"},"content":" * This function tries to parse a given string into a LocalDate object.","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"Zjinnnn"},"content":" * If the parsing fails, it returns null.","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"Zjinnnn"},"content":" * \u003c/p\u003e","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"Zjinnnn"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":79,"author":{"gitId":"Zjinnnn"},"content":" * @param deadlineString The string representing the deadline date.","lastModifiedDate":"2023-08-29"},{"lineNumber":80,"author":{"gitId":"Zjinnnn"},"content":" * @return A LocalDate object if parsing is successful, otherwise null.","lastModifiedDate":"2023-08-29"},{"lineNumber":81,"author":{"gitId":"Zjinnnn"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":82,"author":{"gitId":"Zjinnnn"},"content":" private LocalDate parseDateTime(String deadlineString) {","lastModifiedDate":"2023-08-29"},{"lineNumber":83,"author":{"gitId":"Zjinnnn"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":84,"author":{"gitId":"Zjinnnn"},"content":" return LocalDate.parse(deadlineString);","lastModifiedDate":"2023-08-29"},{"lineNumber":85,"author":{"gitId":"Zjinnnn"},"content":" } catch (DateTimeParseException ex) {","lastModifiedDate":"2023-08-29"},{"lineNumber":86,"author":{"gitId":"Zjinnnn"},"content":" return null;","lastModifiedDate":"2023-08-29"},{"lineNumber":87,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":88,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":89,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":90,"author":{"gitId":"Zjinnnn"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":91,"author":{"gitId":"Zjinnnn"},"content":" * Update the deadline of a task.","lastModifiedDate":"2023-09-10"},{"lineNumber":92,"author":{"gitId":"Zjinnnn"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":93,"author":{"gitId":"Zjinnnn"},"content":" * @param deadlineString The new deadline in string format.","lastModifiedDate":"2023-09-10"},{"lineNumber":94,"author":{"gitId":"Zjinnnn"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":95,"author":{"gitId":"Zjinnnn"},"content":" @Override","lastModifiedDate":"2023-09-10"},{"lineNumber":96,"author":{"gitId":"Zjinnnn"},"content":" public void postpone(String deadlineString) {","lastModifiedDate":"2023-09-10"},{"lineNumber":97,"author":{"gitId":"Zjinnnn"},"content":" this.deadlineString \u003d deadlineString;","lastModifiedDate":"2023-09-10"},{"lineNumber":98,"author":{"gitId":"Zjinnnn"},"content":" this.deadlineDateTime \u003d parseDateTime(deadlineString);","lastModifiedDate":"2023-09-10"},{"lineNumber":99,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":100,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":101,"author":{"gitId":"Zjinnnn"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":102,"author":{"gitId":"Zjinnnn"},"content":" * Converts the Deadline object to a string representation.","lastModifiedDate":"2023-08-29"},{"lineNumber":103,"author":{"gitId":"Zjinnnn"},"content":" * \u003cp\u003e","lastModifiedDate":"2023-08-29"},{"lineNumber":104,"author":{"gitId":"Zjinnnn"},"content":" * This function overrides the toString method to provide a string representation of the Deadline object,","lastModifiedDate":"2023-08-29"},{"lineNumber":105,"author":{"gitId":"Zjinnnn"},"content":" * which includes its status (done or not), description, and deadline date.","lastModifiedDate":"2023-08-29"},{"lineNumber":106,"author":{"gitId":"Zjinnnn"},"content":" * \u003c/p\u003e","lastModifiedDate":"2023-08-29"},{"lineNumber":107,"author":{"gitId":"Zjinnnn"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":108,"author":{"gitId":"Zjinnnn"},"content":" * @return A string representation of the Deadline object.","lastModifiedDate":"2023-08-29"},{"lineNumber":109,"author":{"gitId":"Zjinnnn"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":110,"author":{"gitId":"Zjinnnn"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":111,"author":{"gitId":"Zjinnnn"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":112,"author":{"gitId":"Zjinnnn"},"content":" String deadline;","lastModifiedDate":"2023-08-29"},{"lineNumber":113,"author":{"gitId":"Zjinnnn"},"content":" if (deadlineDateTime !\u003d null) {","lastModifiedDate":"2023-08-29"},{"lineNumber":114,"author":{"gitId":"Zjinnnn"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"MMM dd yyyy\");","lastModifiedDate":"2023-08-29"},{"lineNumber":115,"author":{"gitId":"Zjinnnn"},"content":" deadline \u003d deadlineDateTime.format(formatter);","lastModifiedDate":"2023-08-29"},{"lineNumber":116,"author":{"gitId":"Zjinnnn"},"content":" assert !deadline.isEmpty() : \"Error occurred whilst formatting deadlineDateTime\";","lastModifiedDate":"2023-09-09"},{"lineNumber":117,"author":{"gitId":"Zjinnnn"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":118,"author":{"gitId":"Zjinnnn"},"content":" deadline \u003d deadlineString;","lastModifiedDate":"2023-08-29"},{"lineNumber":119,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":120,"author":{"gitId":"Zjinnnn"},"content":" return String.format(\"[D]%s (by: %s)\", super.toString(), deadline);","lastModifiedDate":"2023-08-29"},{"lineNumber":121,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":122,"author":{"gitId":"Zjinnnn"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"Zjinnnn":122}},{"path":"src/main/java/pooh/EmptyTaskDescriptorsException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Zjinnnn"},"content":"package pooh;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Zjinnnn"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Zjinnnn"},"content":" * Exception thrown when an attempt is made to create a todo task with an empty description.","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"Zjinnnn"},"content":" * \u003cp\u003e","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"Zjinnnn"},"content":" * This exception extends from PoohException, and it overrides the toString method to provide","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"Zjinnnn"},"content":" * a custom error message indicating that the description of a todo cannot be empty.","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"Zjinnnn"},"content":" * \u003c/p\u003e","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Zjinnnn"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Zjinnnn"},"content":"public class EmptyTaskDescriptorsException extends PoohException {","lastModifiedDate":"2023-08-22"},{"lineNumber":11,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"Zjinnnn"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"Zjinnnn"},"content":" * Returns a string representation of the exception, containing a custom error message.","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"Zjinnnn"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"Zjinnnn"},"content":" * @return Custom error message indicating that the description of a todo cannot be empty.","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"Zjinnnn"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"Zjinnnn"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":18,"author":{"gitId":"Zjinnnn"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":19,"author":{"gitId":"Zjinnnn"},"content":" return \" ☹ OOPS!!! The description of a todo cannot be empty.\";","lastModifiedDate":"2023-08-22"},{"lineNumber":20,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":21,"author":{"gitId":"Zjinnnn"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"Zjinnnn":21}},{"path":"src/main/java/pooh/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Zjinnnn"},"content":"package pooh;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Zjinnnn"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Zjinnnn"},"content":" * Represents an event task with a start time and an end time.","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"Zjinnnn"},"content":" * \u003cp\u003e","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"Zjinnnn"},"content":" * The Event class is a subclass of the Task class and it adds two additional attributes,","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"Zjinnnn"},"content":" * namely eventStartTime and eventEndTime, to represent the duration of the event.","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"Zjinnnn"},"content":" * \u003c/p\u003e","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Zjinnnn"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Zjinnnn"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":11,"author":{"gitId":"Zjinnnn"},"content":" private final String eventStartTime;","lastModifiedDate":"2023-08-22"},{"lineNumber":12,"author":{"gitId":"Zjinnnn"},"content":" private final String eventEndTime;","lastModifiedDate":"2023-08-22"},{"lineNumber":13,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":14,"author":{"gitId":"Zjinnnn"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"Zjinnnn"},"content":" * Constructs a new Event object.","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"Zjinnnn"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"Zjinnnn"},"content":" * @param description The description of the event.","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"Zjinnnn"},"content":" * @param eventStartTime The start time of the event.","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"Zjinnnn"},"content":" * @param eventEndTime The end time of the event.","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"Zjinnnn"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"Zjinnnn"},"content":" public Event(String description, String eventStartTime, String eventEndTime) {","lastModifiedDate":"2023-08-22"},{"lineNumber":22,"author":{"gitId":"Zjinnnn"},"content":" super(description);","lastModifiedDate":"2023-08-22"},{"lineNumber":23,"author":{"gitId":"Zjinnnn"},"content":" this.eventStartTime \u003d eventStartTime;","lastModifiedDate":"2023-08-22"},{"lineNumber":24,"author":{"gitId":"Zjinnnn"},"content":" this.eventEndTime \u003d eventEndTime;","lastModifiedDate":"2023-08-22"},{"lineNumber":25,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":26,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":27,"author":{"gitId":"Zjinnnn"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"Zjinnnn"},"content":" * Serializes the Event object into a string format suitable for file storage.","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"Zjinnnn"},"content":" * \u003cp\u003e","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"Zjinnnn"},"content":" * This method prepares a string that captures the essential attributes of the Event object,","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"Zjinnnn"},"content":" * such as its type (E for Event), its completion status, its description, and its event times.","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"Zjinnnn"},"content":" * \u003c/p\u003e","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"Zjinnnn"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"Zjinnnn"},"content":" * @return A string containing the task\u0027s details in a format suitable for file storage.","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"Zjinnnn"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"Zjinnnn"},"content":" public String writeTaskToFile() {","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"Zjinnnn"},"content":" return String.format(\"%s | %s | %s | %s-%s\", \"E\",","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"Zjinnnn"},"content":" this.getIsDone() ? 1 : 0,","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"Zjinnnn"},"content":" this.getDescription(),","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"Zjinnnn"},"content":" this.eventStartTime,","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"Zjinnnn"},"content":" this.eventEndTime);","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"Zjinnnn"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"Zjinnnn"},"content":" * Reads task details from a given file and creates a new Event object.","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"Zjinnnn"},"content":" * \u003cp\u003e","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"Zjinnnn"},"content":" * This static method takes an array of strings as its argument, which should contain the task details,","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"Zjinnnn"},"content":" * and returns an Event object based on those details.","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"Zjinnnn"},"content":" * \u003c/p\u003e","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"Zjinnnn"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"Zjinnnn"},"content":" * @param args An array of strings containing the task details.","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"Zjinnnn"},"content":" * @return An Event object initialized with the given task details.","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"Zjinnnn"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"Zjinnnn"},"content":" public static Event readTaskFromFile(String[] args) {","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"Zjinnnn"},"content":" String[] eventTime \u003d args[3].split(\"-\");","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"Zjinnnn"},"content":" Event newEventTask \u003d new Event(args[2], eventTime[0], eventTime[1]);","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"Zjinnnn"},"content":" if (args[1].equals(\"1\")) {","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"Zjinnnn"},"content":" newEventTask.markAsDone();","lastModifiedDate":"2023-08-28"},{"lineNumber":59,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":60,"author":{"gitId":"Zjinnnn"},"content":" return newEventTask;","lastModifiedDate":"2023-08-28"},{"lineNumber":61,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":62,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":63,"author":{"gitId":"Zjinnnn"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"Zjinnnn"},"content":" * Converts the Event object to a string representation.","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"Zjinnnn"},"content":" * \u003cp\u003e","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"Zjinnnn"},"content":" * This method overrides the toString method to provide a string representation of the Event object,","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"Zjinnnn"},"content":" * which includes its status (done or not), description, and event times.","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"Zjinnnn"},"content":" * \u003c/p\u003e","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"Zjinnnn"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"Zjinnnn"},"content":" * @return A string representation of the Event object.","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"Zjinnnn"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"Zjinnnn"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":73,"author":{"gitId":"Zjinnnn"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":74,"author":{"gitId":"Zjinnnn"},"content":" return String.format(\"[E]%s (from: %s to: %s)\", super.toString(), this.eventStartTime, this.eventEndTime);","lastModifiedDate":"2023-08-22"},{"lineNumber":75,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":76,"author":{"gitId":"Zjinnnn"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"Zjinnnn":76}},{"path":"src/main/java/pooh/InvalidTaskException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Zjinnnn"},"content":"package pooh;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Zjinnnn"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Zjinnnn"},"content":" * Exception thrown when an invalid task is selected.","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"Zjinnnn"},"content":" * \u003cp\u003e","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"Zjinnnn"},"content":" * This exception extends from PoohException, and it overrides the toString method to provide","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"Zjinnnn"},"content":" * a custom error message indicating that the selected task is not valid.","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"Zjinnnn"},"content":" * \u003c/p\u003e","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Zjinnnn"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Zjinnnn"},"content":"public class InvalidTaskException extends PoohException {","lastModifiedDate":"2023-08-22"},{"lineNumber":11,"author":{"gitId":"Zjinnnn"},"content":" ","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"Zjinnnn"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"Zjinnnn"},"content":" * Returns a string representation of the exception, containing a custom error message.","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"Zjinnnn"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"Zjinnnn"},"content":" * @return Custom error message indicating that the selected task is invalid.","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"Zjinnnn"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"Zjinnnn"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":18,"author":{"gitId":"Zjinnnn"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":19,"author":{"gitId":"Zjinnnn"},"content":" return \" ☹ OOPS!!! No such task! Please reselect carefully!\";","lastModifiedDate":"2023-08-22"},{"lineNumber":20,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":21,"author":{"gitId":"Zjinnnn"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"Zjinnnn":21}},{"path":"src/main/java/pooh/LoadTasksException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Zjinnnn"},"content":"package pooh;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Zjinnnn"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Zjinnnn"},"content":" * Exception thrown when there is an error loading tasks from a file.","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"Zjinnnn"},"content":" * \u003cp\u003e","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"Zjinnnn"},"content":" * This exception is a subclass of PoohException and overrides the toString method to provide","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"Zjinnnn"},"content":" * a custom error message indicating that there was an error loading tasks from a file.","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"Zjinnnn"},"content":" * \u003c/p\u003e","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Zjinnnn"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Zjinnnn"},"content":"public class LoadTasksException extends PoohException {","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"Zjinnnn"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"Zjinnnn"},"content":" * Returns a string representation of the exception, containing a custom error message.","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"Zjinnnn"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"Zjinnnn"},"content":" * @return Custom error message indicating that an error has occurred while loading tasks from a file.","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"Zjinnnn"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"Zjinnnn"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"Zjinnnn"},"content":" public String toString() {","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"Zjinnnn"},"content":" return \" An error has occurred whilst loading tasks from file. :-(\";","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"Zjinnnn"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"Zjinnnn":21}},{"path":"src/main/java/pooh/NotTimeSensitiveTaskException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Zjinnnn"},"content":"package pooh;","lastModifiedDate":"2023-09-10"},{"lineNumber":2,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"Zjinnnn"},"content":"/**","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"Zjinnnn"},"content":" * Exception thrown when specific tasks that are not time-sensitive.","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"Zjinnnn"},"content":" * \u003cp\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"Zjinnnn"},"content":" * This exception is thrown when an operation that requires a time-sensitive task","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"Zjinnnn"},"content":" * is performed on a task that is not time-sensitive.","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"Zjinnnn"},"content":" * \u003c/p\u003e","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"Zjinnnn"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"Zjinnnn"},"content":"public class NotTimeSensitiveTaskException extends PoohException {","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"Zjinnnn"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"Zjinnnn"},"content":" * Returns a string representation of this exception.","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"Zjinnnn"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"Zjinnnn"},"content":" * @return A string indicating that the task is not time-sensitive.","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"Zjinnnn"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"Zjinnnn"},"content":" @Override","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"Zjinnnn"},"content":" public String toString() {","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"Zjinnnn"},"content":" return \"Task is not time-sensitive!\";","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":21,"author":{"gitId":"Zjinnnn"},"content":"}","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"Zjinnnn":21}},{"path":"src/main/java/pooh/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Zjinnnn"},"content":"package pooh;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Zjinnnn"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Zjinnnn"},"content":" * Responsible for parsing user input and executing commands.","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"Zjinnnn"},"content":" * \u003cp\u003e","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"Zjinnnn"},"content":" * This class takes care of interpreting user commands and then calling appropriate","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"Zjinnnn"},"content":" * methods to perform the actions described by those commands. It supports a variety","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"Zjinnnn"},"content":" * of commands including task listing, marking tasks as done or undone, and more.","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Zjinnnn"},"content":" * \u003c/p\u003e","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Zjinnnn"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Zjinnnn"},"content":"public class Parser {","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"Zjinnnn"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"Zjinnnn"},"content":" * Parses and executes the command specified in the given user input.","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"Zjinnnn"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"Zjinnnn"},"content":" * @param taskStorage The storage object responsible for task storage operations.","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"Zjinnnn"},"content":" * @param taskList The task list that holds all tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"Zjinnnn"},"content":" * @param userInput The string input from the user.","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"Zjinnnn"},"content":" * @throws UnrecognizedCommandException If the command is not recognized.","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"Zjinnnn"},"content":" * @throws InvalidTaskException If the task specified for certain operations is invalid.","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"Zjinnnn"},"content":" * @throws WriteTasksException If there is an error while writing tasks to storage.","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"Zjinnnn"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"Zjinnnn"},"content":" public String parseInput(Storage taskStorage, TaskList taskList, Ui ui, String userInput) throws","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"Zjinnnn"},"content":" UnrecognizedCommandException, InvalidTaskException, WriteTasksException {","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"Zjinnnn"},"content":" String userAction \u003d userInput.split(\" \")[0];","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"Zjinnnn"},"content":" if (userAction.equalsIgnoreCase(\"list\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"Zjinnnn"},"content":" return ui.getTasksMessage(taskList);","lastModifiedDate":"2023-09-10"},{"lineNumber":28,"author":{"gitId":"Zjinnnn"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"Zjinnnn"},"content":" switch (userAction.toLowerCase()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"Zjinnnn"},"content":" case \"bye\":","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"Zjinnnn"},"content":" taskStorage.writeTask(taskList);","lastModifiedDate":"2023-09-05"},{"lineNumber":32,"author":{"gitId":"Zjinnnn"},"content":" return ui.getExitMessage();","lastModifiedDate":"2023-09-10"},{"lineNumber":33,"author":{"gitId":"Zjinnnn"},"content":" case \"mark\":","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"Zjinnnn"},"content":" int markIndex \u003d Integer.parseInt(userInput.split(\" \")[1]) - 1;","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"Zjinnnn"},"content":" Task markTask \u003d taskList.getTask(markIndex);","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"Zjinnnn"},"content":" markTask.markAsDone();","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"Zjinnnn"},"content":" taskStorage.writeTask(taskList);","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"Zjinnnn"},"content":" return ui.getTaskDoneMessage(markTask);","lastModifiedDate":"2023-09-10"},{"lineNumber":39,"author":{"gitId":"Zjinnnn"},"content":" case \"unmark\":","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"Zjinnnn"},"content":" int unmarkIndex \u003d Integer.parseInt(userInput.split(\" \")[1]) - 1;","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"Zjinnnn"},"content":" Task unmarkTask \u003d taskList.getTask(unmarkIndex);","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"Zjinnnn"},"content":" unmarkTask.markAsUndone();","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"Zjinnnn"},"content":" taskStorage.writeTask(taskList);","lastModifiedDate":"2023-09-05"},{"lineNumber":44,"author":{"gitId":"Zjinnnn"},"content":" return ui.getTaskUndoneMessage(unmarkTask);","lastModifiedDate":"2023-09-10"},{"lineNumber":45,"author":{"gitId":"Zjinnnn"},"content":" case \"todo\":","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"Zjinnnn"},"content":" case \"event\":","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"Zjinnnn"},"content":" case \"deadline\":","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"Zjinnnn"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"Zjinnnn"},"content":" TaskList.addTask(taskList, userAction, userInput);","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"Zjinnnn"},"content":" Task task \u003d taskList.getTask(taskList.getSize() - 1);","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"Zjinnnn"},"content":" taskStorage.writeTask(taskList);","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"Zjinnnn"},"content":" return ui.getAddTaskMessage(taskList, task);","lastModifiedDate":"2023-09-10"},{"lineNumber":53,"author":{"gitId":"Zjinnnn"},"content":" } catch (EmptyTaskDescriptorsException ex) {","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"Zjinnnn"},"content":" return ui.respond(ex.toString());","lastModifiedDate":"2023-09-05"},{"lineNumber":55,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"Zjinnnn"},"content":" case \"delete\":","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"Zjinnnn"},"content":" int delIndex \u003d Integer.parseInt(userInput.split(\" \")[1]) - 1;","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"Zjinnnn"},"content":" Task task \u003d taskList.getTask(delIndex);","lastModifiedDate":"2023-09-05"},{"lineNumber":59,"author":{"gitId":"Zjinnnn"},"content":" TaskList.deleteTask(taskList, delIndex);","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"Zjinnnn"},"content":" taskStorage.writeTask(taskList);","lastModifiedDate":"2023-09-05"},{"lineNumber":61,"author":{"gitId":"Zjinnnn"},"content":" return ui.getDeleteTaskMessage(taskList, task);","lastModifiedDate":"2023-09-10"},{"lineNumber":62,"author":{"gitId":"Zjinnnn"},"content":" case \"find\":","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"Zjinnnn"},"content":" String keyword \u003d userInput.split(\" \")[1];","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"Zjinnnn"},"content":" TaskList keywordTaskList \u003d taskList.getTasksWithKeyword(keyword);","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"Zjinnnn"},"content":" if (keywordTaskList.getSize() \u003e\u003d 1) {","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"Zjinnnn"},"content":" return ui.getKeywordTasksMessage(keywordTaskList);","lastModifiedDate":"2023-09-10"},{"lineNumber":67,"author":{"gitId":"Zjinnnn"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"Zjinnnn"},"content":" return ui.getNoKeywordTasksFoundMessage();","lastModifiedDate":"2023-09-10"},{"lineNumber":69,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"Zjinnnn"},"content":" case \"postpone\":","lastModifiedDate":"2023-09-10"},{"lineNumber":71,"author":{"gitId":"Zjinnnn"},"content":" try {","lastModifiedDate":"2023-09-10"},{"lineNumber":72,"author":{"gitId":"Zjinnnn"},"content":" int postponeIndex \u003d Integer.parseInt(userInput.split(\" \")[1]) - 1;","lastModifiedDate":"2023-09-10"},{"lineNumber":73,"author":{"gitId":"Zjinnnn"},"content":" String deadlineString \u003d userInput.split(\" \")[2];","lastModifiedDate":"2023-09-10"},{"lineNumber":74,"author":{"gitId":"Zjinnnn"},"content":" Task postponedTask \u003d taskList.postponeTimeSensitiveTask(postponeIndex, deadlineString);","lastModifiedDate":"2023-09-10"},{"lineNumber":75,"author":{"gitId":"Zjinnnn"},"content":" taskStorage.writeTask(taskList);","lastModifiedDate":"2023-09-10"},{"lineNumber":76,"author":{"gitId":"Zjinnnn"},"content":" return ui.getPostponeTaskMessage(postponedTask);","lastModifiedDate":"2023-09-10"},{"lineNumber":77,"author":{"gitId":"Zjinnnn"},"content":" } catch (NotTimeSensitiveTaskException ex) {","lastModifiedDate":"2023-09-10"},{"lineNumber":78,"author":{"gitId":"Zjinnnn"},"content":" return ui.getUnableToPostponeTaskMessage();","lastModifiedDate":"2023-09-10"},{"lineNumber":79,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":80,"author":{"gitId":"Zjinnnn"},"content":" default:","lastModifiedDate":"2023-08-29"},{"lineNumber":81,"author":{"gitId":"Zjinnnn"},"content":" throw new UnrecognizedCommandException();","lastModifiedDate":"2023-08-29"},{"lineNumber":82,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":83,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":84,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":85,"author":{"gitId":"Zjinnnn"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"Zjinnnn":85}},{"path":"src/main/java/pooh/Pooh.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Zjinnnn"},"content":"package pooh;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Zjinnnn"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-22"},{"lineNumber":4,"author":{"gitId":"Zjinnnn"},"content":"import java.util.List;","lastModifiedDate":"2023-08-22"},{"lineNumber":5,"author":{"gitId":"Zjinnnn"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-22"},{"lineNumber":6,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"Zjinnnn"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"Zjinnnn"},"content":" * Main application class for the Pooh chatbot.","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Zjinnnn"},"content":" * \u003cp\u003e","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Zjinnnn"},"content":" * This class is responsible for initializing storage, loading tasks, and running","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Zjinnnn"},"content":" * the main event loop of the application. It delegates command parsing to the Parser","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"Zjinnnn"},"content":" * class and storage operations to the Storage class.","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"Zjinnnn"},"content":" * \u003c/p\u003e","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"Zjinnnn"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"Zjinnnn"},"content":"public class Pooh {","lastModifiedDate":"2023-08-22"},{"lineNumber":16,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":17,"author":{"gitId":"Zjinnnn"},"content":" private final Storage taskStorage;","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"Zjinnnn"},"content":" private final Parser cmdParser;","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"Zjinnnn"},"content":" private TaskList taskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"Zjinnnn"},"content":" private final Ui ui;","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":22,"author":{"gitId":"Zjinnnn"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"Zjinnnn"},"content":" * Constructs a new Pooh chatbot.","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"Zjinnnn"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"Zjinnnn"},"content":" * @param filePath The file path where tasks are stored.","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"Zjinnnn"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"Zjinnnn"},"content":" public Pooh(String filePath) {","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":29,"author":{"gitId":"Zjinnnn"},"content":" assert !filePath.isEmpty() : \"filePath cannot be empty\";","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"Zjinnnn"},"content":" cmdParser \u003d new Parser();","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"Zjinnnn"},"content":" taskStorage \u003d new Storage(filePath);","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"Zjinnnn"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-09-05"},{"lineNumber":34,"author":{"gitId":"Zjinnnn"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"Zjinnnn"},"content":" taskList \u003d new TaskList(taskStorage.loadTasks());","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"Zjinnnn"},"content":" } catch (LoadTasksException ex) {","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"Zjinnnn"},"content":" ui.respond(ex.toString());","lastModifiedDate":"2023-09-05"},{"lineNumber":38,"author":{"gitId":"Zjinnnn"},"content":" List\u003cTask\u003e listOfTasks \u003d new ArrayList\u003cTask\u003e();","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"Zjinnnn"},"content":" taskList \u003d new TaskList(listOfTasks);","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"Zjinnnn"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"Zjinnnn"},"content":" * Processes a given user command, parses it, and returns an appropriate response.","lastModifiedDate":"2023-09-05"},{"lineNumber":45,"author":{"gitId":"Zjinnnn"},"content":" * \u003cp\u003e","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"Zjinnnn"},"content":" * This method attempts to parse the user\u0027s command through the {@code cmdParser}. If the command is","lastModifiedDate":"2023-09-05"},{"lineNumber":47,"author":{"gitId":"Zjinnnn"},"content":" * valid, it performs the necessary operations and returns the response. Otherwise, if an exception","lastModifiedDate":"2023-09-05"},{"lineNumber":48,"author":{"gitId":"Zjinnnn"},"content":" * occurs, it handles the exception and returns a user-friendly error message.","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"Zjinnnn"},"content":" * \u003c/p\u003e","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"Zjinnnn"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":51,"author":{"gitId":"Zjinnnn"},"content":" * @param userCmd The command string inputted by the user.","lastModifiedDate":"2023-09-05"},{"lineNumber":52,"author":{"gitId":"Zjinnnn"},"content":" * @return A response string that results from processing the user\u0027s command.","lastModifiedDate":"2023-09-05"},{"lineNumber":53,"author":{"gitId":"Zjinnnn"},"content":" * This could be a successful operation message or an error message.","lastModifiedDate":"2023-09-05"},{"lineNumber":54,"author":{"gitId":"Zjinnnn"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"Zjinnnn"},"content":" public String getResponse(String userCmd) {","lastModifiedDate":"2023-09-05"},{"lineNumber":56,"author":{"gitId":"Zjinnnn"},"content":" try {","lastModifiedDate":"2023-08-22"},{"lineNumber":57,"author":{"gitId":"Zjinnnn"},"content":" return cmdParser.parseInput(taskStorage, taskList, ui, userCmd);","lastModifiedDate":"2023-09-05"},{"lineNumber":58,"author":{"gitId":"Zjinnnn"},"content":" } catch (UnrecognizedCommandException ex) {","lastModifiedDate":"2023-08-22"},{"lineNumber":59,"author":{"gitId":"Zjinnnn"},"content":" return ui.respond(ex.toString());","lastModifiedDate":"2023-09-05"},{"lineNumber":60,"author":{"gitId":"Zjinnnn"},"content":" } catch (WriteTasksException ex) {","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"Zjinnnn"},"content":" return ui.respond(ex.toString());","lastModifiedDate":"2023-09-05"},{"lineNumber":62,"author":{"gitId":"Zjinnnn"},"content":" } catch (InvalidTaskException ex) {","lastModifiedDate":"2023-08-22"},{"lineNumber":63,"author":{"gitId":"Zjinnnn"},"content":" return ui.respond(ex.toString());","lastModifiedDate":"2023-09-05"},{"lineNumber":64,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":65,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":66,"author":{"gitId":"Zjinnnn"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"Zjinnnn":66}},{"path":"src/main/java/pooh/PoohException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Zjinnnn"},"content":"package pooh;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Zjinnnn"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Zjinnnn"},"content":" * Custom exception class for the Pooh chatbot.","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"Zjinnnn"},"content":" * \u003cp\u003e","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"Zjinnnn"},"content":" * This class serves as the base class for all custom exceptions in the Pooh application.","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"Zjinnnn"},"content":" * It is meant to be subclassed by more specific exception types to handle various error","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"Zjinnnn"},"content":" * scenarios within the application.","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Zjinnnn"},"content":" * \u003c/p\u003e","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Zjinnnn"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Zjinnnn"},"content":"public class PoohException extends Exception {","lastModifiedDate":"2023-08-22"},{"lineNumber":12,"author":{"gitId":"Zjinnnn"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"Zjinnnn":12}},{"path":"src/main/java/pooh/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Zjinnnn"},"content":"package pooh;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Zjinnnn"},"content":"import java.io.*;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Zjinnnn"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"Zjinnnn"},"content":"import java.util.List;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"Zjinnnn"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"Zjinnnn"},"content":" * Handles storage-related operations for the Pooh chatbot.","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Zjinnnn"},"content":" * \u003cp\u003e","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Zjinnnn"},"content":" * This class is responsible for reading and writing tasks to and from a file.","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Zjinnnn"},"content":" * \u003c/p\u003e","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"Zjinnnn"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"Zjinnnn"},"content":"public class Storage {","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"Zjinnnn"},"content":" private final String filePath;","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"Zjinnnn"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"Zjinnnn"},"content":" * Constructs a new Storage instance.","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"Zjinnnn"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"Zjinnnn"},"content":" * @param filePath The path of the file to read from and write to.","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"Zjinnnn"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"Zjinnnn"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"Zjinnnn"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"Zjinnnn"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"Zjinnnn"},"content":" * Loads tasks from the file specified by {@code filePath}.","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"Zjinnnn"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"Zjinnnn"},"content":" * @return A list of tasks loaded from the file.","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"Zjinnnn"},"content":" * @throws LoadTasksException If there is an error reading the file.","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"Zjinnnn"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"Zjinnnn"},"content":" public List\u003cTask\u003e loadTasks() throws LoadTasksException {","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"Zjinnnn"},"content":" File file \u003d new File(this.filePath);","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"Zjinnnn"},"content":" List\u003cTask\u003e taskList \u003d new ArrayList\u003cTask\u003e();","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"Zjinnnn"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"Zjinnnn"},"content":" if (file.exists()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"Zjinnnn"},"content":" BufferedReader fileReader \u003d new BufferedReader(new FileReader(file));","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"Zjinnnn"},"content":" String line \u003d fileReader.readLine();","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"Zjinnnn"},"content":" while (line !\u003d null) {","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"Zjinnnn"},"content":" Task task \u003d Task.readTaskFromFile(line);","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"Zjinnnn"},"content":" taskList.add(task);","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"Zjinnnn"},"content":" line \u003d fileReader.readLine();","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"Zjinnnn"},"content":" fileReader.close();","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"Zjinnnn"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"Zjinnnn"},"content":" boolean fileCreated \u003d file.createNewFile();","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"Zjinnnn"},"content":" } catch (IOException ex) {","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"Zjinnnn"},"content":" throw new LoadTasksException();","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"Zjinnnn"},"content":" return taskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"Zjinnnn"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"Zjinnnn"},"content":" * Writes the current tasks to the file specified by {@code filePath}.","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"Zjinnnn"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"Zjinnnn"},"content":" * @param taskList The list of tasks to write.","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"Zjinnnn"},"content":" * @throws WriteTasksException If there is an error writing to the file.","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"Zjinnnn"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"Zjinnnn"},"content":" public void writeTask(TaskList taskList) throws WriteTasksException {","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"Zjinnnn"},"content":" try (FileWriter fileWriter \u003d new FileWriter(\"pooh.txt\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"Zjinnnn"},"content":" for (int i \u003d 0; i \u003c taskList.getSize(); i++) {","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"Zjinnnn"},"content":" Task task \u003d taskList.getTask(i);","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"Zjinnnn"},"content":" fileWriter.write(task.writeTaskToFile() + \"\\n\");","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"Zjinnnn"},"content":" } catch (IOException ex) {","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"Zjinnnn"},"content":" throw new WriteTasksException();","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"Zjinnnn"},"content":" } catch (InvalidTaskException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"Zjinnnn"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"Zjinnnn"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"Zjinnnn":74}},{"path":"src/main/java/pooh/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Zjinnnn"},"content":"package pooh;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"Zjinnnn"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Zjinnnn"},"content":" * Abstract class representing a task.","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"Zjinnnn"},"content":" * \u003cp\u003e","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"Zjinnnn"},"content":" * This class serves as the basis for different types of tasks and encapsulates","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"Zjinnnn"},"content":" * the basic information and operations related to a task.","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"Zjinnnn"},"content":" * \u003c/p\u003e","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Zjinnnn"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Zjinnnn"},"content":"public abstract class Task {","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"Zjinnnn"},"content":" private final String description;","lastModifiedDate":"2023-08-22"},{"lineNumber":12,"author":{"gitId":"Zjinnnn"},"content":" private boolean isDone;","lastModifiedDate":"2023-08-22"},{"lineNumber":13,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":14,"author":{"gitId":"Zjinnnn"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"Zjinnnn"},"content":" * Constructs a new Task with the given description.","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"Zjinnnn"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"Zjinnnn"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"Zjinnnn"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"Zjinnnn"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-22"},{"lineNumber":20,"author":{"gitId":"Zjinnnn"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-22"},{"lineNumber":21,"author":{"gitId":"Zjinnnn"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-22"},{"lineNumber":22,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":23,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":24,"author":{"gitId":"Zjinnnn"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"Zjinnnn"},"content":" * Retrieves the description of the task.","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"Zjinnnn"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"Zjinnnn"},"content":" * @return The description of the task.","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"Zjinnnn"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"Zjinnnn"},"content":" public String getDescription() {","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"Zjinnnn"},"content":" return this.description;","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":32,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":33,"author":{"gitId":"Zjinnnn"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"Zjinnnn"},"content":" * Checks whether the task is done or not.","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"Zjinnnn"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"Zjinnnn"},"content":" * @return {@code true} if the task is done, {@code false} otherwise.","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"Zjinnnn"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"Zjinnnn"},"content":" public boolean getIsDone() {","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"Zjinnnn"},"content":" return this.isDone;","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"Zjinnnn"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"Zjinnnn"},"content":" * Retrieves the status icon based on the task\u0027s completion status.","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"Zjinnnn"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"Zjinnnn"},"content":" * @return \"X\" if the task is done, \" \" otherwise.","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"Zjinnnn"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"Zjinnnn"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"Zjinnnn"},"content":" return (isDone ? \"X\" : \" \"); // mark done task with X","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":50,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":51,"author":{"gitId":"Zjinnnn"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"Zjinnnn"},"content":" * Marks the task as done.","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"Zjinnnn"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"Zjinnnn"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-22"},{"lineNumber":55,"author":{"gitId":"Zjinnnn"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-22"},{"lineNumber":56,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":57,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":58,"author":{"gitId":"Zjinnnn"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"Zjinnnn"},"content":" * Marks the task as not done.","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"Zjinnnn"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"Zjinnnn"},"content":" public void markAsUndone() {","lastModifiedDate":"2023-08-22"},{"lineNumber":62,"author":{"gitId":"Zjinnnn"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-22"},{"lineNumber":63,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":64,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":65,"author":{"gitId":"Zjinnnn"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"Zjinnnn"},"content":" * Converts the task to a string format suitable for file storage.","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"Zjinnnn"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"Zjinnnn"},"content":" * @return A string representation of the task for file storage.","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"Zjinnnn"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"Zjinnnn"},"content":" public abstract String writeTaskToFile();","lastModifiedDate":"2023-08-28"},{"lineNumber":71,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":72,"author":{"gitId":"Zjinnnn"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"Zjinnnn"},"content":" * Creates a task from its string representation in a file.","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"Zjinnnn"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":75,"author":{"gitId":"Zjinnnn"},"content":" * @param input A string containing the task\u0027s information.","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"Zjinnnn"},"content":" * @return A new Task object corresponding to the input string.","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"Zjinnnn"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"Zjinnnn"},"content":" public static Task readTaskFromFile(String input) {","lastModifiedDate":"2023-08-28"},{"lineNumber":79,"author":{"gitId":"Zjinnnn"},"content":" String[] args \u003d input.split(\" \\\\| \");","lastModifiedDate":"2023-08-28"},{"lineNumber":80,"author":{"gitId":"Zjinnnn"},"content":" Task task;","lastModifiedDate":"2023-08-28"},{"lineNumber":81,"author":{"gitId":"Zjinnnn"},"content":" switch (args[0]) {","lastModifiedDate":"2023-08-28"},{"lineNumber":82,"author":{"gitId":"Zjinnnn"},"content":" case \"T\":","lastModifiedDate":"2023-08-28"},{"lineNumber":83,"author":{"gitId":"Zjinnnn"},"content":" task \u003d Todo.readTaskFromFile(args);","lastModifiedDate":"2023-08-28"},{"lineNumber":84,"author":{"gitId":"Zjinnnn"},"content":" break;","lastModifiedDate":"2023-08-28"},{"lineNumber":85,"author":{"gitId":"Zjinnnn"},"content":" case \"D\":","lastModifiedDate":"2023-08-28"},{"lineNumber":86,"author":{"gitId":"Zjinnnn"},"content":" task \u003d Deadline.readTaskFromFile(args);","lastModifiedDate":"2023-08-28"},{"lineNumber":87,"author":{"gitId":"Zjinnnn"},"content":" break;","lastModifiedDate":"2023-08-28"},{"lineNumber":88,"author":{"gitId":"Zjinnnn"},"content":" case \"E\":","lastModifiedDate":"2023-08-28"},{"lineNumber":89,"author":{"gitId":"Zjinnnn"},"content":" task \u003d Event.readTaskFromFile(args);","lastModifiedDate":"2023-08-28"},{"lineNumber":90,"author":{"gitId":"Zjinnnn"},"content":" break;","lastModifiedDate":"2023-08-28"},{"lineNumber":91,"author":{"gitId":"Zjinnnn"},"content":" default:","lastModifiedDate":"2023-08-28"},{"lineNumber":92,"author":{"gitId":"Zjinnnn"},"content":" task \u003d null;","lastModifiedDate":"2023-08-28"},{"lineNumber":93,"author":{"gitId":"Zjinnnn"},"content":" break;","lastModifiedDate":"2023-08-28"},{"lineNumber":94,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":95,"author":{"gitId":"Zjinnnn"},"content":" return task;","lastModifiedDate":"2023-08-28"},{"lineNumber":96,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":97,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":98,"author":{"gitId":"Zjinnnn"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":99,"author":{"gitId":"Zjinnnn"},"content":" * Checks if the task description contains a specified keyword.","lastModifiedDate":"2023-08-29"},{"lineNumber":100,"author":{"gitId":"Zjinnnn"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":101,"author":{"gitId":"Zjinnnn"},"content":" * @param keyword The string keyword to search for in the task description.","lastModifiedDate":"2023-08-29"},{"lineNumber":102,"author":{"gitId":"Zjinnnn"},"content":" * @return true if the task description contains the keyword, false otherwise.","lastModifiedDate":"2023-08-29"},{"lineNumber":103,"author":{"gitId":"Zjinnnn"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":104,"author":{"gitId":"Zjinnnn"},"content":" public boolean ifDescriptionContains(String keyword) {","lastModifiedDate":"2023-08-29"},{"lineNumber":105,"author":{"gitId":"Zjinnnn"},"content":" return this.description.contains(keyword);","lastModifiedDate":"2023-08-29"},{"lineNumber":106,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":107,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":108,"author":{"gitId":"Zjinnnn"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":109,"author":{"gitId":"Zjinnnn"},"content":" * Converts the task to a user-friendly string representation.","lastModifiedDate":"2023-08-29"},{"lineNumber":110,"author":{"gitId":"Zjinnnn"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":111,"author":{"gitId":"Zjinnnn"},"content":" * @return A string representation of the task.","lastModifiedDate":"2023-08-29"},{"lineNumber":112,"author":{"gitId":"Zjinnnn"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":113,"author":{"gitId":"Zjinnnn"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":114,"author":{"gitId":"Zjinnnn"},"content":" public String toString() {","lastModifiedDate":"2023-08-28"},{"lineNumber":115,"author":{"gitId":"Zjinnnn"},"content":" return String.format(\"[%s] %s\", getStatusIcon(), description);","lastModifiedDate":"2023-08-28"},{"lineNumber":116,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":117,"author":{"gitId":"Zjinnnn"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"Zjinnnn":117}},{"path":"src/main/java/pooh/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Zjinnnn"},"content":"package pooh;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Zjinnnn"},"content":"import java.sql.Time;","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"Zjinnnn"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"Zjinnnn"},"content":"import java.util.List;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"Zjinnnn"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"Zjinnnn"},"content":" * Class representing a list of tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Zjinnnn"},"content":" * \u003cp\u003e","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Zjinnnn"},"content":" * This class encapsulates the list of tasks and provides methods for adding,","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Zjinnnn"},"content":" * removing, and retrieving tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"Zjinnnn"},"content":" * \u003c/p\u003e","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"Zjinnnn"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"Zjinnnn"},"content":"public class TaskList {","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"Zjinnnn"},"content":" private final List\u003cTask\u003e taskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"Zjinnnn"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"Zjinnnn"},"content":" * Constructs a new TaskList with the given list of tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"Zjinnnn"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"Zjinnnn"},"content":" * @param taskList The initial list of tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"Zjinnnn"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"Zjinnnn"},"content":" public TaskList(List\u003cTask\u003e taskList) {","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"Zjinnnn"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"Zjinnnn"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"Zjinnnn"},"content":" * Adds a new task to the list.","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"Zjinnnn"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"Zjinnnn"},"content":" * @param task The task to be added.","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"Zjinnnn"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"Zjinnnn"},"content":" public void add(Task task) {","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"Zjinnnn"},"content":" this.taskList.add(task);","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"Zjinnnn"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"Zjinnnn"},"content":" * Removes a task from the list at the specified index.","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"Zjinnnn"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"Zjinnnn"},"content":" * @param task The index of the task to be removed.","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"Zjinnnn"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"Zjinnnn"},"content":" public void remove(int task) {","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"Zjinnnn"},"content":" this.taskList.remove(task);","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"Zjinnnn"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"Zjinnnn"},"content":" * Retrieves a task from the list at the specified index.","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"Zjinnnn"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"Zjinnnn"},"content":" * @param index The index of the task to retrieve.","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"Zjinnnn"},"content":" * @return The task at the specified index.","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"Zjinnnn"},"content":" * @throws InvalidTaskException If the index is out of bounds.","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"Zjinnnn"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"Zjinnnn"},"content":" public Task getTask(int index) throws InvalidTaskException {","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"Zjinnnn"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"Zjinnnn"},"content":" return this.taskList.get(index);","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"Zjinnnn"},"content":" } catch (IndexOutOfBoundsException ex) {","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"Zjinnnn"},"content":" throw new InvalidTaskException();","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"Zjinnnn"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"Zjinnnn"},"content":" * Retrieves the size of the task list.","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"Zjinnnn"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"Zjinnnn"},"content":" * @return The number of tasks in the list.","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"Zjinnnn"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"Zjinnnn"},"content":" public int getSize() {","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"Zjinnnn"},"content":" return this.taskList.size();","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"Zjinnnn"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"Zjinnnn"},"content":" * Adds a task to the task list based on user input.","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"Zjinnnn"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"Zjinnnn"},"content":" * @param taskList The task list to which the task will be added.","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"Zjinnnn"},"content":" * @param userAction The type of task to be added.","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"Zjinnnn"},"content":" * @param cmd The full command from the user.","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"Zjinnnn"},"content":" * @throws EmptyTaskDescriptorsException If the task description is empty.","lastModifiedDate":"2023-08-29"},{"lineNumber":75,"author":{"gitId":"Zjinnnn"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"Zjinnnn"},"content":" public static void addTask(TaskList taskList, String userAction, String cmd) throws","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"Zjinnnn"},"content":" EmptyTaskDescriptorsException {","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"Zjinnnn"},"content":" if (cmd.split(\" \", 2).length \u003d\u003d 1) {","lastModifiedDate":"2023-08-29"},{"lineNumber":79,"author":{"gitId":"Zjinnnn"},"content":" throw new EmptyTaskDescriptorsException();","lastModifiedDate":"2023-08-29"},{"lineNumber":80,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":81,"author":{"gitId":"Zjinnnn"},"content":" String userArgs \u003d cmd.split(\" \", 2)[1];","lastModifiedDate":"2023-08-29"},{"lineNumber":82,"author":{"gitId":"Zjinnnn"},"content":" Task task;","lastModifiedDate":"2023-08-29"},{"lineNumber":83,"author":{"gitId":"Zjinnnn"},"content":" if (userAction.equalsIgnoreCase(\"todo\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":84,"author":{"gitId":"Zjinnnn"},"content":" task \u003d new Todo(userArgs);","lastModifiedDate":"2023-08-29"},{"lineNumber":85,"author":{"gitId":"Zjinnnn"},"content":" } else if (userAction.equalsIgnoreCase(\"deadline\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":86,"author":{"gitId":"Zjinnnn"},"content":" String[] specificArgs \u003d userArgs.split(\" /by \", 2);","lastModifiedDate":"2023-08-29"},{"lineNumber":87,"author":{"gitId":"Zjinnnn"},"content":" String description \u003d specificArgs[0];","lastModifiedDate":"2023-08-29"},{"lineNumber":88,"author":{"gitId":"Zjinnnn"},"content":" String deadlineTime \u003d specificArgs[1];","lastModifiedDate":"2023-08-29"},{"lineNumber":89,"author":{"gitId":"Zjinnnn"},"content":" task \u003d new Deadline(description, deadlineTime);","lastModifiedDate":"2023-08-29"},{"lineNumber":90,"author":{"gitId":"Zjinnnn"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":91,"author":{"gitId":"Zjinnnn"},"content":" String[] specificArgs \u003d userArgs.split(\" /from \", 2);","lastModifiedDate":"2023-08-29"},{"lineNumber":92,"author":{"gitId":"Zjinnnn"},"content":" String description \u003d specificArgs[0];","lastModifiedDate":"2023-08-29"},{"lineNumber":93,"author":{"gitId":"Zjinnnn"},"content":" String[] eventTimes \u003d specificArgs[1].split(\" /to \");","lastModifiedDate":"2023-08-29"},{"lineNumber":94,"author":{"gitId":"Zjinnnn"},"content":" String eventStartTime \u003d eventTimes[0];","lastModifiedDate":"2023-08-29"},{"lineNumber":95,"author":{"gitId":"Zjinnnn"},"content":" String eventEndTime \u003d eventTimes[1];","lastModifiedDate":"2023-08-29"},{"lineNumber":96,"author":{"gitId":"Zjinnnn"},"content":" task \u003d new Event(description, eventStartTime, eventEndTime);","lastModifiedDate":"2023-08-29"},{"lineNumber":97,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":98,"author":{"gitId":"Zjinnnn"},"content":" taskList.add(task);","lastModifiedDate":"2023-08-29"},{"lineNumber":99,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":100,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":101,"author":{"gitId":"Zjinnnn"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":102,"author":{"gitId":"Zjinnnn"},"content":" * Deletes a task from the task list at the specified index.","lastModifiedDate":"2023-08-29"},{"lineNumber":103,"author":{"gitId":"Zjinnnn"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":104,"author":{"gitId":"Zjinnnn"},"content":" * @param taskList The task list from which the task will be deleted.","lastModifiedDate":"2023-08-29"},{"lineNumber":105,"author":{"gitId":"Zjinnnn"},"content":" * @param index The index of the task to delete.","lastModifiedDate":"2023-08-29"},{"lineNumber":106,"author":{"gitId":"Zjinnnn"},"content":" * @throws InvalidTaskException If the index is out of bounds.","lastModifiedDate":"2023-08-29"},{"lineNumber":107,"author":{"gitId":"Zjinnnn"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":108,"author":{"gitId":"Zjinnnn"},"content":" public static void deleteTask(TaskList taskList, int index) throws InvalidTaskException {","lastModifiedDate":"2023-08-29"},{"lineNumber":109,"author":{"gitId":"Zjinnnn"},"content":" Task task \u003d taskList.getTask(index);","lastModifiedDate":"2023-08-29"},{"lineNumber":110,"author":{"gitId":"Zjinnnn"},"content":" taskList.remove(index);","lastModifiedDate":"2023-08-29"},{"lineNumber":111,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":112,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":113,"author":{"gitId":"Zjinnnn"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":114,"author":{"gitId":"Zjinnnn"},"content":" * Filters tasks in the list based on a keyword.","lastModifiedDate":"2023-08-29"},{"lineNumber":115,"author":{"gitId":"Zjinnnn"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":116,"author":{"gitId":"Zjinnnn"},"content":" * @param keyword The keyword to search for in the task descriptions.","lastModifiedDate":"2023-08-29"},{"lineNumber":117,"author":{"gitId":"Zjinnnn"},"content":" * @return A new TaskList containing tasks whose descriptions contain the keyword.","lastModifiedDate":"2023-08-29"},{"lineNumber":118,"author":{"gitId":"Zjinnnn"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":119,"author":{"gitId":"Zjinnnn"},"content":" public TaskList getTasksWithKeyword(String keyword) {","lastModifiedDate":"2023-08-29"},{"lineNumber":120,"author":{"gitId":"Zjinnnn"},"content":" List\u003cTask\u003e keywordTasks \u003d new ArrayList\u003cTask\u003e();","lastModifiedDate":"2023-08-29"},{"lineNumber":121,"author":{"gitId":"Zjinnnn"},"content":" for (Task task : taskList) {","lastModifiedDate":"2023-08-29"},{"lineNumber":122,"author":{"gitId":"Zjinnnn"},"content":" if (task.ifDescriptionContains(keyword)) {","lastModifiedDate":"2023-08-29"},{"lineNumber":123,"author":{"gitId":"Zjinnnn"},"content":" keywordTasks.add(task);","lastModifiedDate":"2023-08-29"},{"lineNumber":124,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":125,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":126,"author":{"gitId":"Zjinnnn"},"content":" return new TaskList(keywordTasks);","lastModifiedDate":"2023-08-29"},{"lineNumber":127,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":128,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":129,"author":{"gitId":"Zjinnnn"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":130,"author":{"gitId":"Zjinnnn"},"content":" * Postpones a time-sensitive task to a new specified deadline.","lastModifiedDate":"2023-09-10"},{"lineNumber":131,"author":{"gitId":"Zjinnnn"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":132,"author":{"gitId":"Zjinnnn"},"content":" * @param postponeIndex The index of the task to be postponed.","lastModifiedDate":"2023-09-10"},{"lineNumber":133,"author":{"gitId":"Zjinnnn"},"content":" * @param deadlineString The new deadline to which the task should be postponed.","lastModifiedDate":"2023-09-10"},{"lineNumber":134,"author":{"gitId":"Zjinnnn"},"content":" * @return The postponed task.","lastModifiedDate":"2023-09-10"},{"lineNumber":135,"author":{"gitId":"Zjinnnn"},"content":" * @throws InvalidTaskException If the provided index does not correspond to a valid task.","lastModifiedDate":"2023-09-10"},{"lineNumber":136,"author":{"gitId":"Zjinnnn"},"content":" * @throws NotTimeSensitiveTaskException If the task at the given index is not time-sensitive.","lastModifiedDate":"2023-09-10"},{"lineNumber":137,"author":{"gitId":"Zjinnnn"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":138,"author":{"gitId":"Zjinnnn"},"content":" public Task postponeTimeSensitiveTask(int postponeIndex, String deadlineString) throws InvalidTaskException,","lastModifiedDate":"2023-09-10"},{"lineNumber":139,"author":{"gitId":"Zjinnnn"},"content":" NotTimeSensitiveTaskException {","lastModifiedDate":"2023-09-10"},{"lineNumber":140,"author":{"gitId":"Zjinnnn"},"content":" Task task \u003d getTask(postponeIndex);","lastModifiedDate":"2023-09-10"},{"lineNumber":141,"author":{"gitId":"Zjinnnn"},"content":" if (!(task instanceof TimeSensitiveTask)) {","lastModifiedDate":"2023-09-10"},{"lineNumber":142,"author":{"gitId":"Zjinnnn"},"content":" throw new NotTimeSensitiveTaskException();","lastModifiedDate":"2023-09-10"},{"lineNumber":143,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":144,"author":{"gitId":"Zjinnnn"},"content":" TimeSensitiveTask postponedTask \u003d (TimeSensitiveTask) task;","lastModifiedDate":"2023-09-10"},{"lineNumber":145,"author":{"gitId":"Zjinnnn"},"content":" postponedTask.postpone(deadlineString);","lastModifiedDate":"2023-09-10"},{"lineNumber":146,"author":{"gitId":"Zjinnnn"},"content":" return postponedTask;","lastModifiedDate":"2023-09-10"},{"lineNumber":147,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":148,"author":{"gitId":"Zjinnnn"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"Zjinnnn":148}},{"path":"src/main/java/pooh/TimeSensitiveTask.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Zjinnnn"},"content":"package pooh;","lastModifiedDate":"2023-09-10"},{"lineNumber":2,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":3,"author":{"gitId":"Zjinnnn"},"content":"/**","lastModifiedDate":"2023-09-10"},{"lineNumber":4,"author":{"gitId":"Zjinnnn"},"content":" * Represents a task that is time-sensitive. This abstract class provides a foundation","lastModifiedDate":"2023-09-10"},{"lineNumber":5,"author":{"gitId":"Zjinnnn"},"content":" * for tasks that have a time component and can be postponed.","lastModifiedDate":"2023-09-10"},{"lineNumber":6,"author":{"gitId":"Zjinnnn"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":7,"author":{"gitId":"Zjinnnn"},"content":"public abstract class TimeSensitiveTask extends Task {","lastModifiedDate":"2023-09-10"},{"lineNumber":8,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":9,"author":{"gitId":"Zjinnnn"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":10,"author":{"gitId":"Zjinnnn"},"content":" * Constructs a TimeSensitiveTask with the specified description.","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"Zjinnnn"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":12,"author":{"gitId":"Zjinnnn"},"content":" * @param description A brief description of the task.","lastModifiedDate":"2023-09-10"},{"lineNumber":13,"author":{"gitId":"Zjinnnn"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":14,"author":{"gitId":"Zjinnnn"},"content":" TimeSensitiveTask(String description) {","lastModifiedDate":"2023-09-10"},{"lineNumber":15,"author":{"gitId":"Zjinnnn"},"content":" super(description);","lastModifiedDate":"2023-09-10"},{"lineNumber":16,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":17,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":18,"author":{"gitId":"Zjinnnn"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":19,"author":{"gitId":"Zjinnnn"},"content":" * Postpones the task to a new specified time.","lastModifiedDate":"2023-09-10"},{"lineNumber":20,"author":{"gitId":"Zjinnnn"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":21,"author":{"gitId":"Zjinnnn"},"content":" * @param time The new time to which the task should be postponed.","lastModifiedDate":"2023-09-10"},{"lineNumber":22,"author":{"gitId":"Zjinnnn"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":23,"author":{"gitId":"Zjinnnn"},"content":" public abstract void postpone(String time);","lastModifiedDate":"2023-09-10"},{"lineNumber":24,"author":{"gitId":"Zjinnnn"},"content":"}","lastModifiedDate":"2023-09-10"}],"authorContributionMap":{"Zjinnnn":24}},{"path":"src/main/java/pooh/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Zjinnnn"},"content":"package pooh;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Zjinnnn"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Zjinnnn"},"content":" * Represents a Todo task.","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"Zjinnnn"},"content":" * \u003cp\u003e","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"Zjinnnn"},"content":" * This class is a subclass of the Task class and represents","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"Zjinnnn"},"content":" * a todo task, which has a description but no specific timing details.","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"Zjinnnn"},"content":" * \u003c/p\u003e","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Zjinnnn"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Zjinnnn"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":11,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"Zjinnnn"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"Zjinnnn"},"content":" * Constructs a new Todo task with the given description.","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"Zjinnnn"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"Zjinnnn"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"Zjinnnn"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"Zjinnnn"},"content":" public Todo(String description) {","lastModifiedDate":"2023-08-22"},{"lineNumber":18,"author":{"gitId":"Zjinnnn"},"content":" super(description);","lastModifiedDate":"2023-08-22"},{"lineNumber":19,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":20,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":21,"author":{"gitId":"Zjinnnn"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"Zjinnnn"},"content":" * Writes the task details to a string in a format suitable for saving to a file.","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"Zjinnnn"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"Zjinnnn"},"content":" * @return A string representing the task\u0027s details in a save-file-friendly format.","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"Zjinnnn"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"Zjinnnn"},"content":" public String writeTaskToFile() {","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"Zjinnnn"},"content":" return String.format(\"%s | %s | %s\", \"T\",","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"Zjinnnn"},"content":" this.getIsDone() ? 1 : 0,","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"Zjinnnn"},"content":" this.getDescription());","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"Zjinnnn"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"Zjinnnn"},"content":" * Reads a todo task from a string array and returns a Todo object.","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"Zjinnnn"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"Zjinnnn"},"content":" * @param args A string array containing the task details.","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"Zjinnnn"},"content":" * @return A new Todo object constructed from the provided string array.","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"Zjinnnn"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"Zjinnnn"},"content":" public static Todo readTaskFromFile(String[] args) {","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"Zjinnnn"},"content":" Todo newTodoTask \u003d new Todo(args[2]);","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"Zjinnnn"},"content":" if (args[1].equals(\"1\")) {","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"Zjinnnn"},"content":" newTodoTask.markAsDone();","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"Zjinnnn"},"content":" return newTodoTask;","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"Zjinnnn"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"Zjinnnn"},"content":" * Returns a string representation of the task, suitable for user output.","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"Zjinnnn"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"Zjinnnn"},"content":" * @return A string containing the type, status, and description of the task.","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"Zjinnnn"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"Zjinnnn"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":52,"author":{"gitId":"Zjinnnn"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":53,"author":{"gitId":"Zjinnnn"},"content":" return String.format(\"[T]%s\", super.toString());","lastModifiedDate":"2023-08-22"},{"lineNumber":54,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":55,"author":{"gitId":"Zjinnnn"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"Zjinnnn":55}},{"path":"src/main/java/pooh/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Zjinnnn"},"content":"package pooh;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Zjinnnn"},"content":"public class Ui {","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"Zjinnnn"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"Zjinnnn"},"content":" * Returns the exit message when the user terminates the chatbot.","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"Zjinnnn"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"Zjinnnn"},"content":" * @return The exit message.","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"Zjinnnn"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Zjinnnn"},"content":" public String getExitMessage() {","lastModifiedDate":"2023-09-10"},{"lineNumber":11,"author":{"gitId":"Zjinnnn"},"content":" return \"How lucky I am to have something that makes saying goodbye so hard. Bye!\";","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"Zjinnnn"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"Zjinnnn"},"content":" * Returns the input message as a response.","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"Zjinnnn"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"Zjinnnn"},"content":" * @param message The message to be displayed.","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"Zjinnnn"},"content":" * @return The input message as a response.","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"Zjinnnn"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"Zjinnnn"},"content":" public String respond(String message) {","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"Zjinnnn"},"content":" return message;","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"Zjinnnn"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"Zjinnnn"},"content":" * Formats and returns a string representation of the tasks in the provided TaskList.","lastModifiedDate":"2023-09-05"},{"lineNumber":26,"author":{"gitId":"Zjinnnn"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"Zjinnnn"},"content":" * @param taskList The list of tasks.","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"Zjinnnn"},"content":" * @return A formatted string representation of tasks.","lastModifiedDate":"2023-09-05"},{"lineNumber":29,"author":{"gitId":"Zjinnnn"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"Zjinnnn"},"content":" public String getTasksMessage(TaskList taskList) {","lastModifiedDate":"2023-09-10"},{"lineNumber":31,"author":{"gitId":"Zjinnnn"},"content":" StringBuilder todoListString \u003d new StringBuilder();","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"Zjinnnn"},"content":" for (int i \u003d 0; i \u003c taskList.getSize(); i++) {","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"Zjinnnn"},"content":" String task;","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"Zjinnnn"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"Zjinnnn"},"content":" task \u003d String.format(\" %d. \", i + 1) + taskList.getTask(i) + \"\\n\";","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"Zjinnnn"},"content":" } catch (InvalidTaskException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"Zjinnnn"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"Zjinnnn"},"content":" todoListString.append(task);","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"Zjinnnn"},"content":" return \"Here are the tasks in your list:\\n\" + todoListString.toString().stripTrailing();","lastModifiedDate":"2023-09-05"},{"lineNumber":42,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"Zjinnnn"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"Zjinnnn"},"content":" * Formats and returns a string of tasks from a given TaskList that match a specific keyword.","lastModifiedDate":"2023-09-05"},{"lineNumber":46,"author":{"gitId":"Zjinnnn"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"Zjinnnn"},"content":" * @param taskList The TaskList containing tasks that match the keyword.","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"Zjinnnn"},"content":" * @return A formatted string representation of matching tasks.","lastModifiedDate":"2023-09-05"},{"lineNumber":49,"author":{"gitId":"Zjinnnn"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"Zjinnnn"},"content":" public String getKeywordTasksMessage(TaskList taskList) {","lastModifiedDate":"2023-09-10"},{"lineNumber":51,"author":{"gitId":"Zjinnnn"},"content":" StringBuilder todoListString \u003d new StringBuilder();","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"Zjinnnn"},"content":" for (int i \u003d 0; i \u003c taskList.getSize(); i++) {","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"Zjinnnn"},"content":" String task;","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"Zjinnnn"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"Zjinnnn"},"content":" task \u003d String.format(\" %d. \", i + 1) + taskList.getTask(i) + \"\\n\";","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"Zjinnnn"},"content":" } catch (InvalidTaskException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"Zjinnnn"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"Zjinnnn"},"content":" todoListString.append(task);","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"Zjinnnn"},"content":" return \"Here are the matching tasks in your list:\" + todoListString.toString().stripTrailing();","lastModifiedDate":"2023-09-05"},{"lineNumber":62,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"Zjinnnn"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"Zjinnnn"},"content":" * Returns a message indicating no tasks matched the specified keyword.","lastModifiedDate":"2023-09-05"},{"lineNumber":66,"author":{"gitId":"Zjinnnn"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":67,"author":{"gitId":"Zjinnnn"},"content":" * @return Message indicating no matching tasks found.","lastModifiedDate":"2023-09-05"},{"lineNumber":68,"author":{"gitId":"Zjinnnn"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"Zjinnnn"},"content":" public String getNoKeywordTasksFoundMessage() {","lastModifiedDate":"2023-09-10"},{"lineNumber":70,"author":{"gitId":"Zjinnnn"},"content":" return \"No matching tasks found.\";","lastModifiedDate":"2023-09-05"},{"lineNumber":71,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"Zjinnnn"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"Zjinnnn"},"content":" * Returns a message indicating a task has been marked as done.","lastModifiedDate":"2023-09-05"},{"lineNumber":75,"author":{"gitId":"Zjinnnn"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"Zjinnnn"},"content":" * @param task The task that has been marked as done.","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"Zjinnnn"},"content":" * @return Message indicating task marked as done.","lastModifiedDate":"2023-09-05"},{"lineNumber":78,"author":{"gitId":"Zjinnnn"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":79,"author":{"gitId":"Zjinnnn"},"content":" public String getTaskDoneMessage(Task task) {","lastModifiedDate":"2023-09-10"},{"lineNumber":80,"author":{"gitId":"Zjinnnn"},"content":" return \"Nice! I\u0027ve marked this task as done:\\n \" + task;","lastModifiedDate":"2023-09-05"},{"lineNumber":81,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":82,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":83,"author":{"gitId":"Zjinnnn"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":84,"author":{"gitId":"Zjinnnn"},"content":" * Returns a message indicating a task has been marked as not done.","lastModifiedDate":"2023-09-05"},{"lineNumber":85,"author":{"gitId":"Zjinnnn"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":86,"author":{"gitId":"Zjinnnn"},"content":" * @param task The task that has been marked as not done.","lastModifiedDate":"2023-08-29"},{"lineNumber":87,"author":{"gitId":"Zjinnnn"},"content":" * @return Message indicating task marked as not done.","lastModifiedDate":"2023-09-05"},{"lineNumber":88,"author":{"gitId":"Zjinnnn"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":89,"author":{"gitId":"Zjinnnn"},"content":" public String getTaskUndoneMessage(Task task) {","lastModifiedDate":"2023-09-10"},{"lineNumber":90,"author":{"gitId":"Zjinnnn"},"content":" return \"OK, I\u0027ve marked this task as not done yet:\\n \" + task;","lastModifiedDate":"2023-09-05"},{"lineNumber":91,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":92,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":93,"author":{"gitId":"Zjinnnn"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":94,"author":{"gitId":"Zjinnnn"},"content":" * Returns a message indicating a task has been added to the TaskList.","lastModifiedDate":"2023-09-05"},{"lineNumber":95,"author":{"gitId":"Zjinnnn"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":96,"author":{"gitId":"Zjinnnn"},"content":" * @param taskList The updated TaskList.","lastModifiedDate":"2023-09-05"},{"lineNumber":97,"author":{"gitId":"Zjinnnn"},"content":" * @param task The task that has been added.","lastModifiedDate":"2023-09-05"},{"lineNumber":98,"author":{"gitId":"Zjinnnn"},"content":" * @return Message indicating task added.","lastModifiedDate":"2023-09-05"},{"lineNumber":99,"author":{"gitId":"Zjinnnn"},"content":" */","lastModifiedDate":"2023-09-05"},{"lineNumber":100,"author":{"gitId":"Zjinnnn"},"content":" public String getAddTaskMessage(TaskList taskList, Task task) {","lastModifiedDate":"2023-09-10"},{"lineNumber":101,"author":{"gitId":"Zjinnnn"},"content":" return String.format(\" Got it. I\u0027ve added this task:\\n %s\\n Now you have \" +","lastModifiedDate":"2023-09-05"},{"lineNumber":102,"author":{"gitId":"Zjinnnn"},"content":" \"%d tasks in the list\", task, taskList.getSize());","lastModifiedDate":"2023-09-05"},{"lineNumber":103,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-09-05"},{"lineNumber":104,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":105,"author":{"gitId":"Zjinnnn"},"content":" /**","lastModifiedDate":"2023-09-05"},{"lineNumber":106,"author":{"gitId":"Zjinnnn"},"content":" * Returns a message indicating a task has been removed from the TaskList.","lastModifiedDate":"2023-09-05"},{"lineNumber":107,"author":{"gitId":"Zjinnnn"},"content":" *","lastModifiedDate":"2023-09-05"},{"lineNumber":108,"author":{"gitId":"Zjinnnn"},"content":" * @param taskList The updated TaskList.","lastModifiedDate":"2023-09-05"},{"lineNumber":109,"author":{"gitId":"Zjinnnn"},"content":" * @param task The task that has been removed.","lastModifiedDate":"2023-09-05"},{"lineNumber":110,"author":{"gitId":"Zjinnnn"},"content":" * @return Message indicating task removed.","lastModifiedDate":"2023-09-05"},{"lineNumber":111,"author":{"gitId":"Zjinnnn"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":112,"author":{"gitId":"Zjinnnn"},"content":" public String getDeleteTaskMessage(TaskList taskList, Task task) {","lastModifiedDate":"2023-09-10"},{"lineNumber":113,"author":{"gitId":"Zjinnnn"},"content":" return String.format(\"Noted. I\u0027ve removed this task:\\n %s\\n Now you have\" +","lastModifiedDate":"2023-09-05"},{"lineNumber":114,"author":{"gitId":"Zjinnnn"},"content":" \" %d tasks in the list\", task, taskList.getSize());","lastModifiedDate":"2023-09-05"},{"lineNumber":115,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":116,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":117,"author":{"gitId":"Zjinnnn"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":118,"author":{"gitId":"Zjinnnn"},"content":" * Generates a message indicating that a task has been postponed.","lastModifiedDate":"2023-09-10"},{"lineNumber":119,"author":{"gitId":"Zjinnnn"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":120,"author":{"gitId":"Zjinnnn"},"content":" * @param postponedTask The task that has been postponed.","lastModifiedDate":"2023-09-10"},{"lineNumber":121,"author":{"gitId":"Zjinnnn"},"content":" * @return A string message indicating the postponed task.","lastModifiedDate":"2023-09-10"},{"lineNumber":122,"author":{"gitId":"Zjinnnn"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":123,"author":{"gitId":"Zjinnnn"},"content":" public String getPostponeTaskMessage(Task postponedTask) {","lastModifiedDate":"2023-09-10"},{"lineNumber":124,"author":{"gitId":"Zjinnnn"},"content":" return \"OK, I have postponed this task:\\n \" + postponedTask;","lastModifiedDate":"2023-09-10"},{"lineNumber":125,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":126,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-09-10"},{"lineNumber":127,"author":{"gitId":"Zjinnnn"},"content":" /**","lastModifiedDate":"2023-09-10"},{"lineNumber":128,"author":{"gitId":"Zjinnnn"},"content":" * Generates a message indicating that a task cannot be postponed.","lastModifiedDate":"2023-09-10"},{"lineNumber":129,"author":{"gitId":"Zjinnnn"},"content":" *","lastModifiedDate":"2023-09-10"},{"lineNumber":130,"author":{"gitId":"Zjinnnn"},"content":" * @return A string message indicating the inability to postpone the task.","lastModifiedDate":"2023-09-10"},{"lineNumber":131,"author":{"gitId":"Zjinnnn"},"content":" */","lastModifiedDate":"2023-09-10"},{"lineNumber":132,"author":{"gitId":"Zjinnnn"},"content":" public String getUnableToPostponeTaskMessage() {","lastModifiedDate":"2023-09-10"},{"lineNumber":133,"author":{"gitId":"Zjinnnn"},"content":" return \"Task selected is not time-sensitive! Please select carefully!\";","lastModifiedDate":"2023-09-10"},{"lineNumber":134,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-09-10"},{"lineNumber":135,"author":{"gitId":"Zjinnnn"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"Zjinnnn":135}},{"path":"src/main/java/pooh/UnrecognizedCommandException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Zjinnnn"},"content":"package pooh;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Zjinnnn"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Zjinnnn"},"content":" * Exception thrown when an unrecognized command is entered by the user.","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"Zjinnnn"},"content":" * \u003cp\u003e","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"Zjinnnn"},"content":" * This exception is meant to be caught and handled by displaying an appropriate","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"Zjinnnn"},"content":" * error message to guide the user.","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"Zjinnnn"},"content":" * \u003c/p\u003e","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Zjinnnn"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Zjinnnn"},"content":"public class UnrecognizedCommandException extends PoohException {","lastModifiedDate":"2023-08-22"},{"lineNumber":11,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"Zjinnnn"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"Zjinnnn"},"content":" * Returns a string representation of the exception, which can be used","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"Zjinnnn"},"content":" * to display an error message to the user.","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"Zjinnnn"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"Zjinnnn"},"content":" * @return A string explaining that the command was not recognized.","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"Zjinnnn"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"Zjinnnn"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":19,"author":{"gitId":"Zjinnnn"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":20,"author":{"gitId":"Zjinnnn"},"content":" return \" ☹ OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\";","lastModifiedDate":"2023-08-22"},{"lineNumber":21,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":22,"author":{"gitId":"Zjinnnn"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"Zjinnnn":22}},{"path":"src/main/java/pooh/WriteTasksException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Zjinnnn"},"content":"package pooh;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Zjinnnn"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Zjinnnn"},"content":" * Exception thrown when an error occurs during the writing of tasks to a file.","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"Zjinnnn"},"content":" * \u003cp\u003e","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"Zjinnnn"},"content":" * This exception should be caught and handled by displaying an appropriate","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"Zjinnnn"},"content":" * error message to inform the user of the failure.","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"Zjinnnn"},"content":" * \u003c/p\u003e","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Zjinnnn"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Zjinnnn"},"content":"public class WriteTasksException extends PoohException {","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"Zjinnnn"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"Zjinnnn"},"content":" * Returns a string representation of the exception, which can be used","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"Zjinnnn"},"content":" * to display an error message to the user.","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"Zjinnnn"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"Zjinnnn"},"content":" * @return A string describing the issue encountered during file writing.","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"Zjinnnn"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"Zjinnnn"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"Zjinnnn"},"content":" public String toString() {","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"Zjinnnn"},"content":" return \" An error has occurred whilst writing to file. :-(\";","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"Zjinnnn"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"Zjinnnn":22}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"Zjinnnn"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"Zjinnnn"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"Zjinnnn"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"Zjinnnn"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"Zjinnnn"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"Zjinnnn"},"content":"\u003cfx:root alignment\u003d\"TOP_RIGHT\" maxHeight\u003d\"1.7976931348623157E308\" maxWidth\u003d\"1.7976931348623157E308\" prefWidth\u003d\"400.0\"","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"Zjinnnn"},"content":" 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-05"},{"lineNumber":10,"author":{"gitId":"Zjinnnn"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"Zjinnnn"},"content":" \u003cLabel fx:id\u003d\"dialog\" text\u003d\"Label\" wrapText\u003d\"true\"/\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"Zjinnnn"},"content":" \u003cImageView fx:id\u003d\"displayPicture\" fitHeight\u003d\"99.0\" fitWidth\u003d\"99.0\" pickOnBounds\u003d\"true\" preserveRatio\u003d\"true\"/\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"Zjinnnn"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"Zjinnnn"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"Zjinnnn"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\"/\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"Zjinnnn"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"Zjinnnn"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"Zjinnnn":17}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"Zjinnnn"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":2,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":3,"author":{"gitId":"Zjinnnn"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":4,"author":{"gitId":"Zjinnnn"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":5,"author":{"gitId":"Zjinnnn"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":6,"author":{"gitId":"Zjinnnn"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":7,"author":{"gitId":"Zjinnnn"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":8,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-09-05"},{"lineNumber":9,"author":{"gitId":"Zjinnnn"},"content":"\u003cAnchorPane maxHeight\u003d\"-Infinity\" maxWidth\u003d\"-Infinity\" minHeight\u003d\"-Infinity\" minWidth\u003d\"-Infinity\" prefHeight\u003d\"600.0\"","lastModifiedDate":"2023-09-05"},{"lineNumber":10,"author":{"gitId":"Zjinnnn"},"content":" prefWidth\u003d\"400.0\" xmlns\u003d\"http://javafx.com/javafx/17\" xmlns:fx\u003d\"http://javafx.com/fxml/1\"","lastModifiedDate":"2023-09-05"},{"lineNumber":11,"author":{"gitId":"Zjinnnn"},"content":" fx:controller\u003d\"MainWindow\"\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":12,"author":{"gitId":"Zjinnnn"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":13,"author":{"gitId":"Zjinnnn"},"content":" \u003cTextField fx:id\u003d\"userInput\" layoutY\u003d\"558.0\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"41.0\" prefWidth\u003d\"324.0\"","lastModifiedDate":"2023-09-05"},{"lineNumber":14,"author":{"gitId":"Zjinnnn"},"content":" AnchorPane.bottomAnchor\u003d\"1.0\"/\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":15,"author":{"gitId":"Zjinnnn"},"content":" \u003cButton fx:id\u003d\"sendButton\" layoutX\u003d\"324.0\" layoutY\u003d\"558.0\" mnemonicParsing\u003d\"false\" onAction\u003d\"#handleUserInput\"","lastModifiedDate":"2023-09-05"},{"lineNumber":16,"author":{"gitId":"Zjinnnn"},"content":" prefHeight\u003d\"41.0\" prefWidth\u003d\"76.0\" text\u003d\"Send\"/\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":17,"author":{"gitId":"Zjinnnn"},"content":" \u003cScrollPane fx:id\u003d\"scrollPane\" hbarPolicy\u003d\"NEVER\" hvalue\u003d\"1.0\" prefHeight\u003d\"557.0\" prefWidth\u003d\"400.0\"","lastModifiedDate":"2023-09-05"},{"lineNumber":18,"author":{"gitId":"Zjinnnn"},"content":" vvalue\u003d\"1.0\"\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":19,"author":{"gitId":"Zjinnnn"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":20,"author":{"gitId":"Zjinnnn"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"552.0\" prefWidth\u003d\"388.0\"/\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":21,"author":{"gitId":"Zjinnnn"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":22,"author":{"gitId":"Zjinnnn"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":23,"author":{"gitId":"Zjinnnn"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-05"},{"lineNumber":24,"author":{"gitId":"Zjinnnn"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-05"}],"authorContributionMap":{"Zjinnnn":24}},{"path":"src/test/java/pooh/TaskListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Zjinnnn"},"content":"package pooh;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Zjinnnn"},"content":"import java.util.List;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Zjinnnn"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"Zjinnnn"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"Zjinnnn"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Zjinnnn"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Zjinnnn"},"content":"public class TaskListTest {","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"Zjinnnn"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"Zjinnnn"},"content":" public void addTask_emptyDescription_exceptionThrown() {","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"Zjinnnn"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"Zjinnnn"},"content":" List\u003cTask\u003e taskList \u003d new ArrayList\u003cTask\u003e();","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"Zjinnnn"},"content":" TaskList taskListTester \u003d new TaskList(taskList);","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"Zjinnnn"},"content":" TaskList.addTask(taskListTester, \"deadline\", \"\");","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"Zjinnnn"},"content":" fail(\"Expected exception was not thrown.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"Zjinnnn"},"content":" } catch (EmptyTaskDescriptorsException ex) {","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"Zjinnnn"},"content":" assertEquals(\" ☹ OOPS!!! The description of a todo cannot be empty.\", ex.toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"Zjinnnn"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"Zjinnnn":23}},{"path":"src/test/java/pooh/TodoTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Zjinnnn"},"content":"package pooh;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Zjinnnn"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"Zjinnnn"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"Zjinnnn"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"Zjinnnn"},"content":"public class TodoTest {","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"Zjinnnn"},"content":" @Test","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Zjinnnn"},"content":" public void todo_correctInitialisation_toStringCorrect() {","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Zjinnnn"},"content":" Todo todo \u003d new Todo(\"buy more honey\");","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Zjinnnn"},"content":" assertEquals(\"[T][ ] buy more honey\", todo.toString());","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"Zjinnnn"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"Zjinnnn"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"Zjinnnn":13}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"Zjinnnn"},"content":"todo borrow book","lastModifiedDate":"2023-08-22"},{"lineNumber":2,"author":{"gitId":"Zjinnnn"},"content":"list","lastModifiedDate":"2023-08-22"},{"lineNumber":3,"author":{"gitId":"Zjinnnn"},"content":"deadline return book /by Sunday","lastModifiedDate":"2023-08-22"},{"lineNumber":4,"author":{"gitId":"Zjinnnn"},"content":"event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2023-08-22"},{"lineNumber":5,"author":{"gitId":"Zjinnnn"},"content":"list","lastModifiedDate":"2023-08-22"},{"lineNumber":6,"author":{"gitId":"Zjinnnn"},"content":"mark 1","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"Zjinnnn"},"content":"mark 2","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"Zjinnnn"},"content":"unmark 1","lastModifiedDate":"2023-08-22"},{"lineNumber":9,"author":{"gitId":"Zjinnnn"},"content":"unmark 2","lastModifiedDate":"2023-08-22"},{"lineNumber":10,"author":{"gitId":"Zjinnnn"},"content":"mark 3","lastModifiedDate":"2023-08-22"},{"lineNumber":11,"author":{"gitId":"Zjinnnn"},"content":"mark3","lastModifiedDate":"2023-08-22"},{"lineNumber":12,"author":{"gitId":"Zjinnnn"},"content":"list","lastModifiedDate":"2023-08-22"},{"lineNumber":13,"author":{"gitId":"Zjinnnn"},"content":"bye","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"Zjinnnn":13}},{"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":"Zjinnnn"},"content":"java -classpath ../bin Pooh \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-08-22"},{"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":{"Zjinnnn":1,"-":37}}] diff --git a/Zjinnnn_ip_master/commits.json b/Zjinnnn_ip_master/commits.json index 9a1c777e..dfd2a819 100644 --- a/Zjinnnn_ip_master/commits.json +++ b/Zjinnnn_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"Zjinnnn":[{"date":"2023-08-22","commitResults":[{"hash":"3b1b1f42b765b5cce3f0addc188c1e0df263657c","isMergeCommit":false,"messageTitle":"feat: implement level-0 increment","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":23,"deletions":10}}},{"hash":"85761343757ef14f2f9b9ca717e8c1bd4374e8cb","isMergeCommit":false,"messageTitle":"feat: implement level-1 increment","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":31,"deletions":15},"md":{"insertions":14,"deletions":9}}},{"hash":"022f5c3fb867fb6d24c798e0fec8f7f6bf547494","isMergeCommit":false,"messageTitle":"feat: implement level-2 increment","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":48,"deletions":10}}},{"hash":"cfe980635b3d92915505dfebce056cfa6b54f83c","isMergeCommit":false,"messageTitle":"refactor: added Task class","messageBody":"","tags":["A-Classes"],"fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":5}}},{"hash":"86a5d4c4374b37bdbe74e59be8acb2c9b6bd7bc3","isMergeCommit":false,"messageTitle":"implement level-3 increment","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":43,"deletions":7}}},{"hash":"979d1213aa664d445c5b8aef32fa7a90fb5f7812","isMergeCommit":false,"messageTitle":"refactor: removed unnecessary code","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":5}}},{"hash":"60c1c5df4217db529339727a4c81e811e98a7805","isMergeCommit":false,"messageTitle":"refactor: added Todo, Event, Deadline classes","messageBody":"","tags":["A-Inheritance"],"fileTypesAndContributionMap":{"java":{"insertions":38,"deletions":1}}},{"hash":"68d0509bd42e0bd4aa61293480f481161a1c5ce0","isMergeCommit":false,"messageTitle":"fix: missing }","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":0}}},{"hash":"50907cb5578d0a72f6ce3976ca0c198fe3d9d4d8","isMergeCommit":false,"messageTitle":"refactor: removed unnecessary parameters","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":5}}},{"hash":"58c1650ef70e5f26b2c793f2c724fcb5a61702b0","isMergeCommit":false,"messageTitle":"feat: implement level-4 increment","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":32,"deletions":7}}},{"hash":"dbf437f3d780fba416d5fe53dee5485035741e0f","isMergeCommit":false,"messageTitle":"style: removed extra white spaces","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}},{"hash":"874ff89681c00baaaec1ea2181c42b134a0959de","isMergeCommit":false,"messageTitle":"test: Automated Text UI Testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":13,"deletions":0},"sh":{"insertions":1,"deletions":1}}},{"hash":"977bb1516c76433360b140c3a0e5fcba700eb493","isMergeCommit":false,"messageTitle":"refactor: added PoohException class","messageBody":"","tags":["A-Exceptions"],"fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":0}}},{"hash":"bd528d35bd2d9ce0e245a16d8f5174ee912a83f2","isMergeCommit":false,"messageTitle":"feat: implement level-5 increment","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":63,"deletions":25}}}]},{"date":"2023-08-23","commitResults":[{"hash":"61eeac5820ed05f58d849962f3f050c1004252db","isMergeCommit":false,"messageTitle":"style: remove extra line","messageBody":"","tags":["A-Collections"],"fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":1}}},{"hash":"b1ad4a15df6b9308ab595eb8aef7cf1f49edc895","isMergeCommit":false,"messageTitle":"feat: implement level-6 increment","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":1}}}]},{"date":"2023-08-28","commitResults":[{"hash":"f5cba4609287c299daee97cb005951f34c75b1a4","isMergeCommit":false,"messageTitle":"feat: Implement level-7 increment","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":140,"deletions":12}}},{"hash":"c2f9dddb17083560ba64c2e094ad83feb906b6be","isMergeCommit":true,"messageTitle":"feat: Implement level-7 increment","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"4281b21014b0368750bfa6f3f600e1f480163c64","isMergeCommit":false,"messageTitle":"feat: Update to save tasks whenever it changes","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":1}}},{"hash":"13aadc8daebcefd22f36254ebf9785356fc6ed00","isMergeCommit":true,"messageTitle":"feat: Update to save tasks whenever it changes","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-29","commitResults":[{"hash":"0972ef8f0905c5d1df080630ba5e0673bb44f138","isMergeCommit":false,"messageTitle":"feat: Implement level-8 increment","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":27,"deletions":5}}},{"hash":"deb40c1aa3a0131b37f2881ae5ee30003bd337f2","isMergeCommit":true,"messageTitle":"feat: Implement level-8 increment","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}},{"hash":"328ec48dd89c36e13652e2ea784ad48ba4ba33ce","isMergeCommit":false,"messageTitle":"refactor: Make code more OOP","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":267,"deletions":183}}},{"hash":"e4912c2678ec3df1b98bd221b2909110180a4f0f","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-MoreOOP\u0027","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"b1eed065c056cbab095b30504a23c16ade7d61b3","isMergeCommit":false,"messageTitle":"refactor: Move classes to package","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":28,"deletions":2}}},{"hash":"e19530c3bdbce22ac08d7ec61aec78b7e575eddc","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"5adde29b630470d3b4f034f500d628bb680c8c78","isMergeCommit":false,"messageTitle":"test: Add test for TaskList, Todo","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":36,"deletions":0}}},{"hash":"9c100cca5d1bcde955adc511f4fdc819feb69ecc","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-JUnit\u0027","messageBody":"","tags":["A-Jar","A-JUnit"],"fileTypesAndContributionMap":{}},{"hash":"f7f45e269f789cbe908c47c220a339869d3dc9ac","isMergeCommit":false,"messageTitle":"docs: Add JavaDocs","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":403,"deletions":0}}},{"hash":"d521db3ae406db78b3febb43a8372f424805110c","isMergeCommit":false,"messageTitle":"style: Tweak code to adhere conventions","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":18}}},{"hash":"80878b459d6a5efd0e9f1132bbc5d44a11b95663","isMergeCommit":false,"messageTitle":"feat: Implement level-9 increment","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":48,"deletions":1}}},{"hash":"31756cbeed6e4a30f27a552f912f22a9250d14a5","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"f5cbcd101f19749d3741e7d7f9177657af64b345","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"39ac64c3a1e456e25463fae597cc6bb128ac59e4","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"f2864ff36a469cf3a67de25e200d158f09b57eee","isMergeCommit":false,"messageTitle":"fix: Fix exit status 1 bug","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"a8fba82d01c678a566bc0bc959618543c1345ec2","isMergeCommit":false,"messageTitle":"fix: Fix case sensitivity of commands","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"9a93dfdc6420392e38f6a058052e8a472a4e7bd7","isMergeCommit":false,"messageTitle":"docs: Update JavaDocs for methods","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":21,"deletions":0}}}]},{"date":"2023-09-05","commitResults":[{"hash":"48f3d9420e196793c4e1b264a07bab123e68c623","isMergeCommit":false,"messageTitle":"refactor: Add JavaFX","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":16,"deletions":1},"fxml":{"insertions":41,"deletions":0},"java":{"insertions":155,"deletions":0}}},{"hash":"08e2916a27056c6ea74d1c8c6284198890e6a296","isMergeCommit":false,"messageTitle":"feat: Implement level-10 increment","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"java":{"insertions":94,"deletions":127}}},{"hash":"fb3072f98b0fd6b7480ef7809cdce2f3461a67fe","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-10\u0027","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"Zjinnnn":{"java":1120,"md":14,"fxml":41,"sh":1,"bat":0,"gradle":16,"txt":13}},"authorContributionVariance":{"Zjinnnn":68125.09},"authorDisplayNameMap":{"Zjinnnn":"CS2103T-T09-4 QUEK.. JIN"}} +{"authorDailyContributionsMap":{"Zjinnnn":[{"date":"2023-08-22","commitResults":[{"hash":"3b1b1f42b765b5cce3f0addc188c1e0df263657c","isMergeCommit":false,"messageTitle":"feat: implement level-0 increment","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":23,"deletions":10}}},{"hash":"85761343757ef14f2f9b9ca717e8c1bd4374e8cb","isMergeCommit":false,"messageTitle":"feat: implement level-1 increment","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":31,"deletions":15},"md":{"insertions":14,"deletions":9}}},{"hash":"022f5c3fb867fb6d24c798e0fec8f7f6bf547494","isMergeCommit":false,"messageTitle":"feat: implement level-2 increment","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":48,"deletions":10}}},{"hash":"cfe980635b3d92915505dfebce056cfa6b54f83c","isMergeCommit":false,"messageTitle":"refactor: added Task class","messageBody":"","tags":["A-Classes"],"fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":5}}},{"hash":"86a5d4c4374b37bdbe74e59be8acb2c9b6bd7bc3","isMergeCommit":false,"messageTitle":"implement level-3 increment","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":43,"deletions":7}}},{"hash":"979d1213aa664d445c5b8aef32fa7a90fb5f7812","isMergeCommit":false,"messageTitle":"refactor: removed unnecessary code","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":5}}},{"hash":"60c1c5df4217db529339727a4c81e811e98a7805","isMergeCommit":false,"messageTitle":"refactor: added Todo, Event, Deadline classes","messageBody":"","tags":["A-Inheritance"],"fileTypesAndContributionMap":{"java":{"insertions":38,"deletions":1}}},{"hash":"68d0509bd42e0bd4aa61293480f481161a1c5ce0","isMergeCommit":false,"messageTitle":"fix: missing }","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":0}}},{"hash":"50907cb5578d0a72f6ce3976ca0c198fe3d9d4d8","isMergeCommit":false,"messageTitle":"refactor: removed unnecessary parameters","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":5}}},{"hash":"58c1650ef70e5f26b2c793f2c724fcb5a61702b0","isMergeCommit":false,"messageTitle":"feat: implement level-4 increment","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":32,"deletions":7}}},{"hash":"dbf437f3d780fba416d5fe53dee5485035741e0f","isMergeCommit":false,"messageTitle":"style: removed extra white spaces","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}},{"hash":"874ff89681c00baaaec1ea2181c42b134a0959de","isMergeCommit":false,"messageTitle":"test: Automated Text UI Testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":13,"deletions":0},"sh":{"insertions":1,"deletions":1}}},{"hash":"977bb1516c76433360b140c3a0e5fcba700eb493","isMergeCommit":false,"messageTitle":"refactor: added PoohException class","messageBody":"","tags":["A-Exceptions"],"fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":0}}},{"hash":"bd528d35bd2d9ce0e245a16d8f5174ee912a83f2","isMergeCommit":false,"messageTitle":"feat: implement level-5 increment","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":63,"deletions":25}}}]},{"date":"2023-08-23","commitResults":[{"hash":"61eeac5820ed05f58d849962f3f050c1004252db","isMergeCommit":false,"messageTitle":"style: remove extra line","messageBody":"","tags":["A-Collections"],"fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":1}}},{"hash":"b1ad4a15df6b9308ab595eb8aef7cf1f49edc895","isMergeCommit":false,"messageTitle":"feat: implement level-6 increment","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":1}}}]},{"date":"2023-08-28","commitResults":[{"hash":"f5cba4609287c299daee97cb005951f34c75b1a4","isMergeCommit":false,"messageTitle":"feat: Implement level-7 increment","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":140,"deletions":12}}},{"hash":"c2f9dddb17083560ba64c2e094ad83feb906b6be","isMergeCommit":true,"messageTitle":"feat: Implement level-7 increment","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"4281b21014b0368750bfa6f3f600e1f480163c64","isMergeCommit":false,"messageTitle":"feat: Update to save tasks whenever it changes","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":1}}},{"hash":"13aadc8daebcefd22f36254ebf9785356fc6ed00","isMergeCommit":true,"messageTitle":"feat: Update to save tasks whenever it changes","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-29","commitResults":[{"hash":"0972ef8f0905c5d1df080630ba5e0673bb44f138","isMergeCommit":false,"messageTitle":"feat: Implement level-8 increment","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":27,"deletions":5}}},{"hash":"deb40c1aa3a0131b37f2881ae5ee30003bd337f2","isMergeCommit":true,"messageTitle":"feat: Implement level-8 increment","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}},{"hash":"328ec48dd89c36e13652e2ea784ad48ba4ba33ce","isMergeCommit":false,"messageTitle":"refactor: Make code more OOP","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":267,"deletions":183}}},{"hash":"e4912c2678ec3df1b98bd221b2909110180a4f0f","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-MoreOOP\u0027","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"b1eed065c056cbab095b30504a23c16ade7d61b3","isMergeCommit":false,"messageTitle":"refactor: Move classes to package","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":28,"deletions":2}}},{"hash":"e19530c3bdbce22ac08d7ec61aec78b7e575eddc","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"5adde29b630470d3b4f034f500d628bb680c8c78","isMergeCommit":false,"messageTitle":"test: Add test for TaskList, Todo","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":36,"deletions":0}}},{"hash":"9c100cca5d1bcde955adc511f4fdc819feb69ecc","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-JUnit\u0027","messageBody":"","tags":["A-Jar","A-JUnit"],"fileTypesAndContributionMap":{}},{"hash":"f7f45e269f789cbe908c47c220a339869d3dc9ac","isMergeCommit":false,"messageTitle":"docs: Add JavaDocs","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":403,"deletions":0}}},{"hash":"d521db3ae406db78b3febb43a8372f424805110c","isMergeCommit":false,"messageTitle":"style: Tweak code to adhere conventions","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":18}}},{"hash":"80878b459d6a5efd0e9f1132bbc5d44a11b95663","isMergeCommit":false,"messageTitle":"feat: Implement level-9 increment","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":48,"deletions":1}}},{"hash":"31756cbeed6e4a30f27a552f912f22a9250d14a5","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"f5cbcd101f19749d3741e7d7f9177657af64b345","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"39ac64c3a1e456e25463fae597cc6bb128ac59e4","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"f2864ff36a469cf3a67de25e200d158f09b57eee","isMergeCommit":false,"messageTitle":"fix: Fix exit status 1 bug","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"a8fba82d01c678a566bc0bc959618543c1345ec2","isMergeCommit":false,"messageTitle":"fix: Fix case sensitivity of commands","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"9a93dfdc6420392e38f6a058052e8a472a4e7bd7","isMergeCommit":false,"messageTitle":"docs: Update JavaDocs for methods","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":21,"deletions":0}}}]},{"date":"2023-09-05","commitResults":[{"hash":"48f3d9420e196793c4e1b264a07bab123e68c623","isMergeCommit":false,"messageTitle":"refactor: Add JavaFX","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":16,"deletions":1},"fxml":{"insertions":41,"deletions":0},"java":{"insertions":155,"deletions":0}}},{"hash":"08e2916a27056c6ea74d1c8c6284198890e6a296","isMergeCommit":false,"messageTitle":"feat: Implement level-10 increment","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"java":{"insertions":94,"deletions":127}}},{"hash":"fb3072f98b0fd6b7480ef7809cdce2f3461a67fe","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-10\u0027","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-09","commitResults":[{"hash":"073a3fed734dc200154923326d577dd4b0429f62","isMergeCommit":false,"messageTitle":"feat: Add assertions to codebase","messageBody":"Documents important assumptions that should hold at various points in the code.\n\n* Ensured filePath is not empty\n\n* Ensured formatting of deadline as LocalDate object did not run into any error\n","tags":["A-Assertions"],"fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":1}}}]},{"date":"2023-09-10","commitResults":[{"hash":"9f9a5e975ffa4ab86f2bb8feaa666e5157c8d337","isMergeCommit":false,"messageTitle":"refactor: Improve code quality","messageBody":"Mainly revised the methods naming in Ui class as per PR review comments.\n\nMethods renamed:\n\n* getExitMsg() -\u003e getExitMessage()\n\n* getTasksMsg() -\u003e getTasksMessage()\n\n* getKeywordTasksMsg() -\u003e getKeywordTasksMessage()\n\n* getNoKeywordTasksFoundMsg() -\u003e getNoKeyWordTasksFoundMessage()\n\n* getTaskDoneMsg() -\u003e getTaskDoneMessage()\n\n* getTaskUndoneMsg() -\u003e getTaskUndoneMessage()\n\n* getAddTaskMsg() -\u003e getAddTaskMessage()\n\n* getDeleteTaskMsg() -\u003e getDeleteTaskMessage()\n","tags":["A-FullCommitMessage"],"fileTypesAndContributionMap":{"java":{"insertions":16,"deletions":16}}},{"hash":"3d7ba8c09fa0255d64de2ed73d2bf51dba06303b","isMergeCommit":true,"messageTitle":"Merge pull request #2 from Zjinnnn/branch-A-Assertions","messageBody":"feat: Add assertions to codebase","fileTypesAndContributionMap":{}},{"hash":"fb54f9a850c39bcdc0a2ae985474946ce44ca090","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-A-CodeQuality","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"b568c5db189a1744bf0447a610c5b723326552dc","isMergeCommit":true,"messageTitle":"Merge pull request #3 from Zjinnnn/branch-A-CodeQuality","messageBody":"refactor: Improve code quality","tags":["A-CodeQuality"],"fileTypesAndContributionMap":{}},{"hash":"bd69e6f1b6265dc8b2f6553090a52b614e0ad235","isMergeCommit":false,"messageTitle":"feat: Implement B-Snooze extension","messageBody":"Provide a way to postpone deadlines for better convenience.\n","fileTypesAndContributionMap":{"java":{"insertions":108,"deletions":3}}},{"hash":"642ce2783d432df5bd44951d3e047ee3859954b1","isMergeCommit":true,"messageTitle":"Merge pull request #4 from Zjinnnn/branch-B-Snooze","messageBody":"feat: Implement B-Snooze extension","tags":["BCD-Extension"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"Zjinnnn":{"java":1228,"md":14,"fxml":41,"sh":1,"bat":0,"gradle":16,"txt":13}},"authorContributionVariance":{"Zjinnnn":55690.105},"authorDisplayNameMap":{"Zjinnnn":"CS2103T-T09-4 QUEK.. JIN"}} diff --git a/archive.zip b/archive.zip index 3507dbcd1ad603959a9c65d07803013b52bff4d4..4d271996cdf19c7d1bde1bb354a5300aed07ce5e 100644 GIT binary patch delta 989917 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�@H$xhO&D- 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 +08}&wAj*;~gf@P#uNmm`JEm2v5s92+) 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⪼UXXNZOWG^WaO!y^D;JZDAk%fG!)1ejP85v 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Ξ*;=2~GR0_Vu|!l1y&;#TpWxTCb9NPE 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